[llvm-branch-commits] [cfe-branch] r214823 - Merging r214801:
Bill Wendling
isanbard at gmail.com
Tue Aug 26 15:31:19 PDT 2014
Um…What the hell is this? It’s far too late to be applying things to the branch, especially without my approval
-bw
On Aug 4, 2014, at 4:48 PM, Bill Schmidt <wschmidt at linux.vnet.ibm.com> wrote:
> Author: wschmidt
> Date: Mon Aug 4 18:48:10 2014
> New Revision: 214823
>
> URL: http://llvm.org/viewvc/llvm-project?rev=214823&view=rev
> Log:
> Merging r214801:
> ------------------------------------------------------------------------
> r214801 | wschmidt | 2014-08-04 18:21:26 -0500 (Mon, 04 Aug 2014) | 19 lines
>
> [PPC64LE] Fix wrong IR for vec_sld and vec_vsldoi
>
> My original LE implementation of the vsldoi instruction, with its
> altivec.h interfaces vec_sld and vec_vsldoi, produces incorrect
> shufflevector operations in the LLVM IR. Correct code is generated
> because the back end handles the incorrect shufflevector in a
> consistent manner.
>
> This patch and a companion patch for LLVM correct this problem by
> removing the fixup from altivec.h and the corresponding fixup from the
> PowerPC back end. Several test cases are also modified to reflect the
> now-correct LLVM IR.
>
> The vec_sums and vec_vsumsws interfaces in altivec.h are also fixed,
> because they used vec_perm calls intended to be recognized as vsldoi
> instructions. These vec_perm calls are now replaced with code that
> more clearly shows the intent of the transformation.
>
>
> ------------------------------------------------------------------------
>
> Modified:
> cfe/branches/release_35/lib/Headers/altivec.h
> cfe/branches/release_35/test/CodeGen/builtins-ppc-altivec.c
>
> Modified: cfe/branches/release_35/lib/Headers/altivec.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_35/lib/Headers/altivec.h?rev=214823&r1=214822&r2=214823&view=diff
> ==============================================================================
> --- cfe/branches/release_35/lib/Headers/altivec.h (original)
> +++ cfe/branches/release_35/lib/Headers/altivec.h Mon Aug 4 18:48:10 2014
> @@ -5224,113 +5224,65 @@ vec_vslw(vector unsigned int __a, vector
> static vector signed char __ATTRS_o_ai
> vec_sld(vector signed char __a, vector signed char __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector unsigned char __ATTRS_o_ai
> vec_sld(vector unsigned char __a, vector unsigned char __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector short __ATTRS_o_ai
> vec_sld(vector short __a, vector short __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector unsigned short __ATTRS_o_ai
> vec_sld(vector unsigned short __a, vector unsigned short __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector pixel __ATTRS_o_ai
> vec_sld(vector pixel __a, vector pixel __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector int __ATTRS_o_ai
> vec_sld(vector int __a, vector int __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector unsigned int __ATTRS_o_ai
> vec_sld(vector unsigned int __a, vector unsigned int __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector float __ATTRS_o_ai
> vec_sld(vector float __a, vector float __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> /* vec_vsldoi */
> @@ -5338,113 +5290,65 @@ vec_sld(vector float __a, vector float _
> static vector signed char __ATTRS_o_ai
> vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector unsigned char __ATTRS_o_ai
> vec_vsldoi(vector unsigned char __a, vector unsigned char __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector short __ATTRS_o_ai
> vec_vsldoi(vector short __a, vector short __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector unsigned short __ATTRS_o_ai
> vec_vsldoi(vector unsigned short __a, vector unsigned short __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector pixel __ATTRS_o_ai
> vec_vsldoi(vector pixel __a, vector pixel __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector int __ATTRS_o_ai
> vec_vsldoi(vector int __a, vector int __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector unsigned int __ATTRS_o_ai
> vec_vsldoi(vector unsigned int __a, vector unsigned int __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> static vector float __ATTRS_o_ai
> vec_vsldoi(vector float __a, vector float __b, unsigned char __c)
> {
> -#ifdef __LITTLE_ENDIAN__
> - return vec_perm(__a, __b, (vector unsigned char)
> - (__c, __c-1, __c-2, __c-3, __c-4, __c-5, __c-6, __c-7,
> - __c-8, __c-9, __c-10, __c-11, __c-12, __c-13, __c-14, __c-15));
> -#else
> return vec_perm(__a, __b, (vector unsigned char)
> (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
> __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15));
> -#endif
> }
>
> /* vec_sll */
> @@ -8504,13 +8408,9 @@ static vector signed int __attribute__((
> vec_sums(vector signed int __a, vector signed int __b)
> {
> #ifdef __LITTLE_ENDIAN__
> - __b = (vector signed int)
> - vec_perm(__b, __b, (vector unsigned char)
> - (12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11));
> + __b = (vector signed int)vec_splat(__b, 3);
> __b = __builtin_altivec_vsumsws(__a, __b);
> - return (vector signed int)
> - vec_perm(__b, __b, (vector unsigned char)
> - (4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3));
> + return (vector signed int)(0, 0, 0, __b[0]);
> #else
> return __builtin_altivec_vsumsws(__a, __b);
> #endif
> @@ -8522,13 +8422,9 @@ static vector signed int __attribute__((
> vec_vsumsws(vector signed int __a, vector signed int __b)
> {
> #ifdef __LITTLE_ENDIAN__
> - __b = (vector signed int)
> - vec_perm(__b, __b, (vector unsigned char)
> - (12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11));
> + __b = (vector signed int)vec_splat(__b, 3);
> __b = __builtin_altivec_vsumsws(__a, __b);
> - return (vector signed int)
> - vec_perm(__b, __b, (vector unsigned char)
> - (4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3));
> + return (vector signed int)(0, 0, 0, __b[0]);
> #else
> return __builtin_altivec_vsumsws(__a, __b);
> #endif
>
> Modified: cfe/branches/release_35/test/CodeGen/builtins-ppc-altivec.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_35/test/CodeGen/builtins-ppc-altivec.c?rev=214823&r1=214822&r2=214823&view=diff
> ==============================================================================
> --- cfe/branches/release_35/test/CodeGen/builtins-ppc-altivec.c (original)
> +++ cfe/branches/release_35/test/CodeGen/builtins-ppc-altivec.c Mon Aug 4 18:48:10 2014
> @@ -3258,98 +3258,66 @@ void test6() {
> /* vec_sld */
> res_vsc = vec_sld(vsc, vsc, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vuc = vec_sld(vuc, vuc, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vs = vec_sld(vs, vs, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vus = vec_sld(vus, vus, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vp = vec_sld(vp, vp, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vi = vec_sld(vi, vi, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vui = vec_sld(vui, vui, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vf = vec_sld(vf, vf, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vsc = vec_vsldoi(vsc, vsc, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vuc = vec_vsldoi(vuc, vuc, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vs = vec_vsldoi(vs, vs, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vus = vec_vsldoi(vus, vus, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vp = vec_vsldoi(vp, vp, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vi = vec_vsldoi(vi, vi, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vui = vec_vsldoi(vui, vui, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> res_vf = vec_vsldoi(vf, vf, 0);
> // CHECK: @llvm.ppc.altivec.vperm
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 1
> -// CHECK-LE: sub nsw i32 {{[%_.a-z0-9]+}}, 15
> // CHECK-LE: @llvm.ppc.altivec.vperm
>
> /* vec_sll */
> @@ -5189,13 +5157,11 @@ void test6() {
> // 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);
>
>
> _______________________________________________
> llvm-branch-commits mailing list
> llvm-branch-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-branch-commits
More information about the llvm-branch-commits
mailing list