aboutsummaryrefslogtreecommitdiff
path: root/SingleSource/Regression/C/gcc-c-torture/execute/pr51581-2.c
diff options
context:
space:
mode:
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.c174
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;
+}