PR middle-end/77357 - strlen of constant strings not folded
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / vect-cond-9.c
blob63eee1b47296d8c422b4ff899e5840ca4d4f59f5
1 /* { dg-require-effective-target vect_cond_mixed } */
2 /* { dg-require-effective-target vect_float } */
3 /* { dg-additional-options "-fno-ipa-icf" } */
5 #include "tree-vect.h"
7 #define N 1024
8 float a[N], b[N], c[N], d[N];
9 int j[N];
10 unsigned char k[N];
12 __attribute__((noinline, noclone)) void
13 f1 (void)
15 int i;
16 for (i = 0; i < N; ++i)
18 unsigned int x = a[i] < b[i] ? -1 : 0;
19 unsigned int y = c[i] < d[i] ? -1 : 0;
20 j[i] = (x & y) >> 31;
24 __attribute__((noinline, noclone)) void
25 f2 (void)
27 int i;
28 for (i = 0; i < N; ++i)
30 int x = a[i] < b[i];
31 int y = c[i] < d[i];
32 j[i] = x & y;
36 __attribute__((noinline, noclone)) void
37 f3 (void)
39 int i;
40 for (i = 0; i < N; ++i)
41 j[i] = (a[i] < b[i]) & (c[i] < d[i]);
44 __attribute__((noinline, noclone)) void
45 f4 (void)
47 int i;
48 for (i = 0; i < N; ++i)
50 int x = a[i] < b[i];
51 int y = c[i] < d[i];
52 k[i] = x & y;
56 __attribute__((noinline, noclone)) void
57 f5 (void)
59 int i;
60 for (i = 0; i < N; ++i)
61 k[i] = (a[i] < b[i]) & (c[i] < d[i]);
64 __attribute__((noinline, noclone)) void
65 f6 (void)
67 int i;
68 for (i = 0; i < N; ++i)
70 unsigned int x = a[i] < b[i] ? -1 : 0;
71 unsigned int y = c[i] < d[i] ? -1 : 0;
72 j[i] = (x | y) >> 31;
76 __attribute__((noinline, noclone)) void
77 f7 (void)
79 int i;
80 for (i = 0; i < N; ++i)
82 int x = a[i] < b[i];
83 int y = c[i] < d[i];
84 j[i] = x | y;
88 __attribute__((noinline, noclone)) void
89 f8 (void)
91 int i;
92 for (i = 0; i < N; ++i)
93 j[i] = (a[i] < b[i]) | (c[i] < d[i]);
96 __attribute__((noinline, noclone)) void
97 f9 (void)
99 int i;
100 for (i = 0; i < N; ++i)
102 int x = a[i] < b[i];
103 int y = c[i] < d[i];
104 k[i] = x | y;
108 __attribute__((noinline, noclone)) void
109 f10 (void)
111 int i;
112 for (i = 0; i < N; ++i)
113 k[i] = (a[i] < b[i]) | (c[i] < d[i]);
117 main ()
119 int i;
121 check_vect ();
123 for (i = 0; i < N; i++)
125 switch (i % 9)
127 case 0: asm (""); a[i] = - i - 1; b[i] = i + 1; break;
128 case 1: a[i] = 0; b[i] = 0; break;
129 case 2: a[i] = i + 1; b[i] = - i - 1; break;
130 case 3: a[i] = i; b[i] = i + 7; break;
131 case 4: a[i] = i; b[i] = i; break;
132 case 5: a[i] = i + 16; b[i] = i + 3; break;
133 case 6: a[i] = - i - 5; b[i] = - i; break;
134 case 7: a[i] = - i; b[i] = - i; break;
135 case 8: a[i] = - i; b[i] = - i - 7; break;
138 for (i = 0; i < N; i++)
140 switch ((i / 9) % 3)
142 case 0: c[i] = a[i / 9]; d[i] = b[i / 9]; break;
143 case 1: c[i] = a[i / 9 + 3]; d[i] = b[i / 9 + 3]; break;
144 case 2: c[i] = a[i / 9 + 6]; d[i] = b[i / 9 + 6]; break;
147 f1 ();
148 for (i = 0; i < N; i++)
149 if (j[i] != ((i % 3) == 0 && ((i / 9) % 3) == 0))
150 abort ();
151 __builtin_memset (j, -6, sizeof (j));
152 f2 ();
153 for (i = 0; i < N; i++)
154 if (j[i] != ((i % 3) == 0 && ((i / 9) % 3) == 0))
155 abort ();
156 __builtin_memset (j, -6, sizeof (j));
157 f3 ();
158 for (i = 0; i < N; i++)
159 if (j[i] != ((i % 3) == 0 && ((i / 9) % 3) == 0))
160 abort ();
161 __builtin_memset (j, -6, sizeof (j));
162 f4 ();
163 for (i = 0; i < N; i++)
164 if (k[i] != ((i % 3) == 0 && ((i / 9) % 3) == 0))
165 abort ();
166 __builtin_memset (k, -6, sizeof (k));
167 f5 ();
168 for (i = 0; i < N; i++)
169 if (k[i] != ((i % 3) == 0 && ((i / 9) % 3) == 0))
170 abort ();
171 __builtin_memset (k, -6, sizeof (k));
172 f6 ();
173 for (i = 0; i < N; i++)
174 if (j[i] != ((i % 3) == 0 || ((i / 9) % 3) == 0))
175 abort ();
176 __builtin_memset (j, -6, sizeof (j));
177 f7 ();
178 for (i = 0; i < N; i++)
179 if (j[i] != ((i % 3) == 0 || ((i / 9) % 3) == 0))
180 abort ();
181 __builtin_memset (j, -6, sizeof (j));
182 f8 ();
183 for (i = 0; i < N; i++)
184 if (j[i] != ((i % 3) == 0 || ((i / 9) % 3) == 0))
185 abort ();
186 __builtin_memset (j, -6, sizeof (j));
187 f9 ();
188 for (i = 0; i < N; i++)
189 if (k[i] != ((i % 3) == 0 || ((i / 9) % 3) == 0))
190 abort ();
191 __builtin_memset (k, -6, sizeof (k));
192 f10 ();
193 for (i = 0; i < N; i++)
194 if (k[i] != ((i % 3) == 0 || ((i / 9) % 3) == 0))
195 abort ();
196 __builtin_memset (k, -6, sizeof (k));
198 return 0;
201 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 10 "vect" } } */