aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.target/powerpc')
-rw-r--r--gcc/testsuite/gcc.target/powerpc/block-cmp-8.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c40
-rw-r--r--gcc/testsuite/gcc.target/powerpc/power11-3.c1
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr121007.c40
-rw-r--r--gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c10
5 files changed, 71 insertions, 22 deletions
diff --git a/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c b/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c
index 22a48c8..0f35ddd 100644
--- a/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c
+++ b/gcc/testsuite/gcc.target/powerpc/block-cmp-8.c
@@ -1,6 +1,6 @@
/* { dg-do run { target ilp32 } } */
/* { dg-options "-O2 -mpowerpc64" } */
-/* { dg-require-effective-target has_arch_ppc64 } */
+/* { dg-require-effective-target powerpc64 } */
/* { dg-timeout-factor 2 } */
/* Verify memcmp on m32 mpowerpc64 */
diff --git a/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c b/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c
index 4b90437..fab7a52 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c
@@ -27,10 +27,10 @@ int
main () {
int i;
signed long sl;
- signed char sc, expected_sc;
- signed short ss, expected_ss;
- signed int si, expected_si;
- signed long long int sll, expected_sll;
+ signed char sc[2], expected_sc;
+ signed short ss[2], expected_ss;
+ signed int si[2], expected_si;
+ signed long long int sll[2], expected_sll;
signed char *psc;
signed short *pss;
signed int *psi;
@@ -41,56 +41,56 @@ main () {
printf("Data to store [%d] = 0x%llx %llx\n", i, val.ull[1], val.ull[0]);
#endif
- psc = ≻
- pss = &ss;
- psi = &si;
- psll = &sll;
+ psc = &sc[0];
+ pss = &ss[0];
+ psi = &si[0];
+ psll = &sll[0];
sl = 1;
- sc = 0xA1;
+ sc[0] = 0xA1;
expected_sc = 0xA1;
__builtin_altivec_tr_stxvrbx (store_data, sl, psc);
- if (expected_sc != sc & 0xFF)
+ if (expected_sc != sc[0] & 0xFF)
#if DEBUG
printf(" ERROR: Signed char = 0x%x doesn't match expected value 0x%x\n",
- sc & 0xFF, expected_sc);
+ sc[0] & 0xFF, expected_sc);
#else
abort();
#endif
- ss = 0x52;
+ ss[0] = 0x52;
expected_ss = 0x1752;
__builtin_altivec_tr_stxvrhx (store_data, sl, pss);
- if (expected_ss != ss & 0xFFFF)
+ if (expected_ss != ss[0] & 0xFFFF)
#if DEBUG
printf(" ERROR: Signed short = 0x%x doesn't match expected value 0x%x\n",
- ss, expected_ss) & 0xFFFF;
+ ss[0], expected_ss) & 0xFFFF;
#else
abort();
#endif
- si = 0x21;
+ si[0] = 0x21;
expected_si = 0x54321721;
__builtin_altivec_tr_stxvrwx (store_data, sl, psi);
- if (expected_si != si)
+ if (expected_si != si[0])
#if DEBUG
printf(" ERROR: Signed int = 0x%x doesn't match expected value 0x%x\n",
- si, expected_si);
+ si[0], expected_si);
#else
abort();
#endif
- sll = 0x12FFULL;
+ sll[0] = 0x12FFULL;
expected_sll = 0xdcba9876543217FF;
__builtin_altivec_tr_stxvrdx (store_data, sl, psll);
- if (expected_sll != sll)
+ if (expected_sll != sll[0])
#if DEBUG
printf(" ERROR: Signed long long int = 0x%llx doesn't match expected value 0x%llx\n",
- sll, expected_sll);
+ sll[0], expected_sll);
#else
abort();
#endif
diff --git a/gcc/testsuite/gcc.target/powerpc/power11-3.c b/gcc/testsuite/gcc.target/powerpc/power11-3.c
index fa1aedd..56bf881 100644
--- a/gcc/testsuite/gcc.target/powerpc/power11-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/power11-3.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-mdejagnu-cpu=power8 -O2" } */
+/* { dg-require-ifunc "" } */
/* Check if we can set the power11 target via a target_clones attribute. */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr121007.c b/gcc/testsuite/gcc.target/powerpc/pr121007.c
new file mode 100644
index 0000000..9e6b1be
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr121007.c
@@ -0,0 +1,40 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mdejagnu-cpu=power9" } */
+
+typedef struct { int a; } A;
+unsigned char *a;
+char b;
+int c;
+void foo (vector char, vector char, vector char);
+
+void
+bar (long stride)
+{
+ vector char v0, v1, v2, v3, v5;
+ vector char r0 = __builtin_vec_vsx_ld (0, a);
+ vector char r2 = __builtin_vec_vsx_ld (2 * stride, a - 3);
+ vector char r3 = __builtin_vec_vsx_ld (3 * stride, a - 3);
+ vector char r4;
+ vector char r6 = __builtin_vec_vsx_ld (6 * stride, a - 3);
+ vector char r7 = __builtin_vec_vsx_ld (7 * stride, a - 3);
+ vector char r14, h, i, j;
+ if (b)
+ return;
+ v1 = __builtin_vec_vsx_ld (9 * stride, a);
+ v2 = __builtin_vec_vsx_ld (10 * stride, a - 3);
+ v3 = __builtin_vec_vsx_ld (11 * stride, a - 3);
+ r3 = __builtin_vec_mergeh (r3, v3);
+ v5 = __builtin_vec_mergel (r2, r6);
+ r14 = __builtin_vec_mergeh (r3, r7);
+ r4 = __builtin_vec_mergeh (v2, r14);
+ v0 = __builtin_vec_mergeh (r0, r4);
+ union { unsigned char a[16]; A b; } temp;
+ vector signed char k;
+ h = __builtin_vec_ld (0, temp.a);
+ i = __builtin_vec_splat (h, 1);
+ temp.b.a = c;
+ k = __builtin_vec_ld (0, (signed char *) temp.a);
+ j = __builtin_vec_and (i, (vector char) k);
+ foo (v1, v0, j);
+ foo (v1, v5, j);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c
index 5095d50..312043b 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c
@@ -1,8 +1,16 @@
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
-/* { dg-options "-O2 -mdejagnu-cpu=power7 -fno-inline-functions" } */
+/* { dg-options "-O2 -mdejagnu-cpu=power7 -fno-inline-functions -fno-ipa-icf" } */
/* { dg-require-effective-target powerpc_vsx } */
+/* PR testsuite/119382
+ Note: Added -fno-ipa-icf to disable Interprocedural Identical Code
+ Folding (ICF). Without this, insert_di_0_v2 is merged with insert_di_0
+ due to improved alias analysis introduced in commit r15-7961-gdc47161c1f32c3.
+ This results in the compiler replacing insert_di_0_v2 with a tail call to
+ insert_di_0, altering expected test behavior. Disabling ICF ensures correct
+ execution of the test. */
+
/* Test simple extract/insert/slat operations. Make sure all types are
supported with various options. */