It's mainly about signed and unsigned llvm builtins confusion.
- When function args are bool vector and signed vector, it should be mapped to signed version instruction. Reference: ALTIVECPIM.pdf
- Some logical right shift vector functions should use unsigned >> operator, which would be translated to lshr IR instruction.
- Move some test functions needed VSX option support from builtins-ppc-altivec.c to builtins-ppc-vsx.c
The cast for __b is necessary, since it is already a vector signed char.
I don't know whether this will generate superfluous warnings or not, but it's probably best to remove it.