diff options
Diffstat (limited to 'SingleSource/Regression/C/gcc-c-torture/execute/pr51581-2.c')
-rw-r--r-- | SingleSource/Regression/C/gcc-c-torture/execute/pr51581-2.c | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/SingleSource/Regression/C/gcc-c-torture/execute/pr51581-2.c b/SingleSource/Regression/C/gcc-c-torture/execute/pr51581-2.c new file mode 100644 index 00000000..e4345b5f --- /dev/null +++ b/SingleSource/Regression/C/gcc-c-torture/execute/pr51581-2.c @@ -0,0 +1,174 @@ +/* PR tree-optimization/51581 */ +/* { dg-require-effective-target int32plus } */ + +extern void abort (void); + +#define N 4096 +int a[N], c[N]; +unsigned int b[N], d[N]; + +__attribute__((noinline, noclone)) void +f1 (void) +{ + int i; + for (i = 0; i < N; i++) + c[i] = a[i] % 3; +} + +__attribute__((noinline, noclone)) void +f2 (void) +{ + int i; + for (i = 0; i < N; i++) + d[i] = b[i] % 3; +} + +__attribute__((noinline, noclone)) void +f3 (void) +{ + int i; + for (i = 0; i < N; i++) + c[i] = a[i] % 18; +} + +__attribute__((noinline, noclone)) void +f4 (void) +{ + int i; + for (i = 0; i < N; i++) + d[i] = b[i] % 18; +} + +__attribute__((noinline, noclone)) void +f5 (void) +{ + int i; + for (i = 0; i < N; i++) + c[i] = a[i] % 19; +} + +__attribute__((noinline, noclone)) void +f6 (void) +{ + int i; + for (i = 0; i < N; i++) + d[i] = b[i] % 19; +} + +#if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8 +__attribute__((noinline, noclone)) void +f7 (void) +{ + int i; + for (i = 0; i < N; i++) + { + int x = (int) ((unsigned long long) (a[i] * 0x55555556LL) >> 32) - (a[i] >> 31); + c[i] = a[i] - x * 3; + } +} + +__attribute__((noinline, noclone)) void +f8 (void) +{ + int i; + for (i = 0; i < N; i++) + { + unsigned int x = ((unsigned int) ((b[i] * 0xaaaaaaabULL) >> 32) >> 1); + d[i] = b[i] - x * 3; + } +} + +__attribute__((noinline, noclone)) void +f9 (void) +{ + int i; + for (i = 0; i < N; i++) + { + int x = (((int) ((unsigned long long) (a[i] * 0x38e38e39LL) >> 32)) >> 2) - (a[i] >> 31); + c[i] = a[i] - x * 18; + } +} + +__attribute__((noinline, noclone)) void +f10 (void) +{ + int i; + for (i = 0; i < N; i++) + { + unsigned int x = (unsigned int) ((b[i] * 0x38e38e39ULL) >> 32) >> 2; + d[i] = b[i] - x * 18; + } +} + +__attribute__((noinline, noclone)) void +f11 (void) +{ + int i; + for (i = 0; i < N; i++) + { + int x = (((int) ((unsigned long long) (a[i] * 0x6bca1af3LL) >> 32)) >> 3) - (a[i] >> 31); + c[i] = a[i] - x * 19; + } +} + +__attribute__((noinline, noclone)) void +f12 (void) +{ + int i; + for (i = 0; i < N; i++) + { + unsigned int tmp = (b[i] * 0xaf286bcbULL) >> 32; + unsigned int x = (((b[i] - tmp) >> 1) + tmp) >> 4; + d[i] = b[i] - x * 19; + } +} +#endif + +int +main () +{ + int i; + for (i = 0; i < N; i++) + { + asm (""); + a[i] = i - N / 2; + b[i] = i; + } + a[0] = -__INT_MAX__ - 1; + a[1] = -__INT_MAX__; + a[N - 1] = __INT_MAX__; + b[N - 1] = ~0; + f1 (); + f2 (); + for (i = 0; i < N; i++) + if (c[i] != a[i] % 3 || d[i] != b[i] % 3) + abort (); + f3 (); + f4 (); + for (i = 0; i < N; i++) + if (c[i] != a[i] % 18 || d[i] != b[i] % 18) + abort (); + f5 (); + f6 (); + for (i = 0; i < N; i++) + if (c[i] != a[i] % 19 || d[i] != b[i] % 19) + abort (); +#if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8 + f7 (); + f8 (); + for (i = 0; i < N; i++) + if (c[i] != a[i] % 3 || d[i] != b[i] % 3) + abort (); + f9 (); + f10 (); + for (i = 0; i < N; i++) + if (c[i] != a[i] % 18 || d[i] != b[i] % 18) + abort (); + f11 (); + f12 (); + for (i = 0; i < N; i++) + if (c[i] != a[i] % 19 || d[i] != b[i] % 19) + abort (); +#endif + return 0; +} |