Small ChangeLog tweak.
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / pr51581-1.c
blob14e1e317f5c4f8306214c35e8cc95eab6db82836
1 /* PR tree-optimization/51581 */
3 /* { dg-require-effective-target int32plus } */
5 extern void abort (void);
7 #define N 4096
8 int a[N], c[N];
9 unsigned int b[N], d[N];
11 __attribute__((noinline, noclone)) void
12 f1 (void)
14 int i;
15 for (i = 0; i < N; i++)
16 c[i] = a[i] / 3;
19 __attribute__((noinline, noclone)) void
20 f2 (void)
22 int i;
23 for (i = 0; i < N; i++)
24 d[i] = b[i] / 3;
27 __attribute__((noinline, noclone)) void
28 f3 (void)
30 int i;
31 for (i = 0; i < N; i++)
32 c[i] = a[i] / 18;
35 __attribute__((noinline, noclone)) void
36 f4 (void)
38 int i;
39 for (i = 0; i < N; i++)
40 d[i] = b[i] / 18;
43 __attribute__((noinline, noclone)) void
44 f5 (void)
46 int i;
47 for (i = 0; i < N; i++)
48 c[i] = a[i] / 19;
51 __attribute__((noinline, noclone)) void
52 f6 (void)
54 int i;
55 for (i = 0; i < N; i++)
56 d[i] = b[i] / 19;
59 #if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8
60 __attribute__((noinline, noclone)) void
61 f7 (void)
63 int i;
64 for (i = 0; i < N; i++)
65 c[i] = (int) ((unsigned long long) (a[i] * 0x55555556LL) >> 32) - (a[i] >> 31);
68 __attribute__((noinline, noclone)) void
69 f8 (void)
71 int i;
72 for (i = 0; i < N; i++)
73 d[i] = ((unsigned int) ((b[i] * 0xaaaaaaabULL) >> 32) >> 1);
76 __attribute__((noinline, noclone)) void
77 f9 (void)
79 int i;
80 for (i = 0; i < N; i++)
81 c[i] = (((int) ((unsigned long long) (a[i] * 0x38e38e39LL) >> 32)) >> 2) - (a[i] >> 31);
84 __attribute__((noinline, noclone)) void
85 f10 (void)
87 int i;
88 for (i = 0; i < N; i++)
89 d[i] = (unsigned int) ((b[i] * 0x38e38e39ULL) >> 32) >> 2;
92 __attribute__((noinline, noclone)) void
93 f11 (void)
95 int i;
96 for (i = 0; i < N; i++)
97 c[i] = (((int) ((unsigned long long) (a[i] * 0x6bca1af3LL) >> 32)) >> 3) - (a[i] >> 31);
100 __attribute__((noinline, noclone)) void
101 f12 (void)
103 int i;
104 for (i = 0; i < N; i++)
106 unsigned int tmp = (b[i] * 0xaf286bcbULL) >> 32;
107 d[i] = (((b[i] - tmp) >> 1) + tmp) >> 4;
110 #endif
113 main ()
115 int i;
116 for (i = 0; i < N; i++)
118 asm ("");
119 a[i] = i - N / 2;
120 b[i] = i;
122 a[0] = -__INT_MAX__ - 1;
123 a[1] = -__INT_MAX__;
124 a[N - 1] = __INT_MAX__;
125 b[N - 1] = ~0;
126 f1 ();
127 f2 ();
128 for (i = 0; i < N; i++)
129 if (c[i] != a[i] / 3 || d[i] != b[i] / 3)
130 abort ();
131 f3 ();
132 f4 ();
133 for (i = 0; i < N; i++)
134 if (c[i] != a[i] / 18 || d[i] != b[i] / 18)
135 abort ();
136 f5 ();
137 f6 ();
138 for (i = 0; i < N; i++)
139 if (c[i] != a[i] / 19 || d[i] != b[i] / 19)
140 abort ();
141 #if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8
142 f7 ();
143 f8 ();
144 for (i = 0; i < N; i++)
145 if (c[i] != a[i] / 3 || d[i] != b[i] / 3)
146 abort ();
147 f9 ();
148 f10 ();
149 for (i = 0; i < N; i++)
150 if (c[i] != a[i] / 18 || d[i] != b[i] / 18)
151 abort ();
152 f11 ();
153 f12 ();
154 for (i = 0; i < N; i++)
155 if (c[i] != a[i] / 19 || d[i] != b[i] / 19)
156 abort ();
157 #endif
158 return 0;