diff options
author | Kelvin Nilsen <kelvin@gcc.gnu.org> | 2019-04-24 15:47:06 +0000 |
---|---|---|
committer | Kelvin Nilsen <kelvin@gcc.gnu.org> | 2019-04-24 15:47:06 +0000 |
commit | 41013c9171b139d1ffed59b787d0cbcdf8c1be86 (patch) | |
tree | 8a89ea5a24ff89ba505b1d8d75b6025e242a5f73 | |
parent | 269a50879f591ce7dfb2a6cb4b26c69caab82f76 (diff) |
preparing to commitibm/branch4pr89765
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/ibm/branch4pr89765@270549 138bc75d-0d04-0410-961f-82ee72b054a4
30 files changed, 139 insertions, 121 deletions
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c index 063d4acfafb..aec9a5e0b81 100644 --- a/gcc/config/rs6000/rs6000-c.c +++ b/gcc/config/rs6000/rs6000-c.c @@ -6620,6 +6620,10 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl, default: break; + case E_V1TImode: + call = rs6000_builtin_decls[VSX_BUILTIN_VEC_EXT_V1TI]; + break; + case E_V2DFmode: call = rs6000_builtin_decls[VSX_BUILTIN_VEC_EXT_V2DF]; break; @@ -6736,11 +6740,13 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl, /* If we can use the VSX xxpermdi instruction, use that for insert. */ mode = TYPE_MODE (arg1_type); if ((mode == V2DFmode || mode == V2DImode) && VECTOR_UNIT_VSX_P (mode) - && TREE_CODE (arg2) == INTEGER_CST - && wi::ltu_p (wi::to_wide (arg2), 2)) + && TREE_CODE (arg2) == INTEGER_CST) { + wide_int selector = wi::to_wide (arg2); + selector = wi::umod_trunc (selector, 2); tree call = NULL_TREE; + arg2 = wide_int_to_tree (TREE_TYPE (arg2), selector); if (mode == V2DFmode) call = rs6000_builtin_decls[VSX_BUILTIN_VEC_SET_V2DF]; else if (mode == V2DImode) @@ -6752,11 +6758,12 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl, return build_call_expr (call, 3, arg1, arg0, arg2); } else if (mode == V1TImode && VECTOR_UNIT_VSX_P (mode) - && TREE_CODE (arg2) == INTEGER_CST - && wi::eq_p (wi::to_wide (arg2), 0)) + && TREE_CODE (arg2) == INTEGER_CST) { tree call = rs6000_builtin_decls[VSX_BUILTIN_VEC_SET_V1TI]; + wide_int selector = wi::zero(32); + arg2 = wide_int_to_tree (TREE_TYPE (arg2), selector); /* Note, __builtin_vec_insert_<xxx> has vector and scalar types reversed. */ return build_call_expr (call, 3, arg1, arg0, arg2); @@ -6764,10 +6771,13 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl, /* Build *(((arg1_inner_type*)&(vector type){arg1})+arg2) = arg0. */ arg1_inner_type = TREE_TYPE (arg1_type); - arg2 = build_binary_op (loc, BIT_AND_EXPR, arg2, - build_int_cst (TREE_TYPE (arg2), - TYPE_VECTOR_SUBPARTS (arg1_type) - - 1), 0); + if (TYPE_VECTOR_SUBPARTS (arg1_type) == 1) + arg2 = build_int_cst (TREE_TYPE (arg2), 0); + else + arg2 = build_binary_op (loc, BIT_AND_EXPR, arg2, + build_int_cst (TREE_TYPE (arg2), + TYPE_VECTOR_SUBPARTS (arg1_type) + - 1), 0); decl = build_decl (loc, VAR_DECL, NULL_TREE, arg1_type); DECL_EXTERNAL (decl) = 0; TREE_PUBLIC (decl) = 0; diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index cc8dc941537..362dab1df97 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -6944,6 +6944,10 @@ rs6000_expand_vector_extract (rtx target, rtx vec, rtx elt) switch (mode) { + case E_V1TImode: + emit_move_insn (target, gen_lowpart (TImode, vec)); + return; + case E_V2DFmode: emit_insn (gen_vsx_extract_v2df_var (target, vec, elt)); return; diff --git a/gcc/match.pd b/gcc/match.pd index 0d82beab45b..3a0a03f19df 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -4963,11 +4963,6 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (BIT_FIELD_REF @0 @1 @2)) (simplify - (BIT_FIELD_REF @0 @1 integer_zerop) - (if (tree_int_cst_equal (@1, TYPE_SIZE (TREE_TYPE (@0)))) - (view_convert @0))) - -(simplify (BIT_FIELD_REF @0 @1 @2) (switch (if (TREE_CODE (TREE_TYPE (@0)) == COMPLEX_TYPE diff --git a/gcc/testsuite/gcc.target/powerpc/pr89765-mc.c b/gcc/testsuite/gcc.target/powerpc/pr89765-mc.c index 00786735941..8384536058b 100644 --- a/gcc/testsuite/gcc.target/powerpc/pr89765-mc.c +++ b/gcc/testsuite/gcc.target/powerpc/pr89765-mc.c @@ -83,6 +83,40 @@ set_auto_n_ushort (vector unsigned short a, int n, unsigned short x) return vec_insert (x, a, n); } +__attribute ((noinline)) +unsigned __int128 +get_auto_n_uint128 (vector unsigned __int128 a, int n) +{ + return vec_extract (a, n); +} + +__attribute ((noinline)) +unsigned long long int +get_auto_n_ulong (vector unsigned long long int a, int n) +{ + return vec_extract (a, n); +} + +__attribute ((noinline)) +unsigned int +get_auto_n_uint (vector unsigned int a, int n) +{ + return vec_extract (a, n); +} + +__attribute ((noinline)) +unsigned char +get_auto_n_uchar (vector unsigned char a, int n) +{ + return vec_extract (a, n); +} + +__attribute ((noinline)) +unsigned short +get_auto_n_ushort (vector unsigned short a, int n) +{ + return vec_extract (a, n); +} int check_uint128_element (int i, unsigned __int128 entry) { @@ -92,7 +126,7 @@ int check_uint128_element (int i, unsigned __int128 entry) | 0x0706050403020100ULL)); } -int get_uint128_element (int i) +unsigned __int128 get_uint128_element (int i) { return ((((unsigned __int128) 0xffeeddccbbaa9988ULL) << 64) | 0x0706050403020100ULL); @@ -217,14 +251,14 @@ unsigned short get_ushort_element (int i) { switch (i % 8) { - case 0: return (entry == 0x9988); - case 1: return (entry == 0x8877); - case 2: return (entry == 0x7766); - case 3: return (entry == 0x6655); - case 4: return (entry == 0x5544); - case 5: return (entry == 0x4433); - case 6: return (entry == 0x3322); - case 7: return (entry == 0x2211); + case 0: return 0x9988; + case 1: return 0x8877; + case 2: return 0x7766; + case 3: return 0x6655; + case 4: return 0x5544; + case 5: return 0x4433; + case 6: return 0x3322; + case 7: return 0x2211; } } @@ -233,8 +267,8 @@ init_auto_uint128 (vector unsigned __int128 a) { int i; for (i = 0; i < 32; i += 3) - a = set_auto_n_uint128 (get_uint128_element (i), a, i); - return a + a = set_auto_n_uint128 (a, i, get_uint128_element (i)); + return a; } void do_auto_uint128 (vector unsigned __int128 a) @@ -246,14 +280,14 @@ void do_auto_uint128 (vector unsigned __int128 a) c = get_auto_n_uint128 (a, i); if (!check_uint128_element (i, c)) abort (); } - } +} vector unsigned long long int init_auto_ulong (vector unsigned long long int a) { int i; for (i = 0; i < 32; i += 3) - a = set_auto_n_ulong (get_ulong_element (i), a, i); + a = set_auto_n_ulong (a, i, get_ulong_element (i)); return a; } @@ -272,7 +306,7 @@ vector unsigned int init_auto_uint (vector unsigned int a) { int i; for (i = 0; i < 32; i += 3) - a = set_uint_element (get_auto_n_uint (i), a, i); + a = set_auto_n_uint (a, i, get_uint_element (i)); return a; } @@ -287,11 +321,11 @@ void do_auto_uint (vector unsigned int a) } } -void init_auto_ushort ( vector unsigned short a ) +vector unsigned short init_auto_ushort ( vector unsigned short a ) { int i; for (i = 0; i < 32; i += 3) - a = set_auto_n_ushort (get_ushort_element (i), a, i); + a = set_auto_n_ushort (a, i, get_ushort_element (i)); return a; } @@ -306,15 +340,15 @@ void do_auto_ushort (vector unsigned short a) } } -void init_auto_uchar (vector unsigned char a) +vector unsigned char init_auto_uchar (vector unsigned char a) { int i; for (i = 0; i < 32; i += 3) - a = set_auto_n_uchar (get_uchar_element (i), a, i); + a = set_auto_n_uchar (a, i, get_uchar_element (i)); return a; } -void do_auto_uchar ( vector unsigned char a ) +void do_auto_uchar (vector unsigned char a) { int i; unsigned char c; diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10c.c index e4cad166460..5ed6424d64f 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10c.c @@ -100,7 +100,7 @@ int main (int argc, short *argv[]) { abort (); sv = s30 (sv, CONST2); - if (sv [6] != CONST6) + if (sv [6] != CONST2) abort (); sv = ms3 (&sv, CONST5); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10d.c index fb4990f1d4f..c9aaecad920 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10d.c @@ -100,7 +100,7 @@ int main (int argc, short *argv[]) { abort (); sv = s30 (sv, CONST2); - if (sv [6] != CONST6) + if (sv [6] != CONST2) abort (); sv = ms3 (&sv, CONST5); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11c.c index de7d52d4f56..8e514aa2b1f 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11c.c @@ -40,22 +40,22 @@ vector int s30 (vector int v, int x) } /* Test for vector residing in memory. */ -vector int ms3 (vector int *vp) +vector int ms3 (vector int *vp, int x) { return vec_insert (x, *vp, 3); } -vector int ms1(vector int *vp) +vector int ms1 (vector int *vp, int x) { return vec_insert (x, *vp, 1); } -vector int ms21(vector int *vp) +vector int ms21 (vector int *vp, int x) { return vec_insert (x, *vp, 21); } -vector int ms30(vector int *vp) +vector int ms30 (vector int *vp, int x) { return vec_insert (x, *vp, 30); } @@ -64,14 +64,14 @@ vector int ms30(vector int *vp) /* Test for variable selector and vector residing in register. */ __attribute__((noinline)) -vector int ci (vector int v, int i) +vector int ci (vector int v, int i, int x) { return vec_insert (x, v, i); } /* Test for variable selector and vector residing in memory. */ __attribute__((noinline)) -vector int mci(vector int *vp, int i) +vector int mci(vector int *vp, int i, int x) { return vec_insert (x, *vp, i); } @@ -90,7 +90,7 @@ int main (int argc, int *argv[]) { abort (); sv = s21 (sv, CONST0); - if (sv [1] != CONST01) + if (sv [1] != CONST0) abort (); sv = s30 (sv, CONST1); @@ -141,7 +141,7 @@ int main (int argc, int *argv[]) { if (sv [1] != CONST2) abort (); - sv = mci (&sv, 16, CONST3; + sv = mci (&sv, 16, CONST3); if (sv [0] != CONST3) abort (); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11d.c index 5f2ad905636..116802aeece 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11d.c @@ -40,22 +40,22 @@ vector int s30 (vector int v, int x) } /* Test for vector residing in memory. */ -vector int ms3 (vector int *vp) +vector int ms3 (vector int *vp, int x) { return vec_insert (x, *vp, 3); } -vector int ms1(vector int *vp) +vector int ms1 (vector int *vp, int x) { return vec_insert (x, *vp, 1); } -vector int ms21(vector int *vp) +vector int ms21 (vector int *vp, int x) { return vec_insert (x, *vp, 21); } -vector int ms30(vector int *vp) +vector int ms30 (vector int *vp, int x) { return vec_insert (x, *vp, 30); } @@ -64,14 +64,14 @@ vector int ms30(vector int *vp) /* Test for variable selector and vector residing in register. */ __attribute__((noinline)) -vector int ci (vector int v, int i) +vector int ci (vector int v, int i, int x) { return vec_insert (x, v, i); } /* Test for variable selector and vector residing in memory. */ __attribute__((noinline)) -vector int mci(vector int *vp, int i) +vector int mci(vector int *vp, int i, int x) { return vec_insert (x, *vp, i); } @@ -90,7 +90,7 @@ int main (int argc, int *argv[]) { abort (); sv = s21 (sv, CONST0); - if (sv [1] != CONST01) + if (sv [1] != CONST0) abort (); sv = s30 (sv, CONST1); @@ -141,7 +141,7 @@ int main (int argc, int *argv[]) { if (sv [1] != CONST2) abort (); - sv = mci (&sv, 16, CONST3; + sv = mci (&sv, 16, CONST3); if (sv [0] != CONST3) abort (); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12c.c index c75c1c14fb1..1e57bc46cdd 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12c.c @@ -30,12 +30,12 @@ vector long long int e3 (vector long long int v, long long int x) } /* Test for vector residing in memory. */ -vector long long int me0 (vector long long int *vp) +vector long long int me0 (vector long long int *vp, long long int x) { return vec_insert (x, *vp, 0); } -vector long long int me3 (vector long long int *vp) +vector long long int me3 (vector long long int *vp, long long int x) { return vec_insert (x, *vp, 3); } diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12d.c index c43b8b7dd36..3bf06085fb5 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12d.c @@ -30,12 +30,12 @@ vector long long int e3 (vector long long int v, long long int x) } /* Test for vector residing in memory. */ -vector long long int me0 (vector long long int *vp) +vector long long int me0 (vector long long int *vp, long long int x) { return vec_insert (x, *vp, 0); } -vector long long int me3 (vector long long int *vp) +vector long long int me3 (vector long long int *vp, long long int x) { return vec_insert (x, *vp, 3); } diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c index 907bcce9236..7dc6bd994e4 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c @@ -9,7 +9,7 @@ #include <altivec.h> /* Define this after PR89424 is addressed. */ -#undef PR89424 +#define PR89424 /* Define this after PR89626 is addressed. */ #undef PR89626 diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c index e1d791ded4f..168227214fc 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c @@ -9,7 +9,7 @@ #include <altivec.h> /* Define this after PR89424 is addressed. */ -#undef PR89424 +#define PR89424 /* Define this after PR89626 is addressed. */ #undef PR89626 diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13c.c index a9771c50b74..43c6bed7695 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13c.c @@ -8,17 +8,7 @@ #include <altivec.h> -/* Define this after PR89424 is addressed. */ -#undef PR89424 - -/* Define this after PR89626 is addressed. */ -#undef PR89626 - -#ifdef PR89626 -#define SIGNED -#else #define SIGNED signed -#endif extern void abort (void); @@ -54,7 +44,6 @@ vector SIGNED __int128 me3 (vector SIGNED __int128 *vp, SIGNED __int128 x) /* Test the same with variable indices. */ -#ifdef PR89424 /* Test for variable selector and vector residing in register. */ __attribute__((noinline)) vector SIGNED __int128 @@ -70,7 +59,6 @@ mei (vector SIGNED __int128 *vp, int i, SIGNED __int128 x) { return vec_insert (x, *vp, i); } -#endif int main (int argc, char *argv[]) { vector SIGNED __int128 dv = { CONST0 }; @@ -92,7 +80,6 @@ int main (int argc, char *argv[]) { if (dv [0] != CONST3) abort (); -#ifdef PR89424 dv = ei (dv, 0, CONST1); if (dv [0] != CONST1) abort (); @@ -102,7 +89,7 @@ int main (int argc, char *argv[]) { abort (); dv = ei (dv, 2, CONST3); - if (dv [0] != CONST0, CONST3) + if (dv [0] != CONST3) abort (); dv = ei (dv, 3, CONST1); @@ -124,7 +111,5 @@ int main (int argc, char *argv[]) { dv = mei (&dv, 3, CONST2); if (dv [0] != CONST2) abort (); -#endif - return 0; } diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13d.c index 9e206247c54..257de552e64 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13d.c @@ -8,17 +8,7 @@ #include <altivec.h> -/* Define this after PR89424 is addressed. */ -#undef PR89424 - -/* Define this after PR89626 is addressed. */ -#undef PR89626 - -#ifdef PR89626 -#define SIGNED -#else #define SIGNED signed -#endif extern void abort (void); @@ -54,7 +44,6 @@ vector SIGNED __int128 me3 (vector SIGNED __int128 *vp, SIGNED __int128 x) /* Test the same with variable indices. */ -#ifdef PR89424 /* Test for variable selector and vector residing in register. */ __attribute__((noinline)) vector SIGNED __int128 @@ -70,7 +59,6 @@ mei (vector SIGNED __int128 *vp, int i, SIGNED __int128 x) { return vec_insert (x, *vp, i); } -#endif int main (int argc, char *argv[]) { vector SIGNED __int128 dv = { CONST0 }; @@ -92,7 +80,6 @@ int main (int argc, char *argv[]) { if (dv [0] != CONST3) abort (); -#ifdef PR89424 dv = ei (dv, 0, CONST1); if (dv [0] != CONST1) abort (); @@ -102,7 +89,7 @@ int main (int argc, char *argv[]) { abort (); dv = ei (dv, 2, CONST3); - if (dv [0] != CONST0, CONST3) + if (dv [0] != CONST3) abort (); dv = ei (dv, 3, CONST1); @@ -124,7 +111,5 @@ int main (int argc, char *argv[]) { dv = mei (&dv, 3, CONST2); if (dv [0] != CONST2) abort (); -#endif - return 0; } diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14c.c index 3472e15241a..5ba4bd59eb3 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14c.c @@ -81,7 +81,7 @@ int main (int argc, char *argv[]) { vector float dv = { CONST0, CONST1, CONST2, CONST3 }; float d; - dv = e0 (dv, CONT3); + dv = e0 (dv, CONST3); if (dv [0] != CONST3) abort (); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14d.c index 5335b740012..63784a2e220 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14d.c @@ -81,7 +81,7 @@ int main (int argc, char *argv[]) { vector float dv = { CONST0, CONST1, CONST2, CONST3 }; float d; - dv = e0 (dv, CONT3); + dv = e0 (dv, CONST3); if (dv [0] != CONST3) abort (); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16c.c index eca8f52ea73..eea4d406230 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16c.c @@ -6,6 +6,7 @@ instructions. Intentionally not specifying cpu in order to test all code generation paths. */ +#include <stdio.h> #include <altivec.h> extern void abort (void); @@ -95,66 +96,82 @@ int main (int argc, char *argv[]) { CONST4, CONST5, CONST6, CONST7, CONST8, CONST9, CONSTA, CONSTB, CONSTC, CONSTD, CONSTE, CONSTF }; + printf ("A\n"); cv = c0 (cv, CONST3); if (cv [0] != CONST3) abort (); + printf ("B\n"); cv = c9 (cv, CONST2); if (cv [9] != CONST2) abort (); + printf ("C\n"); cv = c21 (cv, CONSTF); if (cv [5] != CONSTF) abort (); + printf ("D\n"); cv = c30 (cv, CONST3); if (cv [14] != CONST3) abort (); + printf ("E\n"); cv = mc0 (&cv, CONST4); if (cv [0] != CONST4) abort (); - cv = mc9 (&cv, CONSTE); + printf ("F\n"); + cv = mc9 (&cv, CONST3); if (cv [9] != CONST3) abort (); + printf ("G\n"); cv = mc21 (&cv, CONST1); if (cv [5] != CONST1) abort (); + printf ("H\n"); cv = mc30 (&cv, CONSTC); if (cv [14] != CONSTC) abort (); + printf ("I\n"); cv = ci (cv, 8, CONSTD); if (cv [8] != CONSTD) abort (); + printf ("J\n"); cv = ci (cv, 13, CONST5); if (cv [13] != CONST5) abort (); + printf ("K\n"); cv = ci (cv, 23, CONST6); if (cv [7] != CONST6) abort (); + printf ("L\n"); cv = ci (cv, 31, CONST7); if (cv [15] != CONST7) abort (); + printf ("M\n"); cv = mci (&cv, 5, CONST8); if (cv [5] != CONST8) abort (); + printf ("N\n"); cv = mci (&cv, 12, CONST9); if (cv [12] != CONST9) abort (); + printf ("O\n"); cv = mci (&cv, 25, CONSTA); if (cv [9] != CONSTA) abort (); + printf ("P\n"); cv = mci (&cv, 16, CONSTB); if (cv [0] != CONSTB) abort (); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16d.c index fbe574fbc85..f899e57f2d4 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16d.c @@ -115,7 +115,7 @@ int main (int argc, char *argv[]) { if (cv [0] != CONST4) abort (); - cv = mc9 (&cv, CONSTE); + cv = mc9 (&cv, CONST3); if (cv [9] != CONST3) abort (); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17c.c index 342b07cf28f..b95dbcdde15 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17c.c @@ -118,7 +118,7 @@ int main (int argc, unsigned short *argv[]) { if (sv [6] != CONST0) abort (); - sv = ci (sv, 5), CONST1; + sv = ci (sv, 5, CONST1); if (sv [5] != CONST1) abort (); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17d.c index 1de84e5cad6..b95dbcdde15 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17d.c @@ -1,6 +1,6 @@ /* { dg-do run } */ /* { dg-require-effective-target vmx_hw } */ -/* { dg-options "-maltivec -O3" } */ +/* { dg-options "-maltivec" } */ /* This test should run the same on any target that supports altivec/vmx instructions. Intentionally not specifying cpu in order to test @@ -118,7 +118,7 @@ int main (int argc, unsigned short *argv[]) { if (sv [6] != CONST0) abort (); - sv = ci (sv, 5), CONST1; + sv = ci (sv, 5, CONST1); if (sv [5] != CONST1) abort (); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-18c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-18c.c index 0150e6e8542..19932629d4b 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-18c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-18c.c @@ -63,14 +63,14 @@ vector unsigned int ms30(vector unsigned int *vp, unsigned int x) /* Test the same with variable indices. */ /* Test for variable selector and vector residing in register. */ -__attribute__((noinline), unsigned int x) +__attribute__((noinline)) vector unsigned int ci (vector unsigned int v, int i, unsigned int x) { return vec_insert (x, v, i); } /* Test for variable selector and vector residing in memory. */ -__attribute__((noinline), unsigned int x) +__attribute__((noinline)) vector unsigned int mci(vector unsigned int *vp, int i, unsigned int x) { return vec_insert (x, *vp, i); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-18d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-18d.c index 8144d968092..8c643aaafd3 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-18d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-18d.c @@ -63,14 +63,14 @@ vector unsigned int ms30(vector unsigned int *vp, unsigned int x) /* Test the same with variable indices. */ /* Test for variable selector and vector residing in register. */ -__attribute__((noinline), unsigned int x) +__attribute__((noinline)) vector unsigned int ci (vector unsigned int v, int i, unsigned int x) { return vec_insert (x, v, i); } /* Test for variable selector and vector residing in memory. */ -__attribute__((noinline), unsigned int x) +__attribute__((noinline)) vector unsigned int mci(vector unsigned int *vp, int i, unsigned int x) { return vec_insert (x, *vp, i); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-19c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-19c.c index 2ce34c366a1..3ff0dfe20b0 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-19c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-19c.c @@ -51,7 +51,7 @@ me3 (vector unsigned long long int *vp, unsigned long long int x) /* Test the same with variable indices. */ /* Test for variable selector and vector residing in register. */ -__attribute__((noinline), unsigned long long int x) +__attribute__((noinline)) vector unsigned long long int ei (vector unsigned long long int v, int i, unsigned long long int x) { @@ -59,6 +59,7 @@ ei (vector unsigned long long int v, int i, unsigned long long int x) } /* Test for variable selector and vector residing in memory. */ +__attribute__((noinline)) vector unsigned long long int mei (vector unsigned long long int *vp, int i, unsigned long long int x) { diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-19d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-19d.c index 3ccba8db5ca..d0236df5308 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-19d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-19d.c @@ -51,7 +51,7 @@ me3 (vector unsigned long long int *vp, unsigned long long int x) /* Test the same with variable indices. */ /* Test for variable selector and vector residing in register. */ -__attribute__((noinline), unsigned long long int x) +__attribute__((noinline)) vector unsigned long long int ei (vector unsigned long long int v, int i, unsigned long long int x) { @@ -59,6 +59,7 @@ ei (vector unsigned long long int v, int i, unsigned long long int x) } /* Test for variable selector and vector residing in memory. */ +__attribute__((noinline)) vector unsigned long long int mei (vector unsigned long long int *vp, int i, unsigned long long int x) { diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20a.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20a.c index 638f5a1c904..12350c3ed7a 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20a.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20a.c @@ -9,7 +9,7 @@ #include <altivec.h> /* Define this after PR89424 is addressed. */ -#undef PR89424 +#define PR89424 extern void abort (void); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20b.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20b.c index 7b127a06c77..37fb7133ba0 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20b.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20b.c @@ -9,7 +9,7 @@ #include <altivec.h> /* Define this after PR89424 is addressed. */ -#undef PR89424 +#define PR89424 extern void abort (void); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20c.c index 3210f3e7694..e56d500515e 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20c.c @@ -8,9 +8,6 @@ #include <altivec.h> -/* Define this after PR89424 is addressed. */ -#undef PR89424 - extern void abort (void); #define CONST0 (((unsigned __int128) 31415926539) << 60) @@ -24,7 +21,7 @@ extern void abort (void); /* Test for vector residing in register. */ vector unsigned __int128 e0 (vector unsigned __int128 v, unsigned __int128 x) { - return __builtin_vec_extract (v, 0); + return vec_insert (x, v, 0); } vector unsigned __int128 e3 (vector unsigned __int128 v, unsigned __int128 x) @@ -47,7 +44,6 @@ me3 (vector unsigned __int128 *vp, unsigned __int128 x) /* Test the same with variable indices. */ -#ifdef PR89424 /* Test for variable selector and vector residing in register. */ __attribute__((noinline)) vector unsigned __int128 @@ -63,7 +59,6 @@ mei (vector unsigned __int128 *vp, int i, unsigned __int128 x) { return vec_insert (x, *vp, i); } -#endif int main (int argc, char *argv[]) { vector unsigned __int128 dv = { CONST0 }; @@ -84,7 +79,6 @@ int main (int argc, char *argv[]) { if (dv [0] != CONST3) abort (); -#ifdef PR89424 dv = ei (dv, 0, CONST0); if (dv [0] != CONST0) abort (); @@ -116,7 +110,6 @@ int main (int argc, char *argv[]) { dv = mei (&dv, 3, CONST3); if (dv [0] != CONST3) abort (); -#endif return 0; } diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20d.c index 3a5dcc6dcb4..17c7b0e48a9 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-20d.c @@ -8,9 +8,6 @@ #include <altivec.h> -/* Define this after PR89424 is addressed. */ -#undef PR89424 - extern void abort (void); #define CONST0 (((unsigned __int128) 31415926539) << 60) @@ -24,7 +21,7 @@ extern void abort (void); /* Test for vector residing in register. */ vector unsigned __int128 e0 (vector unsigned __int128 v, unsigned __int128 x) { - return __builtin_vec_extract (v, 0); + return vec_insert (x, v, 0); } vector unsigned __int128 e3 (vector unsigned __int128 v, unsigned __int128 x) @@ -47,7 +44,6 @@ me3 (vector unsigned __int128 *vp, unsigned __int128 x) /* Test the same with variable indices. */ -#ifdef PR89424 /* Test for variable selector and vector residing in register. */ __attribute__((noinline)) vector unsigned __int128 @@ -63,7 +59,6 @@ mei (vector unsigned __int128 *vp, int i, unsigned __int128 x) { return vec_insert (x, *vp, i); } -#endif int main (int argc, char *argv[]) { vector unsigned __int128 dv = { CONST0 }; @@ -84,7 +79,6 @@ int main (int argc, char *argv[]) { if (dv [0] != CONST3) abort (); -#ifdef PR89424 dv = ei (dv, 0, CONST0); if (dv [0] != CONST0) abort (); @@ -116,7 +110,6 @@ int main (int argc, char *argv[]) { dv = mei (&dv, 3, CONST3); if (dv [0] != CONST3) abort (); -#endif return 0; } diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-9c.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-9c.c index 0d16d12b575..3bec1474954 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-9c.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-9c.c @@ -121,7 +121,7 @@ int main (int argc, char *argv[]) { abort (); cv = mc21 (&cv, CONST7); - if (cv [5] != CONST57) + if (cv [5] != CONST7) abort (); cv = mc30 (&cv, CONST2); diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-9d.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-9d.c index 59fb500830a..1e70c521fec 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-9d.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-9d.c @@ -121,7 +121,7 @@ int main (int argc, char *argv[]) { abort (); cv = mc21 (&cv, CONST7); - if (cv [5] != CONST57) + if (cv [5] != CONST7) abort (); cv = mc30 (&cv, CONST2); |