111
|
1 /* { dg-require-effective-target vect_cond_mixed } */
|
|
2 /* { dg-require-effective-target vect_float } */
|
|
3 /* { dg-additional-options "-fno-ipa-icf" } */
|
|
4
|
|
5 #include "tree-vect.h"
|
|
6
|
|
7 #define N 1024
|
|
8 float a[N], b[N], c[N], d[N];
|
|
9 int j[N];
|
|
10 unsigned char k[N];
|
|
11
|
|
12 __attribute__((noinline, noclone)) void
|
|
13 f1 (void)
|
|
14 {
|
|
15 int i;
|
|
16 for (i = 0; i < N; ++i)
|
|
17 {
|
|
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;
|
|
21 }
|
|
22 }
|
|
23
|
|
24 __attribute__((noinline, noclone)) void
|
|
25 f2 (void)
|
|
26 {
|
|
27 int i;
|
|
28 for (i = 0; i < N; ++i)
|
|
29 {
|
|
30 int x = a[i] < b[i];
|
|
31 int y = c[i] < d[i];
|
|
32 j[i] = x & y;
|
|
33 }
|
|
34 }
|
|
35
|
|
36 __attribute__((noinline, noclone)) void
|
|
37 f3 (void)
|
|
38 {
|
|
39 int i;
|
|
40 for (i = 0; i < N; ++i)
|
|
41 j[i] = (a[i] < b[i]) & (c[i] < d[i]);
|
|
42 }
|
|
43
|
|
44 __attribute__((noinline, noclone)) void
|
|
45 f4 (void)
|
|
46 {
|
|
47 int i;
|
|
48 for (i = 0; i < N; ++i)
|
|
49 {
|
|
50 int x = a[i] < b[i];
|
|
51 int y = c[i] < d[i];
|
|
52 k[i] = x & y;
|
|
53 }
|
|
54 }
|
|
55
|
|
56 __attribute__((noinline, noclone)) void
|
|
57 f5 (void)
|
|
58 {
|
|
59 int i;
|
|
60 for (i = 0; i < N; ++i)
|
|
61 k[i] = (a[i] < b[i]) & (c[i] < d[i]);
|
|
62 }
|
|
63
|
|
64 __attribute__((noinline, noclone)) void
|
|
65 f6 (void)
|
|
66 {
|
|
67 int i;
|
|
68 for (i = 0; i < N; ++i)
|
|
69 {
|
|
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;
|
|
73 }
|
|
74 }
|
|
75
|
|
76 __attribute__((noinline, noclone)) void
|
|
77 f7 (void)
|
|
78 {
|
|
79 int i;
|
|
80 for (i = 0; i < N; ++i)
|
|
81 {
|
|
82 int x = a[i] < b[i];
|
|
83 int y = c[i] < d[i];
|
|
84 j[i] = x | y;
|
|
85 }
|
|
86 }
|
|
87
|
|
88 __attribute__((noinline, noclone)) void
|
|
89 f8 (void)
|
|
90 {
|
|
91 int i;
|
|
92 for (i = 0; i < N; ++i)
|
|
93 j[i] = (a[i] < b[i]) | (c[i] < d[i]);
|
|
94 }
|
|
95
|
|
96 __attribute__((noinline, noclone)) void
|
|
97 f9 (void)
|
|
98 {
|
|
99 int i;
|
|
100 for (i = 0; i < N; ++i)
|
|
101 {
|
|
102 int x = a[i] < b[i];
|
|
103 int y = c[i] < d[i];
|
|
104 k[i] = x | y;
|
|
105 }
|
|
106 }
|
|
107
|
|
108 __attribute__((noinline, noclone)) void
|
|
109 f10 (void)
|
|
110 {
|
|
111 int i;
|
|
112 for (i = 0; i < N; ++i)
|
|
113 k[i] = (a[i] < b[i]) | (c[i] < d[i]);
|
|
114 }
|
|
115
|
|
116 int
|
|
117 main ()
|
|
118 {
|
|
119 int i;
|
|
120
|
|
121 check_vect ();
|
|
122
|
|
123 for (i = 0; i < N; i++)
|
|
124 {
|
|
125 switch (i % 9)
|
|
126 {
|
|
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;
|
|
136 }
|
|
137 }
|
|
138 for (i = 0; i < N; i++)
|
|
139 {
|
|
140 switch ((i / 9) % 3)
|
|
141 {
|
|
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;
|
|
145 }
|
|
146 }
|
|
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));
|
|
197
|
|
198 return 0;
|
|
199 }
|
|
200
|
|
201 /* { dg-final { scan-tree-dump-times "note: vectorized 1 loops" 10 "vect" } } */
|