annotate gcc/testsuite/gcc.dg/vect/vect-bool-cmp.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR tree-optimization/71488 */
kono
parents:
diff changeset
2 /* { dg-require-effective-target vect_int } */
kono
parents:
diff changeset
3 /* { dg-require-effective-target vect_pack_trunc } */
kono
parents:
diff changeset
4 /* { dg-additional-options "-msse4" { target sse4_runtime } } */
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 #include "tree-vect.h"
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 int i1, i2;
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
11 fn1 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size)
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 int i;
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 for (i = 0; i < size; i++)
kono
parents:
diff changeset
16 p1[i] = ((p2[i] == 0) > (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
17 }
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
20 fn2 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size)
kono
parents:
diff changeset
21 {
kono
parents:
diff changeset
22 int i;
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 for (i = 0; i < size; i++)
kono
parents:
diff changeset
25 p1[i] = ((p2[i] == 0) > (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
26 }
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
29 fn3 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size)
kono
parents:
diff changeset
30 {
kono
parents:
diff changeset
31 int i;
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 for (i = 0; i < size; i++)
kono
parents:
diff changeset
34 p1[i] = ((p2[i] == 0) > (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
35 }
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
38 fn4 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size)
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 int i;
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 for (i = 0; i < size; i++)
kono
parents:
diff changeset
43 p1[i] = ((p2[i] == 0) >= (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
44 }
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
47 fn5 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size)
kono
parents:
diff changeset
48 {
kono
parents:
diff changeset
49 int i;
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 for (i = 0; i < size; i++)
kono
parents:
diff changeset
52 p1[i] = ((p2[i] == 0) >= (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
53 }
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
56 fn6 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size)
kono
parents:
diff changeset
57 {
kono
parents:
diff changeset
58 int i;
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 for (i = 0; i < size; i++)
kono
parents:
diff changeset
61 p1[i] = ((p2[i] == 0) >= (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
62 }
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
65 fn7 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size)
kono
parents:
diff changeset
66 {
kono
parents:
diff changeset
67 int i;
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 for (i = 0; i < size; i++)
kono
parents:
diff changeset
70 p1[i] = ((p2[i] == 0) < (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
71 }
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
74 fn8 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size)
kono
parents:
diff changeset
75 {
kono
parents:
diff changeset
76 int i;
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 for (i = 0; i < size; i++)
kono
parents:
diff changeset
79 p1[i] = ((p2[i] == 0) < (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
80 }
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
83 fn9 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size)
kono
parents:
diff changeset
84 {
kono
parents:
diff changeset
85 int i;
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 for (i = 0; i < size; i++)
kono
parents:
diff changeset
88 p1[i] = ((p2[i] == 0) < (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
89 }
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
92 fn10 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size)
kono
parents:
diff changeset
93 {
kono
parents:
diff changeset
94 int i;
kono
parents:
diff changeset
95
kono
parents:
diff changeset
96 for (i = 0; i < size; i++)
kono
parents:
diff changeset
97 p1[i] = ((p2[i] == 0) <= (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
98 }
kono
parents:
diff changeset
99
kono
parents:
diff changeset
100 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
101 fn11 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size)
kono
parents:
diff changeset
102 {
kono
parents:
diff changeset
103 int i;
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105 for (i = 0; i < size; i++)
kono
parents:
diff changeset
106 p1[i] = ((p2[i] == 0) <= (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
107 }
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
110 fn12 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size)
kono
parents:
diff changeset
111 {
kono
parents:
diff changeset
112 int i;
kono
parents:
diff changeset
113
kono
parents:
diff changeset
114 for (i = 0; i < size; i++)
kono
parents:
diff changeset
115 p1[i] = ((p2[i] == 0) <= (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
116 }
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
119 fn13 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size)
kono
parents:
diff changeset
120 {
kono
parents:
diff changeset
121 int i;
kono
parents:
diff changeset
122
kono
parents:
diff changeset
123 for (i = 0; i < size; i++)
kono
parents:
diff changeset
124 p1[i] = ((p2[i] == 0) == (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
125 }
kono
parents:
diff changeset
126
kono
parents:
diff changeset
127 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
128 fn14 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size)
kono
parents:
diff changeset
129 {
kono
parents:
diff changeset
130 int i;
kono
parents:
diff changeset
131
kono
parents:
diff changeset
132 for (i = 0; i < size; i++)
kono
parents:
diff changeset
133 p1[i] = ((p2[i] == 0) == (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
134 }
kono
parents:
diff changeset
135
kono
parents:
diff changeset
136 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
137 fn15 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size)
kono
parents:
diff changeset
138 {
kono
parents:
diff changeset
139 int i;
kono
parents:
diff changeset
140
kono
parents:
diff changeset
141 for (i = 0; i < size; i++)
kono
parents:
diff changeset
142 p1[i] = ((p2[i] == 0) == (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
143 }
kono
parents:
diff changeset
144
kono
parents:
diff changeset
145 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
146 fn16 (int * __restrict__ p1, int * __restrict__ p2, int * __restrict__ p3, int size)
kono
parents:
diff changeset
147 {
kono
parents:
diff changeset
148 int i;
kono
parents:
diff changeset
149
kono
parents:
diff changeset
150 for (i = 0; i < size; i++)
kono
parents:
diff changeset
151 p1[i] = ((p2[i] == 0) != (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
152 }
kono
parents:
diff changeset
153
kono
parents:
diff changeset
154 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
155 fn17 (int * __restrict__ p1, int * __restrict__ p2, short * __restrict__ p3, int size)
kono
parents:
diff changeset
156 {
kono
parents:
diff changeset
157 int i;
kono
parents:
diff changeset
158
kono
parents:
diff changeset
159 for (i = 0; i < size; i++)
kono
parents:
diff changeset
160 p1[i] = ((p2[i] == 0) != (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
161 }
kono
parents:
diff changeset
162
kono
parents:
diff changeset
163 void __attribute__((noclone,noinline))
kono
parents:
diff changeset
164 fn18 (int * __restrict__ p1, int * __restrict__ p2, long long * __restrict__ p3, int size)
kono
parents:
diff changeset
165 {
kono
parents:
diff changeset
166 int i;
kono
parents:
diff changeset
167
kono
parents:
diff changeset
168 for (i = 0; i < size; i++)
kono
parents:
diff changeset
169 p1[i] = ((p2[i] == 0) != (unsigned)(p3[i] == 0)) + (p2[i] == 0);
kono
parents:
diff changeset
170 }
kono
parents:
diff changeset
171
kono
parents:
diff changeset
172 int eq (int i1, int i2) { return i1 == i2; }
kono
parents:
diff changeset
173 int ne (int i1, int i2) { return i1 != i2; }
kono
parents:
diff changeset
174 int lt (int i1, int i2) { return i1 < i2; }
kono
parents:
diff changeset
175 int le (int i1, int i2) { return i1 <= i2; }
kono
parents:
diff changeset
176 int gt (int i1, int i2) { return i1 > i2; }
kono
parents:
diff changeset
177 int ge (int i1, int i2) { return i1 >= i2; }
kono
parents:
diff changeset
178
kono
parents:
diff changeset
179 typedef int (*cmp_fn)(int, int);
kono
parents:
diff changeset
180
kono
parents:
diff changeset
181 void
kono
parents:
diff changeset
182 check (int *p, cmp_fn fn)
kono
parents:
diff changeset
183 {
kono
parents:
diff changeset
184 int i;
kono
parents:
diff changeset
185
kono
parents:
diff changeset
186 for (i = 0; i < 32; i++)
kono
parents:
diff changeset
187 {
kono
parents:
diff changeset
188 int t1 = ((i % 4) > 1) == 0;
kono
parents:
diff changeset
189 int t2 = (i % 2) == 0;
kono
parents:
diff changeset
190 int res = fn (t1, t2) + t1;
kono
parents:
diff changeset
191 if (p[i] != res)
kono
parents:
diff changeset
192 __builtin_abort ();
kono
parents:
diff changeset
193 }
kono
parents:
diff changeset
194 }
kono
parents:
diff changeset
195
kono
parents:
diff changeset
196 int
kono
parents:
diff changeset
197 main (int argc, char **argv)
kono
parents:
diff changeset
198 {
kono
parents:
diff changeset
199 int i1[32], i2[32], res[32];
kono
parents:
diff changeset
200 short s2[32];
kono
parents:
diff changeset
201 long long l2[32];
kono
parents:
diff changeset
202 int i;
kono
parents:
diff changeset
203
kono
parents:
diff changeset
204 check_vect ();
kono
parents:
diff changeset
205
kono
parents:
diff changeset
206 for (i = 0; i < 32; i++)
kono
parents:
diff changeset
207 {
kono
parents:
diff changeset
208 l2[i] = i2[i] = s2[i] = i % 2;
kono
parents:
diff changeset
209 i1[i] = (i % 4) > 1;
kono
parents:
diff changeset
210 asm ("":::"memory");
kono
parents:
diff changeset
211 }
kono
parents:
diff changeset
212
kono
parents:
diff changeset
213 fn1 (res, i1, i2, 32);
kono
parents:
diff changeset
214 check (res, gt);
kono
parents:
diff changeset
215 fn2 (res, i1, s2, 32);
kono
parents:
diff changeset
216 check (res, gt);
kono
parents:
diff changeset
217 fn3 (res, i1, l2, 32);
kono
parents:
diff changeset
218 check (res, gt);
kono
parents:
diff changeset
219
kono
parents:
diff changeset
220 fn4 (res, i1, i2, 32);
kono
parents:
diff changeset
221 check (res, ge);
kono
parents:
diff changeset
222 fn5 (res, i1, s2, 32);
kono
parents:
diff changeset
223 check (res, ge);
kono
parents:
diff changeset
224 fn6 (res, i1, l2, 32);
kono
parents:
diff changeset
225 check (res, ge);
kono
parents:
diff changeset
226
kono
parents:
diff changeset
227 fn7 (res, i1, i2, 32);
kono
parents:
diff changeset
228 check (res, lt);
kono
parents:
diff changeset
229 fn8 (res, i1, s2, 32);
kono
parents:
diff changeset
230 check (res, lt);
kono
parents:
diff changeset
231 fn9 (res, i1, l2, 32);
kono
parents:
diff changeset
232 check (res, lt);
kono
parents:
diff changeset
233
kono
parents:
diff changeset
234 fn10 (res, i1, i2, 32);
kono
parents:
diff changeset
235 check (res, le);
kono
parents:
diff changeset
236 fn11 (res, i1, s2, 32);
kono
parents:
diff changeset
237 check (res, le);
kono
parents:
diff changeset
238 fn12 (res, i1, l2, 32);
kono
parents:
diff changeset
239 check (res, le);
kono
parents:
diff changeset
240
kono
parents:
diff changeset
241 fn13 (res, i1, i2, 32);
kono
parents:
diff changeset
242 check (res, eq);
kono
parents:
diff changeset
243 fn14 (res, i1, s2, 32);
kono
parents:
diff changeset
244 check (res, eq);
kono
parents:
diff changeset
245 fn15 (res, i1, l2, 32);
kono
parents:
diff changeset
246 check (res, eq);
kono
parents:
diff changeset
247
kono
parents:
diff changeset
248 fn16 (res, i1, i2, 32);
kono
parents:
diff changeset
249 check (res, ne);
kono
parents:
diff changeset
250 fn17 (res, i1, s2, 32);
kono
parents:
diff changeset
251 check (res, ne);
kono
parents:
diff changeset
252 fn18 (res, i1, l2, 32);
kono
parents:
diff changeset
253 check (res, ne);
kono
parents:
diff changeset
254 }
kono
parents:
diff changeset
255
kono
parents:
diff changeset
256 /* { dg-final { scan-tree-dump-times "VECTORIZED" 18 "vect" { target sse4_runtime } } } */