[PPC64LE] Implement little-endian semantics for vec_sums
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Mon, 9 Jun 2014 03:31:47 +0000 (03:31 +0000)
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>
Mon, 9 Jun 2014 03:31:47 +0000 (03:31 +0000)
commit7f6596bb13e85cd11f16c997c9aa62ad5a09376f
treed5bc1af04832f8d121d559feae48af93b5d34967
parent4b56692e3032a41e3a172905ff9407649cba004e
[PPC64LE] Implement little-endian semantics for vec_sums

The PowerPC vsumsws instruction, accessed via vec_sums, is defined
architecturally with a big-endian bias, in that the second input vector
and the result always reference big-endian element 3 (little-endian
element 0).  For ease of porting, the programmer wants elements 3 in
both cases.

To provide this semantics, for little endian we generate a permute for
the second input vector prior to the vsumsws instruction, and generate
a permute for the result vector following the vsumsws instruction.

The correctness of this code is tested by the new sums.c test added in
a previous patch, as well as the modifications to
builtins-ppc-altivec.c in the present patch.

llvm-svn: 210449
clang/lib/Headers/altivec.h
clang/test/CodeGen/builtins-ppc-altivec.c