Message ID | 20190928063459.GA20197@bubble.grove.modra.org |
---|---|
State | New |
Headers | show |
Series | Fix endian issue in pr91656 testcases | expand |
On September 28, 2019 8:34:59 AM GMT+02:00, Alan Modra <amodra@gmail.com> wrote: >Tested on powerpc64le-linux and powerpc64-linux. OK? Ok. Thanks, Richard. >pr91656-3.c didn't really need to be changed since popcount doesn't >care which bits are set, but I figured it was better to make the test >set the low 16 bits of the 64-bit value in both big and litte endian. > > PR testsuite/91676 > PR rtl-optimization/91656 > * gcc.dg/torture/pr91656-1.c: Correct for big and pdp endian. > * gcc.dg/torture/pr91656-2.c: Likewise. > * gcc.dg/torture/pr91656-3.c: Likewise. > >diff --git a/gcc/testsuite/gcc.dg/torture/pr91656-1.c >b/gcc/testsuite/gcc.dg/torture/pr91656-1.c >index 6c1e73c7f01..fae17de1112 100644 >--- a/gcc/testsuite/gcc.dg/torture/pr91656-1.c >+++ b/gcc/testsuite/gcc.dg/torture/pr91656-1.c >@@ -6,7 +6,17 @@ int a, b, c, d, e; > static __attribute__ ((__noipa__)) > int foo (int i) > { >+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ > __builtin_memmove (&i, &e, 1); >+#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ >+ __builtin_memmove ((char *) &i + sizeof (i) - 1, >+ (char *) &e + sizeof (e) - 1, 1); >+#elif __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__ >+ __builtin_memmove ((char *) &i + sizeof (i) - 2, >+ (char *) &e + sizeof (e) - 2, 1); >+#else >+#error "endian unknown?" >+#endif > if (a > 0) > i /= e; > e /= 5; >diff --git a/gcc/testsuite/gcc.dg/torture/pr91656-2.c >b/gcc/testsuite/gcc.dg/torture/pr91656-2.c >index 90374becae0..29a619b280e 100644 >--- a/gcc/testsuite/gcc.dg/torture/pr91656-2.c >+++ b/gcc/testsuite/gcc.dg/torture/pr91656-2.c >@@ -12,7 +12,17 @@ d (u16 g) > { > u64 f = __builtin_bswap64 (c); > f = g == a; >+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ > __builtin_memmove (&f, &e, 1); >+#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ >+ __builtin_memmove ((char *) &f + sizeof (f) - 1, >+ (char *) &e + sizeof (e) - 1, 1); >+#elif __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__ >+ __builtin_memmove ((char *) &f + sizeof (f) - 2, >+ (char *) &e + sizeof (e) - 2, 1); >+#else >+#error "endian unknown?" >+#endif > e >>= b; > return a + f; > } >diff --git a/gcc/testsuite/gcc.dg/torture/pr91656-3.c >b/gcc/testsuite/gcc.dg/torture/pr91656-3.c >index 8e65d24a21d..f84e51af4a4 100644 >--- a/gcc/testsuite/gcc.dg/torture/pr91656-3.c >+++ b/gcc/testsuite/gcc.dg/torture/pr91656-3.c >@@ -10,7 +10,14 @@ int > d (u16 e, u64 f) > { > b |= e; >+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ > __builtin_memset (&f, e, 2); >+#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ \ >+ || __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__) >+ __builtin_memset ((char *) &f + sizeof (f) - 2, e, 2); >+#else >+#error "endian unknown?" >+#endif > a = (u16) - e >= 2 ? : __builtin_popcountll (f); > return a + c; > }
diff --git a/gcc/testsuite/gcc.dg/torture/pr91656-1.c b/gcc/testsuite/gcc.dg/torture/pr91656-1.c index 6c1e73c7f01..fae17de1112 100644 --- a/gcc/testsuite/gcc.dg/torture/pr91656-1.c +++ b/gcc/testsuite/gcc.dg/torture/pr91656-1.c @@ -6,7 +6,17 @@ int a, b, c, d, e; static __attribute__ ((__noipa__)) int foo (int i) { +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ __builtin_memmove (&i, &e, 1); +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + __builtin_memmove ((char *) &i + sizeof (i) - 1, + (char *) &e + sizeof (e) - 1, 1); +#elif __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__ + __builtin_memmove ((char *) &i + sizeof (i) - 2, + (char *) &e + sizeof (e) - 2, 1); +#else +#error "endian unknown?" +#endif if (a > 0) i /= e; e /= 5; diff --git a/gcc/testsuite/gcc.dg/torture/pr91656-2.c b/gcc/testsuite/gcc.dg/torture/pr91656-2.c index 90374becae0..29a619b280e 100644 --- a/gcc/testsuite/gcc.dg/torture/pr91656-2.c +++ b/gcc/testsuite/gcc.dg/torture/pr91656-2.c @@ -12,7 +12,17 @@ d (u16 g) { u64 f = __builtin_bswap64 (c); f = g == a; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ __builtin_memmove (&f, &e, 1); +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + __builtin_memmove ((char *) &f + sizeof (f) - 1, + (char *) &e + sizeof (e) - 1, 1); +#elif __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__ + __builtin_memmove ((char *) &f + sizeof (f) - 2, + (char *) &e + sizeof (e) - 2, 1); +#else +#error "endian unknown?" +#endif e >>= b; return a + f; } diff --git a/gcc/testsuite/gcc.dg/torture/pr91656-3.c b/gcc/testsuite/gcc.dg/torture/pr91656-3.c index 8e65d24a21d..f84e51af4a4 100644 --- a/gcc/testsuite/gcc.dg/torture/pr91656-3.c +++ b/gcc/testsuite/gcc.dg/torture/pr91656-3.c @@ -10,7 +10,14 @@ int d (u16 e, u64 f) { b |= e; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ __builtin_memset (&f, e, 2); +#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ \ + || __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__) + __builtin_memset ((char *) &f + sizeof (f) - 2, e, 2); +#else +#error "endian unknown?" +#endif a = (u16) - e >= 2 ? : __builtin_popcountll (f); return a + c; }