This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH rs6000] Fix for builtins-4-runnable.c testcase FAIL on power7/BE 32-bit
- From: Carl Love <cel at us dot ibm dot com>
- To: gcc-patches at gcc dot gnu dot org, David Edelsohn <dje dot gcc at gmail dot com>, Segher Boessenkool <segher at kernel dot crashing dot org>
- Cc: Bill Schmidt <wschmidt at linux dot vnet dot ibm dot com>, cel at us dot ibm dot com
- Date: Fri, 09 Feb 2018 08:22:57 -0800
- Subject: [PATCH rs6000] Fix for builtins-4-runnable.c testcase FAIL on power7/BE 32-bit
- Authentication-results: sourceware.org; auth=none
GCC maintainers:
The following patch contains fixes for the builtins4-runnable.c test in
32-bit mode for the current GCC 8 branch. This is issue #290 in Bill
Schmidt's issues. The int128 and uint128 variable types are not
supported in 32-bit mode. The tests were moved to a new test file and
restricted to run only when int128 type is supported.
The patch passes the regression testing on Power 8 BE enabled for 64-
bit and 32-bit modes. Additionally, the patch passes regression
testing on Power 8 LE.
Let me know if the patch looks OK or not.
Carl Love
gcc/testsuite/ChangeLog:
2018-02-09 Carl Love <cel@us.ibm.com>
* gcc.target/powerpc/builtins-4-runnable.c (main): Move
int128 and
uint128 tests to new testfile.
* gcc.target/powerpc/builtins-4-int128-runnable.c: New testfile
for
int128 and uint128 tests.
* gcc.target/powerpc/powerpc.exp: Add builtins-4-int128-
runnable.c to
list oftorture tests.
---
.../powerpc/builtins-4-int128-runnable.c | 108
+++++++++++++++++++++
.../gcc.target/powerpc/builtins-4-runnable.c | 84 -----------
-----
gcc/testsuite/gcc.target/powerpc/powerpc.exp | 1 +
3 files changed, 109 insertions(+), 84 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/powerpc/builtins-4-int128-
runnable.c
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-4-int128-
runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-4-int128-
runnable.c
new file mode 100644
index 0000000..a6973f7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-4-int128-runnable.c
@@ -0,0 +1,108 @@
+/* { dg-do run } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-maltivec -mvsx" } */
+
+#include <inttypes.h>
+#include <altivec.h> // vector
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+void abort (void);
+
+int main() {
+ int i;
+ __uint128_t data_u128[100];
+ __int128_t data_128[100];
+
+ vector __int128_t vec_128_expected1, vec_128_result1;
+ vector __uint128_t vec_u128_expected1, vec_u128_result1;
+ signed long long zero = (signed long long) 0;
+
+ for (i = 0; i < 100; i++)
+ {
+ data_128[i] = i + 12800000;
+ data_u128[i] = i + 12800001;
+ }
+
+ /* vec_xl() tests */
+
+ vec_128_expected1 = (vector __int128_t){12800000};
+ vec_128_result1 = vec_xl (zero, data_128);
+
+ if (vec_128_expected1[0] != vec_128_result1[0])
+ {
+#ifdef DEBUG
+ printf("Error: vec_xl(), vec_128_result1[0] = %lld %llu; ",
+ vec_128_result1[0] >> 64,
+ vec_128_result1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
+ printf("vec_128_expected1[0] = %lld %llu\n",
+ vec_128_expected1[0] >> 64,
+ vec_128_expected1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
+#else
+ abort ();
+#endif
+ }
+
+ vec_u128_result1 = vec_xl (zero, data_u128);
+ vec_u128_expected1 = (vector __uint128_t){12800001};
+ if (vec_u128_expected1[0] != vec_u128_result1[0])
+ {
+#ifdef DEBUG
+ printf("Error: vec_xl(), vec_u128_result1[0] = %lld; ",
+ vec_u128_result1[0] >> 64,
+ vec_u128_result1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
+ printf("vec_u128_expected1[0] = %lld\n",
+ vec_u128_expected1[0] >> 64,
+ vec_u128_expected1[0] &
(__int128_t)0xFFFFFFFFFFFFFFFF);
+#else
+ abort ();
+#endif
+ }
+
+ /* vec_xl_be() tests */
+
+ vec_128_result1 = vec_xl_be (zero, data_128);
+#ifdef __BIG_ENDIAN__
+ vec_128_expected1 = (vector __int128_t){ (__int128_t)12800000 };
+#else
+ vec_128_expected1 = (vector __int128_t){ (__int128_t)12800000 };
+#endif
+
+ if (vec_128_expected1[0] != vec_128_result1[0])
+ {
+#ifdef DEBUG
+ printf("Error: vec_xl_be(), vec_128_result1[0] = %llu %llu;",
+ vec_128_result1[0] >> 64,
+ vec_128_result1[0] & 0xFFFFFFFFFFFFFFFF);
+ printf(" vec_128_expected1[0] = %llu %llu\n",
+ vec_128_expected1[0] >> 64,
+ vec_128_expected1[0] & 0xFFFFFFFFFFFFFFFF);
+#else
+ abort ();
+#endif
+ }
+
+#ifdef __BIG_ENDIAN__
+ vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)12800001 };
+#else
+ vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)12800001 };
+#endif
+
+ vec_u128_result1 = vec_xl_be (zero, data_u128);
+
+ if (vec_u128_expected1[0] != vec_u128_result1[0])
+ {
+#ifdef DEBUG
+ printf("Error: vec_xl_be(), vec_u128_result1[0] = %llu %llu;",
+ vec_u128_result1[0] >> 64,
+ vec_u128_result1[0] & 0xFFFFFFFFFFFFFFFF);
+ printf(" vec_u128_expected1[0] = %llu %llu\n",
+ vec_u128_expected1[0] >> 64,
+ vec_u128_expected1[0] & 0xFFFFFFFFFFFFFFFF);
+#else
+ abort ();
+#endif
+ }
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-4-runnable.c
b/gcc/testsuite/gcc.target/powerpc/builtins-4-runnable.c
index de9b916..35884b5 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-4-runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-4-runnable.c
@@ -27,9 +27,6 @@ int main() {
float data_f[100];
double data_d[100];
- __uint128_t data_u128[100];
- __int128_t data_128[100];
-
signed long long disp;
vector signed char vec_c_expected1, vec_c_expected2, vec_c_result1,
vec_c_result2;
@@ -47,8 +44,6 @@ int main() {
vec_sll_result1, vec_sll_result2;
vector unsigned long long vec_ull_expected1, vec_ull_expected2,
vec_ull_result1, vec_ull_result2;
- vector __int128_t vec_128_expected1, vec_128_result1;
- vector __uint128_t vec_u128_expected1, vec_u128_result1;
vector float vec_f_expected1, vec_f_expected2, vec_f_result1,
vec_f_result2;
vector double vec_d_expected1, vec_d_expected2, vec_d_result1,
vec_d_result2;
char buf[20];
@@ -66,8 +61,6 @@ int main() {
data_ull[i] = i+1001;
data_f[i] = i+100000.0;
data_d[i] = i+1000000.0;
- data_128[i] = i + 12800000;
- data_u128[i] = i + 12800001;
}
// vec_xl() tests
@@ -319,39 +312,6 @@ int main() {
#endif
}
- vec_128_expected1 = (vector __int128_t){12800000};
- vec_128_result1 = vec_xl (zero, data_128);
-
- if (vec_128_expected1[0] != vec_128_result1[0])
- {
-#ifdef DEBUG
- printf("Error: vec_xl(), vec_128_result1[0] = %lld %llu; ",
- vec_128_result1[0] >> 64,
- vec_128_result1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
- printf("vec_128_expected1[0] = %lld %llu\n",
- vec_128_expected1[0] >> 64,
- vec_128_expected1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
-#else
- abort ();
-#endif
- }
-
- vec_u128_result1 = vec_xl (zero, data_u128);
- vec_u128_expected1 = (vector __uint128_t){12800001};
- if (vec_u128_expected1[0] != vec_u128_result1[0])
- {
-#ifdef DEBUG
- printf("Error: vec_xl(), vec_u128_result1[0] = %lld; ",
- vec_u128_result1[0] >> 64,
- vec_u128_result1[0] & (__int128_t)0xFFFFFFFFFFFFFFFF);
- printf("vec_u128_expected1[0] = %lld\n",
- vec_u128_expected1[0] >> 64,
- vec_u128_expected1[0] &
(__int128_t)0xFFFFFFFFFFFFFFFF);
-#else
- abort ();
-#endif
- }
-
// vec_xl_be() tests
disp = 1;
#ifdef __BIG_ENDIAN__
@@ -710,48 +670,4 @@ int main() {
abort ();
#endif
}
-
- disp = 0;
- vec_128_result1 = vec_xl_be (zero, data_128);
-#ifdef __BIG_ENDIAN__
- vec_128_expected1 = (vector __int128_t){ (__int128_t)12800000 };
-#else
- vec_128_expected1 = (vector __int128_t){ (__int128_t)12800000 };
-#endif
-
- if (vec_128_expected1[0] != vec_128_result1[0])
- {
-#ifdef DEBUG
- printf("Error: vec_xl_be(), vec_128_result1[0] = %llu %llu;",
- vec_128_result1[0] >> 64,
- vec_128_result1[0] & 0xFFFFFFFFFFFFFFFF);
- printf(" vec_128_expected1[0] = %llu %llu\n",
- vec_128_expected1[0] >> 64,
- vec_128_expected1[0] & 0xFFFFFFFFFFFFFFFF);
-#else
- abort ();
-#endif
- }
-
-#ifdef __BIG_ENDIAN__
- vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)12800001 };
-#else
- vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)12800001 };
-#endif
-
- vec_u128_result1 = vec_xl_be (zero, data_u128);
-
- if (vec_u128_expected1[0] != vec_u128_result1[0])
- {
-#ifdef DEBUG
- printf("Error: vec_xl_be(), vec_u128_result1[0] = %llu %llu;",
- vec_u128_result1[0] >> 64,
- vec_u128_result1[0] & 0xFFFFFFFFFFFFFFFF);
- printf(" vec_u128_expected1[0] = %llu %llu\n",
- vec_u128_expected1[0] >> 64,
- vec_u128_expected1[0] & 0xFFFFFFFFFFFFFFFF);
-#else
- abort ();
-#endif
- }
}
diff --git a/gcc/testsuite/gcc.target/powerpc/powerpc.exp
b/gcc/testsuite/gcc.target/powerpc/powerpc.exp
index 148acb1..fdb3e93 100644
--- a/gcc/testsuite/gcc.target/powerpc/powerpc.exp
+++ b/gcc/testsuite/gcc.target/powerpc/powerpc.exp
@@ -54,6 +54,7 @@ torture-init
# Test load/store builtins at multiple optimizations
set-torture-options [list -O0 -Os -O1 -O2 -O3]
gcc-dg-runtest [list $srcdir/$subdir/builtins-4-runnable.c \
+ $srcdir/$subdir/builtins-4-int128-runnable.c \
$srcdir/$subdir/builtins-6-runnable.c \
$srcdir/$subdir/builtins-5-p9-runnable.c \
$srcdir/$subdir/builtins-6-p9-runnable.c] ""
$DEFAULT_CFLAGS
--
2.7.4