From 7f6596bb13e85cd11f16c997c9aa62ad5a09376f Mon Sep 17 00:00:00 2001 From: Bill Schmidt Date: Mon, 9 Jun 2014 03:31:47 +0000 Subject: [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/test/CodeGen/builtins-ppc-altivec.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'clang/test/CodeGen/builtins-ppc-altivec.c') diff --git a/clang/test/CodeGen/builtins-ppc-altivec.c b/clang/test/CodeGen/builtins-ppc-altivec.c index 8277f5dda7d..c94656e6b5e 100644 --- a/clang/test/CodeGen/builtins-ppc-altivec.c +++ b/clang/test/CodeGen/builtins-ppc-altivec.c @@ -5155,11 +5155,15 @@ void test6() { /* vec_sums */ res_vi = vec_sums(vi, vi); // CHECK: @llvm.ppc.altivec.vsumsws +// CHECK-LE: @llvm.ppc.altivec.vperm // CHECK-LE: @llvm.ppc.altivec.vsumsws +// CHECK-LE: @llvm.ppc.altivec.vperm res_vi = vec_vsumsws(vi, vi); // CHECK: @llvm.ppc.altivec.vsumsws +// CHECK-LE: @llvm.ppc.altivec.vperm // CHECK-LE: @llvm.ppc.altivec.vsumsws +// CHECK-LE: @llvm.ppc.altivec.vperm /* vec_trunc */ res_vf = vec_trunc(vf); -- cgit v1.2.3