1 /* PR tree-optimization/51581 */
2
3 extern void abort (void);
4
5 #define N 4096
6 int a[N], c[N];
7 unsigned int b[N], d[N];
8
9 __attribute__((noinline, noclone)) void
f1(void)10 f1 (void)
11 {
12 int i;
13 for (i = 0; i < N; i++)
14 c[i] = a[i] % 3;
15 }
16
17 __attribute__((noinline, noclone)) void
f2(void)18 f2 (void)
19 {
20 int i;
21 for (i = 0; i < N; i++)
22 d[i] = b[i] % 3;
23 }
24
25 __attribute__((noinline, noclone)) void
f3(void)26 f3 (void)
27 {
28 int i;
29 for (i = 0; i < N; i++)
30 c[i] = a[i] % 18;
31 }
32
33 __attribute__((noinline, noclone)) void
f4(void)34 f4 (void)
35 {
36 int i;
37 for (i = 0; i < N; i++)
38 d[i] = b[i] % 18;
39 }
40
41 __attribute__((noinline, noclone)) void
f5(void)42 f5 (void)
43 {
44 int i;
45 for (i = 0; i < N; i++)
46 c[i] = a[i] % 19;
47 }
48
49 __attribute__((noinline, noclone)) void
f6(void)50 f6 (void)
51 {
52 int i;
53 for (i = 0; i < N; i++)
54 d[i] = b[i] % 19;
55 }
56
57 #if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8
58 __attribute__((noinline, noclone)) void
f7(void)59 f7 (void)
60 {
61 int i;
62 for (i = 0; i < N; i++)
63 {
64 int x = (int) ((unsigned long long) (a[i] * 0x55555556LL) >> 32) - (a[i] >> 31);
65 c[i] = a[i] - x * 3;
66 }
67 }
68
69 __attribute__((noinline, noclone)) void
f8(void)70 f8 (void)
71 {
72 int i;
73 for (i = 0; i < N; i++)
74 {
75 unsigned int x = ((unsigned int) ((b[i] * 0xaaaaaaabULL) >> 32) >> 1);
76 d[i] = b[i] - x * 3;
77 }
78 }
79
80 __attribute__((noinline, noclone)) void
f9(void)81 f9 (void)
82 {
83 int i;
84 for (i = 0; i < N; i++)
85 {
86 int x = (((int) ((unsigned long long) (a[i] * 0x38e38e39LL) >> 32)) >> 2) - (a[i] >> 31);
87 c[i] = a[i] - x * 18;
88 }
89 }
90
91 __attribute__((noinline, noclone)) void
f10(void)92 f10 (void)
93 {
94 int i;
95 for (i = 0; i < N; i++)
96 {
97 unsigned int x = (unsigned int) ((b[i] * 0x38e38e39ULL) >> 32) >> 2;
98 d[i] = b[i] - x * 18;
99 }
100 }
101
102 __attribute__((noinline, noclone)) void
f11(void)103 f11 (void)
104 {
105 int i;
106 for (i = 0; i < N; i++)
107 {
108 int x = (((int) ((unsigned long long) (a[i] * 0x6bca1af3LL) >> 32)) >> 3) - (a[i] >> 31);
109 c[i] = a[i] - x * 19;
110 }
111 }
112
113 __attribute__((noinline, noclone)) void
f12(void)114 f12 (void)
115 {
116 int i;
117 for (i = 0; i < N; i++)
118 {
119 unsigned int tmp = (b[i] * 0xaf286bcbULL) >> 32;
120 unsigned int x = (((b[i] - tmp) >> 1) + tmp) >> 4;
121 d[i] = b[i] - x * 19;
122 }
123 }
124 #endif
125
126 int
main()127 main ()
128 {
129 int i;
130 for (i = 0; i < N; i++)
131 {
132 asm ("");
133 a[i] = i - N / 2;
134 b[i] = i;
135 }
136 a[0] = -__INT_MAX__ - 1;
137 a[1] = -__INT_MAX__;
138 a[N - 1] = __INT_MAX__;
139 b[N - 1] = ~0;
140 f1 ();
141 f2 ();
142 for (i = 0; i < N; i++)
143 if (c[i] != a[i] % 3 || d[i] != b[i] % 3)
144 abort ();
145 f3 ();
146 f4 ();
147 for (i = 0; i < N; i++)
148 if (c[i] != a[i] % 18 || d[i] != b[i] % 18)
149 abort ();
150 f5 ();
151 f6 ();
152 for (i = 0; i < N; i++)
153 if (c[i] != a[i] % 19 || d[i] != b[i] % 19)
154 abort ();
155 #if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8
156 f7 ();
157 f8 ();
158 for (i = 0; i < N; i++)
159 if (c[i] != a[i] % 3 || d[i] != b[i] % 3)
160 abort ();
161 f9 ();
162 f10 ();
163 for (i = 0; i < N; i++)
164 if (c[i] != a[i] % 18 || d[i] != b[i] % 18)
165 abort ();
166 f11 ();
167 f12 ();
168 for (i = 0; i < N; i++)
169 if (c[i] != a[i] % 19 || d[i] != b[i] % 19)
170 abort ();
171 #endif
172 return 0;
173 }
174