Remove kill flags after if conversion if necessary
[oota-llvm.git] / test / CodeGen / AArch64 / neon-compare-instructions.ll
1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
2
3 define <8 x i8> @cmeq8xi8(<8 x i8> %A, <8 x i8> %B) {
4 ;CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
5         %tmp3 = icmp eq <8 x i8> %A, %B;
6    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
7         ret <8 x i8> %tmp4
8 }
9
10 define <16 x i8> @cmeq16xi8(<16 x i8> %A, <16 x i8> %B) {
11 ;CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
12         %tmp3 = icmp eq <16 x i8> %A, %B;
13    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
14         ret <16 x i8> %tmp4
15 }
16
17 define <4 x i16> @cmeq4xi16(<4 x i16> %A, <4 x i16> %B) {
18 ;CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
19         %tmp3 = icmp eq <4 x i16> %A, %B;
20    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
21         ret <4 x i16> %tmp4
22 }
23
24 define <8 x i16> @cmeq8xi16(<8 x i16> %A, <8 x i16> %B) {
25 ;CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
26         %tmp3 = icmp eq <8 x i16> %A, %B;
27    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
28         ret <8 x i16> %tmp4
29 }
30
31 define <2 x i32> @cmeq2xi32(<2 x i32> %A, <2 x i32> %B) {
32 ;CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
33         %tmp3 = icmp eq <2 x i32> %A, %B;
34    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
35         ret <2 x i32> %tmp4
36 }
37
38 define <4 x i32> @cmeq4xi32(<4 x i32> %A, <4 x i32> %B) {
39 ;CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
40         %tmp3 = icmp eq <4 x i32> %A, %B;
41    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
42         ret <4 x i32> %tmp4
43 }
44
45 define <2 x i64> @cmeq2xi64(<2 x i64> %A, <2 x i64> %B) {
46 ;CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
47         %tmp3 = icmp eq <2 x i64> %A, %B;
48    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
49         ret <2 x i64> %tmp4
50 }
51
52 define <8 x i8> @cmne8xi8(<8 x i8> %A, <8 x i8> %B) {
53 ;CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
54 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
55 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
56         %tmp3 = icmp ne <8 x i8> %A, %B;
57    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
58         ret <8 x i8> %tmp4
59 }
60
61 define <16 x i8> @cmne16xi8(<16 x i8> %A, <16 x i8> %B) {
62 ;CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
63 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
64 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
65         %tmp3 = icmp ne <16 x i8> %A, %B;
66    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
67         ret <16 x i8> %tmp4
68 }
69
70 define <4 x i16> @cmne4xi16(<4 x i16> %A, <4 x i16> %B) {
71 ;CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
72 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
73 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
74         %tmp3 = icmp ne <4 x i16> %A, %B;
75    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
76         ret <4 x i16> %tmp4
77 }
78
79 define <8 x i16> @cmne8xi16(<8 x i16> %A, <8 x i16> %B) {
80 ;CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
81 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
82 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
83         %tmp3 = icmp ne <8 x i16> %A, %B;
84    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
85         ret <8 x i16> %tmp4
86 }
87
88 define <2 x i32> @cmne2xi32(<2 x i32> %A, <2 x i32> %B) {
89 ;CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
90 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
91 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
92         %tmp3 = icmp ne <2 x i32> %A, %B;
93    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
94         ret <2 x i32> %tmp4
95 }
96
97 define <4 x i32> @cmne4xi32(<4 x i32> %A, <4 x i32> %B) {
98 ;CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
99 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
100 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
101         %tmp3 = icmp ne <4 x i32> %A, %B;
102    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
103         ret <4 x i32> %tmp4
104 }
105
106 define <2 x i64> @cmne2xi64(<2 x i64> %A, <2 x i64> %B) {
107 ;CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
108 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
109 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
110         %tmp3 = icmp ne <2 x i64> %A, %B;
111    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
112         ret <2 x i64> %tmp4
113 }
114
115 define <8 x i8> @cmgt8xi8(<8 x i8> %A, <8 x i8> %B) {
116 ;CHECK: cmgt {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
117         %tmp3 = icmp sgt <8 x i8> %A, %B;
118    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
119         ret <8 x i8> %tmp4
120 }
121
122 define <16 x i8> @cmgt16xi8(<16 x i8> %A, <16 x i8> %B) {
123 ;CHECK: cmgt {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
124         %tmp3 = icmp sgt <16 x i8> %A, %B;
125    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
126         ret <16 x i8> %tmp4
127 }
128
129 define <4 x i16> @cmgt4xi16(<4 x i16> %A, <4 x i16> %B) {
130 ;CHECK: cmgt {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
131         %tmp3 = icmp sgt <4 x i16> %A, %B;
132    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
133         ret <4 x i16> %tmp4
134 }
135
136 define <8 x i16> @cmgt8xi16(<8 x i16> %A, <8 x i16> %B) {
137 ;CHECK: cmgt {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
138         %tmp3 = icmp sgt <8 x i16> %A, %B;
139    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
140         ret <8 x i16> %tmp4
141 }
142
143 define <2 x i32> @cmgt2xi32(<2 x i32> %A, <2 x i32> %B) {
144 ;CHECK: cmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
145         %tmp3 = icmp sgt <2 x i32> %A, %B;
146    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
147         ret <2 x i32> %tmp4
148 }
149
150 define <4 x i32> @cmgt4xi32(<4 x i32> %A, <4 x i32> %B) {
151 ;CHECK: cmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
152         %tmp3 = icmp sgt <4 x i32> %A, %B;
153    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
154         ret <4 x i32> %tmp4
155 }
156
157 define <2 x i64> @cmgt2xi64(<2 x i64> %A, <2 x i64> %B) {
158 ;CHECK: cmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
159         %tmp3 = icmp sgt <2 x i64> %A, %B;
160    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
161         ret <2 x i64> %tmp4
162 }
163
164 define <8 x i8> @cmlt8xi8(<8 x i8> %A, <8 x i8> %B) {
165 ; Using registers other than v0, v1 are possible, but would be odd.
166 ; LT implemented as GT, so check reversed operands.
167 ;CHECK: cmgt {{v[0-9]+}}.8b, v1.8b, v0.8b
168         %tmp3 = icmp slt <8 x i8> %A, %B;
169    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
170         ret <8 x i8> %tmp4
171 }
172
173 define <16 x i8> @cmlt16xi8(<16 x i8> %A, <16 x i8> %B) {
174 ; Using registers other than v0, v1 are possible, but would be odd.
175 ; LT implemented as GT, so check reversed operands.
176 ;CHECK: cmgt {{v[0-9]+}}.16b, v1.16b, v0.16b
177         %tmp3 = icmp slt <16 x i8> %A, %B;
178    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
179         ret <16 x i8> %tmp4
180 }
181
182 define <4 x i16> @cmlt4xi16(<4 x i16> %A, <4 x i16> %B) {
183 ; Using registers other than v0, v1 are possible, but would be odd.
184 ; LT implemented as GT, so check reversed operands.
185 ;CHECK: cmgt {{v[0-9]+}}.4h, v1.4h, v0.4h
186         %tmp3 = icmp slt <4 x i16> %A, %B;
187    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
188         ret <4 x i16> %tmp4
189 }
190
191 define <8 x i16> @cmlt8xi16(<8 x i16> %A, <8 x i16> %B) {
192 ; Using registers other than v0, v1 are possible, but would be odd.
193 ; LT implemented as GT, so check reversed operands.
194 ;CHECK: cmgt {{v[0-9]+}}.8h, v1.8h, v0.8h
195         %tmp3 = icmp slt <8 x i16> %A, %B;
196    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
197         ret <8 x i16> %tmp4
198 }
199
200 define <2 x i32> @cmlt2xi32(<2 x i32> %A, <2 x i32> %B) {
201 ; Using registers other than v0, v1 are possible, but would be odd.
202 ; LT implemented as GT, so check reversed operands.
203 ;CHECK: cmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
204         %tmp3 = icmp slt <2 x i32> %A, %B;
205    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
206         ret <2 x i32> %tmp4
207 }
208
209 define <4 x i32> @cmlt4xi32(<4 x i32> %A, <4 x i32> %B) {
210 ; Using registers other than v0, v1 are possible, but would be odd.
211 ; LT implemented as GT, so check reversed operands.
212 ;CHECK: cmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
213         %tmp3 = icmp slt <4 x i32> %A, %B;
214    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
215         ret <4 x i32> %tmp4
216 }
217
218 define <2 x i64> @cmlt2xi64(<2 x i64> %A, <2 x i64> %B) {
219 ; Using registers other than v0, v1 are possible, but would be odd.
220 ; LT implemented as GT, so check reversed operands.
221 ;CHECK: cmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
222         %tmp3 = icmp slt <2 x i64> %A, %B;
223    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
224         ret <2 x i64> %tmp4
225 }
226
227 define <8 x i8> @cmge8xi8(<8 x i8> %A, <8 x i8> %B) {
228 ;CHECK: cmge {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
229         %tmp3 = icmp sge <8 x i8> %A, %B;
230    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
231         ret <8 x i8> %tmp4
232 }
233
234 define <16 x i8> @cmge16xi8(<16 x i8> %A, <16 x i8> %B) {
235 ;CHECK: cmge {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
236         %tmp3 = icmp sge <16 x i8> %A, %B;
237    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
238         ret <16 x i8> %tmp4
239 }
240
241 define <4 x i16> @cmge4xi16(<4 x i16> %A, <4 x i16> %B) {
242 ;CHECK: cmge {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
243         %tmp3 = icmp sge <4 x i16> %A, %B;
244    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
245         ret <4 x i16> %tmp4
246 }
247
248 define <8 x i16> @cmge8xi16(<8 x i16> %A, <8 x i16> %B) {
249 ;CHECK: cmge {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
250         %tmp3 = icmp sge <8 x i16> %A, %B;
251    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
252         ret <8 x i16> %tmp4
253 }
254
255 define <2 x i32> @cmge2xi32(<2 x i32> %A, <2 x i32> %B) {
256 ;CHECK: cmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
257         %tmp3 = icmp sge <2 x i32> %A, %B;
258    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
259         ret <2 x i32> %tmp4
260 }
261
262 define <4 x i32> @cmge4xi32(<4 x i32> %A, <4 x i32> %B) {
263 ;CHECK: cmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
264         %tmp3 = icmp sge <4 x i32> %A, %B;
265    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
266         ret <4 x i32> %tmp4
267 }
268
269 define <2 x i64> @cmge2xi64(<2 x i64> %A, <2 x i64> %B) {
270 ;CHECK: cmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
271         %tmp3 = icmp sge <2 x i64> %A, %B;
272    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
273         ret <2 x i64> %tmp4
274 }
275
276 define <8 x i8> @cmle8xi8(<8 x i8> %A, <8 x i8> %B) {
277 ; Using registers other than v0, v1 are possible, but would be odd.
278 ; LE implemented as GE, so check reversed operands.
279 ;CHECK: cmge {{v[0-9]+}}.8b, v1.8b, v0.8b
280         %tmp3 = icmp sle <8 x i8> %A, %B;
281    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
282         ret <8 x i8> %tmp4
283 }
284
285 define <16 x i8> @cmle16xi8(<16 x i8> %A, <16 x i8> %B) {
286 ; Using registers other than v0, v1 are possible, but would be odd.
287 ; LE implemented as GE, so check reversed operands.
288 ;CHECK: cmge {{v[0-9]+}}.16b, v1.16b, v0.16b
289         %tmp3 = icmp sle <16 x i8> %A, %B;
290    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
291         ret <16 x i8> %tmp4
292 }
293
294 define <4 x i16> @cmle4xi16(<4 x i16> %A, <4 x i16> %B) {
295 ; Using registers other than v0, v1 are possible, but would be odd.
296 ; LE implemented as GE, so check reversed operands.
297 ;CHECK: cmge {{v[0-9]+}}.4h, v1.4h, v0.4h
298         %tmp3 = icmp sle <4 x i16> %A, %B;
299    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
300         ret <4 x i16> %tmp4
301 }
302
303 define <8 x i16> @cmle8xi16(<8 x i16> %A, <8 x i16> %B) {
304 ; Using registers other than v0, v1 are possible, but would be odd.
305 ; LE implemented as GE, so check reversed operands.
306 ;CHECK: cmge {{v[0-9]+}}.8h, v1.8h, v0.8h
307         %tmp3 = icmp sle <8 x i16> %A, %B;
308    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
309         ret <8 x i16> %tmp4
310 }
311
312 define <2 x i32> @cmle2xi32(<2 x i32> %A, <2 x i32> %B) {
313 ; Using registers other than v0, v1 are possible, but would be odd.
314 ; LE implemented as GE, so check reversed operands.
315 ;CHECK: cmge {{v[0-9]+}}.2s, v1.2s, v0.2s
316         %tmp3 = icmp sle <2 x i32> %A, %B;
317    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
318         ret <2 x i32> %tmp4
319 }
320
321 define <4 x i32> @cmle4xi32(<4 x i32> %A, <4 x i32> %B) {
322 ; Using registers other than v0, v1 are possible, but would be odd.
323 ; LE implemented as GE, so check reversed operands.
324 ;CHECK: cmge {{v[0-9]+}}.4s, v1.4s, v0.4s
325         %tmp3 = icmp sle <4 x i32> %A, %B;
326    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
327         ret <4 x i32> %tmp4
328 }
329
330 define <2 x i64> @cmle2xi64(<2 x i64> %A, <2 x i64> %B) {
331 ; Using registers other than v0, v1 are possible, but would be odd.
332 ; LE implemented as GE, so check reversed operands.
333 ;CHECK: cmge {{v[0-9]+}}.2d, v1.2d, v0.2d
334         %tmp3 = icmp sle <2 x i64> %A, %B;
335    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
336         ret <2 x i64> %tmp4
337 }
338
339 define <8 x i8> @cmhi8xi8(<8 x i8> %A, <8 x i8> %B) {
340 ;CHECK: cmhi {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
341         %tmp3 = icmp ugt <8 x i8> %A, %B;
342    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
343         ret <8 x i8> %tmp4
344 }
345
346 define <16 x i8> @cmhi16xi8(<16 x i8> %A, <16 x i8> %B) {
347 ;CHECK: cmhi {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
348         %tmp3 = icmp ugt <16 x i8> %A, %B;
349    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
350         ret <16 x i8> %tmp4
351 }
352
353 define <4 x i16> @cmhi4xi16(<4 x i16> %A, <4 x i16> %B) {
354 ;CHECK: cmhi {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
355         %tmp3 = icmp ugt <4 x i16> %A, %B;
356    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
357         ret <4 x i16> %tmp4
358 }
359
360 define <8 x i16> @cmhi8xi16(<8 x i16> %A, <8 x i16> %B) {
361 ;CHECK: cmhi {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
362         %tmp3 = icmp ugt <8 x i16> %A, %B;
363    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
364         ret <8 x i16> %tmp4
365 }
366
367 define <2 x i32> @cmhi2xi32(<2 x i32> %A, <2 x i32> %B) {
368 ;CHECK: cmhi {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
369         %tmp3 = icmp ugt <2 x i32> %A, %B;
370    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
371         ret <2 x i32> %tmp4
372 }
373
374 define <4 x i32> @cmhi4xi32(<4 x i32> %A, <4 x i32> %B) {
375 ;CHECK: cmhi {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
376         %tmp3 = icmp ugt <4 x i32> %A, %B;
377    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
378         ret <4 x i32> %tmp4
379 }
380
381 define <2 x i64> @cmhi2xi64(<2 x i64> %A, <2 x i64> %B) {
382 ;CHECK: cmhi {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
383         %tmp3 = icmp ugt <2 x i64> %A, %B;
384    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
385         ret <2 x i64> %tmp4
386 }
387
388 define <8 x i8> @cmlo8xi8(<8 x i8> %A, <8 x i8> %B) {
389 ; Using registers other than v0, v1 are possible, but would be odd.
390 ; LO implemented as HI, so check reversed operands.
391 ;CHECK: cmhi {{v[0-9]+}}.8b, v1.8b, v0.8b
392         %tmp3 = icmp ult <8 x i8> %A, %B;
393    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
394         ret <8 x i8> %tmp4
395 }
396
397 define <16 x i8> @cmlo16xi8(<16 x i8> %A, <16 x i8> %B) {
398 ; Using registers other than v0, v1 are possible, but would be odd.
399 ; LO implemented as HI, so check reversed operands.
400 ;CHECK: cmhi {{v[0-9]+}}.16b, v1.16b, v0.16b
401         %tmp3 = icmp ult <16 x i8> %A, %B;
402    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
403         ret <16 x i8> %tmp4
404 }
405
406 define <4 x i16> @cmlo4xi16(<4 x i16> %A, <4 x i16> %B) {
407 ; Using registers other than v0, v1 are possible, but would be odd.
408 ; LO implemented as HI, so check reversed operands.
409 ;CHECK: cmhi {{v[0-9]+}}.4h, v1.4h, v0.4h
410         %tmp3 = icmp ult <4 x i16> %A, %B;
411    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
412         ret <4 x i16> %tmp4
413 }
414
415 define <8 x i16> @cmlo8xi16(<8 x i16> %A, <8 x i16> %B) {
416 ; Using registers other than v0, v1 are possible, but would be odd.
417 ; LO implemented as HI, so check reversed operands.
418 ;CHECK: cmhi {{v[0-9]+}}.8h, v1.8h, v0.8h
419         %tmp3 = icmp ult <8 x i16> %A, %B;
420    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
421         ret <8 x i16> %tmp4
422 }
423
424 define <2 x i32> @cmlo2xi32(<2 x i32> %A, <2 x i32> %B) {
425 ; Using registers other than v0, v1 are possible, but would be odd.
426 ; LO implemented as HI, so check reversed operands.
427 ;CHECK: cmhi {{v[0-9]+}}.2s, v1.2s, v0.2s
428         %tmp3 = icmp ult <2 x i32> %A, %B;
429    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
430         ret <2 x i32> %tmp4
431 }
432
433 define <4 x i32> @cmlo4xi32(<4 x i32> %A, <4 x i32> %B) {
434 ; Using registers other than v0, v1 are possible, but would be odd.
435 ; LO implemented as HI, so check reversed operands.
436 ;CHECK: cmhi {{v[0-9]+}}.4s, v1.4s, v0.4s
437         %tmp3 = icmp ult <4 x i32> %A, %B;
438    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
439         ret <4 x i32> %tmp4
440 }
441
442 define <2 x i64> @cmlo2xi64(<2 x i64> %A, <2 x i64> %B) {
443 ; Using registers other than v0, v1 are possible, but would be odd.
444 ; LO implemented as HI, so check reversed operands.
445 ;CHECK: cmhi {{v[0-9]+}}.2d, v1.2d, v0.2d
446         %tmp3 = icmp ult <2 x i64> %A, %B;
447    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
448         ret <2 x i64> %tmp4
449 }
450
451 define <8 x i8> @cmhs8xi8(<8 x i8> %A, <8 x i8> %B) {
452 ;CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
453         %tmp3 = icmp uge <8 x i8> %A, %B;
454    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
455         ret <8 x i8> %tmp4
456 }
457
458 define <16 x i8> @cmhs16xi8(<16 x i8> %A, <16 x i8> %B) {
459 ;CHECK: cmhs {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
460         %tmp3 = icmp uge <16 x i8> %A, %B;
461    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
462         ret <16 x i8> %tmp4
463 }
464
465 define <4 x i16> @cmhs4xi16(<4 x i16> %A, <4 x i16> %B) {
466 ;CHECK: cmhs {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
467         %tmp3 = icmp uge <4 x i16> %A, %B;
468    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
469         ret <4 x i16> %tmp4
470 }
471
472 define <8 x i16> @cmhs8xi16(<8 x i16> %A, <8 x i16> %B) {
473 ;CHECK: cmhs {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
474         %tmp3 = icmp uge <8 x i16> %A, %B;
475    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
476         ret <8 x i16> %tmp4
477 }
478
479 define <2 x i32> @cmhs2xi32(<2 x i32> %A, <2 x i32> %B) {
480 ;CHECK: cmhs {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
481         %tmp3 = icmp uge <2 x i32> %A, %B;
482    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
483         ret <2 x i32> %tmp4
484 }
485
486 define <4 x i32> @cmhs4xi32(<4 x i32> %A, <4 x i32> %B) {
487 ;CHECK: cmhs {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
488         %tmp3 = icmp uge <4 x i32> %A, %B;
489    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
490         ret <4 x i32> %tmp4
491 }
492
493 define <2 x i64> @cmhs2xi64(<2 x i64> %A, <2 x i64> %B) {
494 ;CHECK: cmhs {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
495         %tmp3 = icmp uge <2 x i64> %A, %B;
496    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
497         ret <2 x i64> %tmp4
498 }
499
500 define <8 x i8> @cmls8xi8(<8 x i8> %A, <8 x i8> %B) {
501 ; Using registers other than v0, v1 are possible, but would be odd.
502 ; LS implemented as HS, so check reversed operands.
503 ;CHECK: cmhs {{v[0-9]+}}.8b, v1.8b, v0.8b
504         %tmp3 = icmp ule <8 x i8> %A, %B;
505    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
506         ret <8 x i8> %tmp4
507 }
508
509 define <16 x i8> @cmls16xi8(<16 x i8> %A, <16 x i8> %B) {
510 ; Using registers other than v0, v1 are possible, but would be odd.
511 ; LS implemented as HS, so check reversed operands.
512 ;CHECK: cmhs {{v[0-9]+}}.16b, v1.16b, v0.16b
513         %tmp3 = icmp ule <16 x i8> %A, %B;
514    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
515         ret <16 x i8> %tmp4
516 }
517
518 define <4 x i16> @cmls4xi16(<4 x i16> %A, <4 x i16> %B) {
519 ; Using registers other than v0, v1 are possible, but would be odd.
520 ; LS implemented as HS, so check reversed operands.
521 ;CHECK: cmhs {{v[0-9]+}}.4h, v1.4h, v0.4h
522         %tmp3 = icmp ule <4 x i16> %A, %B;
523    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
524         ret <4 x i16> %tmp4
525 }
526
527 define <8 x i16> @cmls8xi16(<8 x i16> %A, <8 x i16> %B) {
528 ; Using registers other than v0, v1 are possible, but would be odd.
529 ; LS implemented as HS, so check reversed operands.
530 ;CHECK: cmhs {{v[0-9]+}}.8h, v1.8h, v0.8h
531         %tmp3 = icmp ule <8 x i16> %A, %B;
532    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
533         ret <8 x i16> %tmp4
534 }
535
536 define <2 x i32> @cmls2xi32(<2 x i32> %A, <2 x i32> %B) {
537 ; Using registers other than v0, v1 are possible, but would be odd.
538 ; LS implemented as HS, so check reversed operands.
539 ;CHECK: cmhs {{v[0-9]+}}.2s, v1.2s, v0.2s
540         %tmp3 = icmp ule <2 x i32> %A, %B;
541    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
542         ret <2 x i32> %tmp4
543 }
544
545 define <4 x i32> @cmls4xi32(<4 x i32> %A, <4 x i32> %B) {
546 ; Using registers other than v0, v1 are possible, but would be odd.
547 ; LS implemented as HS, so check reversed operands.
548 ;CHECK: cmhs {{v[0-9]+}}.4s, v1.4s, v0.4s
549         %tmp3 = icmp ule <4 x i32> %A, %B;
550    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
551         ret <4 x i32> %tmp4
552 }
553
554 define <2 x i64> @cmls2xi64(<2 x i64> %A, <2 x i64> %B) {
555 ; Using registers other than v0, v1 are possible, but would be odd.
556 ; LS implemented as HS, so check reversed operands.
557 ;CHECK: cmhs {{v[0-9]+}}.2d, v1.2d, v0.2d
558         %tmp3 = icmp ule <2 x i64> %A, %B;
559    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
560         ret <2 x i64> %tmp4
561 }
562
563 define <8 x i8> @cmtst8xi8(<8 x i8> %A, <8 x i8> %B) {
564 ;CHECK: cmtst {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
565         %tmp3 = and <8 x i8> %A, %B
566         %tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
567    %tmp5 = sext <8 x i1> %tmp4 to <8 x i8>
568         ret <8 x i8> %tmp5
569 }
570
571 define <16 x i8> @cmtst16xi8(<16 x i8> %A, <16 x i8> %B) {
572 ;CHECK: cmtst {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
573         %tmp3 = and <16 x i8> %A, %B
574         %tmp4 = icmp ne <16 x i8> %tmp3, zeroinitializer
575    %tmp5 = sext <16 x i1> %tmp4 to <16 x i8>
576         ret <16 x i8> %tmp5
577 }
578
579 define <4 x i16> @cmtst4xi16(<4 x i16> %A, <4 x i16> %B) {
580 ;CHECK: cmtst {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
581         %tmp3 = and <4 x i16> %A, %B
582         %tmp4 = icmp ne <4 x i16> %tmp3, zeroinitializer
583    %tmp5 = sext <4 x i1> %tmp4 to <4 x i16>
584         ret <4 x i16> %tmp5
585 }
586
587 define <8 x i16> @cmtst8xi16(<8 x i16> %A, <8 x i16> %B) {
588 ;CHECK: cmtst {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
589         %tmp3 = and <8 x i16> %A, %B
590         %tmp4 = icmp ne <8 x i16> %tmp3, zeroinitializer
591    %tmp5 = sext <8 x i1> %tmp4 to <8 x i16>
592         ret <8 x i16> %tmp5
593 }
594
595 define <2 x i32> @cmtst2xi32(<2 x i32> %A, <2 x i32> %B) {
596 ;CHECK: cmtst {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
597         %tmp3 = and <2 x i32> %A, %B
598         %tmp4 = icmp ne <2 x i32> %tmp3, zeroinitializer
599    %tmp5 = sext <2 x i1> %tmp4 to <2 x i32>
600         ret <2 x i32> %tmp5
601 }
602
603 define <4 x i32> @cmtst4xi32(<4 x i32> %A, <4 x i32> %B) {
604 ;CHECK: cmtst {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
605         %tmp3 = and <4 x i32> %A, %B
606         %tmp4 = icmp ne <4 x i32> %tmp3, zeroinitializer
607    %tmp5 = sext <4 x i1> %tmp4 to <4 x i32>
608         ret <4 x i32> %tmp5
609 }
610
611 define <2 x i64> @cmtst2xi64(<2 x i64> %A, <2 x i64> %B) {
612 ;CHECK: cmtst {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
613         %tmp3 = and <2 x i64> %A, %B
614         %tmp4 = icmp ne <2 x i64> %tmp3, zeroinitializer
615    %tmp5 = sext <2 x i1> %tmp4 to <2 x i64>
616         ret <2 x i64> %tmp5
617 }
618
619
620
621 define <8 x i8> @cmeqz8xi8(<8 x i8> %A) {
622 ;CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
623         %tmp3 = icmp eq <8 x i8> %A, zeroinitializer;
624    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
625         ret <8 x i8> %tmp4
626 }
627
628 define <16 x i8> @cmeqz16xi8(<16 x i8> %A) {
629 ;CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
630         %tmp3 = icmp eq <16 x i8> %A, zeroinitializer;
631    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
632         ret <16 x i8> %tmp4
633 }
634
635 define <4 x i16> @cmeqz4xi16(<4 x i16> %A) {
636 ;CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
637         %tmp3 = icmp eq <4 x i16> %A, zeroinitializer;
638    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
639         ret <4 x i16> %tmp4
640 }
641
642 define <8 x i16> @cmeqz8xi16(<8 x i16> %A) {
643 ;CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
644         %tmp3 = icmp eq <8 x i16> %A, zeroinitializer;
645    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
646         ret <8 x i16> %tmp4
647 }
648
649 define <2 x i32> @cmeqz2xi32(<2 x i32> %A) {
650 ;CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
651         %tmp3 = icmp eq <2 x i32> %A, zeroinitializer;
652    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
653         ret <2 x i32> %tmp4
654 }
655
656 define <4 x i32> @cmeqz4xi32(<4 x i32> %A) {
657 ;CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
658         %tmp3 = icmp eq <4 x i32> %A, zeroinitializer;
659    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
660         ret <4 x i32> %tmp4
661 }
662
663 define <2 x i64> @cmeqz2xi64(<2 x i64> %A) {
664 ;CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
665         %tmp3 = icmp eq <2 x i64> %A, zeroinitializer;
666    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
667         ret <2 x i64> %tmp4
668 }
669
670
671 define <8 x i8> @cmgez8xi8(<8 x i8> %A) {
672 ;CHECK: cmge {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
673         %tmp3 = icmp sge <8 x i8> %A, zeroinitializer;
674    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
675         ret <8 x i8> %tmp4
676 }
677
678 define <16 x i8> @cmgez16xi8(<16 x i8> %A) {
679 ;CHECK: cmge {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
680         %tmp3 = icmp sge <16 x i8> %A, zeroinitializer;
681    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
682         ret <16 x i8> %tmp4
683 }
684
685 define <4 x i16> @cmgez4xi16(<4 x i16> %A) {
686 ;CHECK: cmge {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
687         %tmp3 = icmp sge <4 x i16> %A, zeroinitializer;
688    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
689         ret <4 x i16> %tmp4
690 }
691
692 define <8 x i16> @cmgez8xi16(<8 x i16> %A) {
693 ;CHECK: cmge {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
694         %tmp3 = icmp sge <8 x i16> %A, zeroinitializer;
695    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
696         ret <8 x i16> %tmp4
697 }
698
699 define <2 x i32> @cmgez2xi32(<2 x i32> %A) {
700 ;CHECK: cmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
701         %tmp3 = icmp sge <2 x i32> %A, zeroinitializer;
702    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
703         ret <2 x i32> %tmp4
704 }
705
706 define <4 x i32> @cmgez4xi32(<4 x i32> %A) {
707 ;CHECK: cmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
708         %tmp3 = icmp sge <4 x i32> %A, zeroinitializer;
709    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
710         ret <4 x i32> %tmp4
711 }
712
713 define <2 x i64> @cmgez2xi64(<2 x i64> %A) {
714 ;CHECK: cmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
715         %tmp3 = icmp sge <2 x i64> %A, zeroinitializer;
716    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
717         ret <2 x i64> %tmp4
718 }
719
720
721 define <8 x i8> @cmgtz8xi8(<8 x i8> %A) {
722 ;CHECK: cmgt {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
723         %tmp3 = icmp sgt <8 x i8> %A, zeroinitializer;
724    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
725         ret <8 x i8> %tmp4
726 }
727
728 define <16 x i8> @cmgtz16xi8(<16 x i8> %A) {
729 ;CHECK: cmgt {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
730         %tmp3 = icmp sgt <16 x i8> %A, zeroinitializer;
731    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
732         ret <16 x i8> %tmp4
733 }
734
735 define <4 x i16> @cmgtz4xi16(<4 x i16> %A) {
736 ;CHECK: cmgt {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
737         %tmp3 = icmp sgt <4 x i16> %A, zeroinitializer;
738    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
739         ret <4 x i16> %tmp4
740 }
741
742 define <8 x i16> @cmgtz8xi16(<8 x i16> %A) {
743 ;CHECK: cmgt {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
744         %tmp3 = icmp sgt <8 x i16> %A, zeroinitializer;
745    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
746         ret <8 x i16> %tmp4
747 }
748
749 define <2 x i32> @cmgtz2xi32(<2 x i32> %A) {
750 ;CHECK: cmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
751         %tmp3 = icmp sgt <2 x i32> %A, zeroinitializer;
752    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
753         ret <2 x i32> %tmp4
754 }
755
756 define <4 x i32> @cmgtz4xi32(<4 x i32> %A) {
757 ;CHECK: cmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
758         %tmp3 = icmp sgt <4 x i32> %A, zeroinitializer;
759    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
760         ret <4 x i32> %tmp4
761 }
762
763 define <2 x i64> @cmgtz2xi64(<2 x i64> %A) {
764 ;CHECK: cmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
765         %tmp3 = icmp sgt <2 x i64> %A, zeroinitializer;
766    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
767         ret <2 x i64> %tmp4
768 }
769
770 define <8 x i8> @cmlez8xi8(<8 x i8> %A) {
771 ;CHECK: cmle {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
772         %tmp3 = icmp sle <8 x i8> %A, zeroinitializer;
773    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
774         ret <8 x i8> %tmp4
775 }
776
777 define <16 x i8> @cmlez16xi8(<16 x i8> %A) {
778 ;CHECK: cmle {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
779         %tmp3 = icmp sle <16 x i8> %A, zeroinitializer;
780    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
781         ret <16 x i8> %tmp4
782 }
783
784 define <4 x i16> @cmlez4xi16(<4 x i16> %A) {
785 ;CHECK: cmle {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
786         %tmp3 = icmp sle <4 x i16> %A, zeroinitializer;
787    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
788         ret <4 x i16> %tmp4
789 }
790
791 define <8 x i16> @cmlez8xi16(<8 x i16> %A) {
792 ;CHECK: cmle {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
793         %tmp3 = icmp sle <8 x i16> %A, zeroinitializer;
794    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
795         ret <8 x i16> %tmp4
796 }
797
798 define <2 x i32> @cmlez2xi32(<2 x i32> %A) {
799 ;CHECK: cmle {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
800         %tmp3 = icmp sle <2 x i32> %A, zeroinitializer;
801    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
802         ret <2 x i32> %tmp4
803 }
804
805 define <4 x i32> @cmlez4xi32(<4 x i32> %A) {
806 ;CHECK: cmle {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
807         %tmp3 = icmp sle <4 x i32> %A, zeroinitializer;
808    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
809         ret <4 x i32> %tmp4
810 }
811
812 define <2 x i64> @cmlez2xi64(<2 x i64> %A) {
813 ;CHECK: cmle {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
814         %tmp3 = icmp sle <2 x i64> %A, zeroinitializer;
815    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
816         ret <2 x i64> %tmp4
817 }
818
819 define <8 x i8> @cmltz8xi8(<8 x i8> %A) {
820 ;CHECK: cmlt {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
821         %tmp3 = icmp slt <8 x i8> %A, zeroinitializer;
822    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
823         ret <8 x i8> %tmp4
824 }
825
826 define <16 x i8> @cmltz16xi8(<16 x i8> %A) {
827 ;CHECK: cmlt {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
828         %tmp3 = icmp slt <16 x i8> %A, zeroinitializer;
829    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
830         ret <16 x i8> %tmp4
831 }
832
833 define <4 x i16> @cmltz4xi16(<4 x i16> %A) {
834 ;CHECK: cmlt {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
835         %tmp3 = icmp slt <4 x i16> %A, zeroinitializer;
836    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
837         ret <4 x i16> %tmp4
838 }
839
840 define <8 x i16> @cmltz8xi16(<8 x i16> %A) {
841 ;CHECK: cmlt {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
842         %tmp3 = icmp slt <8 x i16> %A, zeroinitializer;
843    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
844         ret <8 x i16> %tmp4
845 }
846
847 define <2 x i32> @cmltz2xi32(<2 x i32> %A) {
848 ;CHECK: cmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
849         %tmp3 = icmp slt <2 x i32> %A, zeroinitializer;
850    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
851         ret <2 x i32> %tmp4
852 }
853
854 define <4 x i32> @cmltz4xi32(<4 x i32> %A) {
855 ;CHECK: cmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
856         %tmp3 = icmp slt <4 x i32> %A, zeroinitializer;
857    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
858         ret <4 x i32> %tmp4
859 }
860
861 define <2 x i64> @cmltz2xi64(<2 x i64> %A) {
862 ;CHECK: cmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
863         %tmp3 = icmp slt <2 x i64> %A, zeroinitializer;
864    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
865         ret <2 x i64> %tmp4
866 }
867
868 define <8 x i8> @cmneqz8xi8(<8 x i8> %A) {
869 ;CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
870 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
871 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
872         %tmp3 = icmp ne <8 x i8> %A, zeroinitializer;
873    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
874         ret <8 x i8> %tmp4
875 }
876
877 define <16 x i8> @cmneqz16xi8(<16 x i8> %A) {
878 ;CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
879 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
880 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
881         %tmp3 = icmp ne <16 x i8> %A, zeroinitializer;
882    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
883         ret <16 x i8> %tmp4
884 }
885
886 define <4 x i16> @cmneqz4xi16(<4 x i16> %A) {
887 ;CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
888 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
889 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
890         %tmp3 = icmp ne <4 x i16> %A, zeroinitializer;
891    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
892         ret <4 x i16> %tmp4
893 }
894
895 define <8 x i16> @cmneqz8xi16(<8 x i16> %A) {
896 ;CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
897 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
898 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
899         %tmp3 = icmp ne <8 x i16> %A, zeroinitializer;
900    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
901         ret <8 x i16> %tmp4
902 }
903
904 define <2 x i32> @cmneqz2xi32(<2 x i32> %A) {
905 ;CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
906 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
907 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
908         %tmp3 = icmp ne <2 x i32> %A, zeroinitializer;
909    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
910         ret <2 x i32> %tmp4
911 }
912
913 define <4 x i32> @cmneqz4xi32(<4 x i32> %A) {
914 ;CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
915 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
916 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
917         %tmp3 = icmp ne <4 x i32> %A, zeroinitializer;
918    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
919         ret <4 x i32> %tmp4
920 }
921
922 define <2 x i64> @cmneqz2xi64(<2 x i64> %A) {
923 ;CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
924 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
925 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
926         %tmp3 = icmp ne <2 x i64> %A, zeroinitializer;
927    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
928         ret <2 x i64> %tmp4
929 }
930
931 define <8 x i8> @cmhsz8xi8(<8 x i8> %A) {
932 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
933 ;CHECK-NEXT: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
934         %tmp3 = icmp uge <8 x i8> %A, zeroinitializer;
935    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
936         ret <8 x i8> %tmp4
937 }
938
939 define <16 x i8> @cmhsz16xi8(<16 x i8> %A) {
940 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
941 ;CHECK-NEXT: cmhs {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
942         %tmp3 = icmp uge <16 x i8> %A, zeroinitializer;
943    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
944         ret <16 x i8> %tmp4
945 }
946
947 define <4 x i16> @cmhsz4xi16(<4 x i16> %A) {
948 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
949 ;CHECK-NEXT: cmhs {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
950         %tmp3 = icmp uge <4 x i16> %A, zeroinitializer;
951    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
952         ret <4 x i16> %tmp4
953 }
954
955 define <8 x i16> @cmhsz8xi16(<8 x i16> %A) {
956 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
957 ;CHECK-NEXT: cmhs {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
958         %tmp3 = icmp uge <8 x i16> %A, zeroinitializer;
959    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
960         ret <8 x i16> %tmp4
961 }
962
963 define <2 x i32> @cmhsz2xi32(<2 x i32> %A) {
964 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
965 ;CHECK-NEXT: cmhs {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
966         %tmp3 = icmp uge <2 x i32> %A, zeroinitializer;
967    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
968         ret <2 x i32> %tmp4
969 }
970
971 define <4 x i32> @cmhsz4xi32(<4 x i32> %A) {
972 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
973 ;CHECK-NEXT: cmhs {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
974         %tmp3 = icmp uge <4 x i32> %A, zeroinitializer;
975    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
976         ret <4 x i32> %tmp4
977 }
978
979 define <2 x i64> @cmhsz2xi64(<2 x i64> %A) {
980 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
981 ;CHECK-NEXT: cmhs {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
982         %tmp3 = icmp uge <2 x i64> %A, zeroinitializer;
983    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
984         ret <2 x i64> %tmp4
985 }
986
987
988 define <8 x i8> @cmhiz8xi8(<8 x i8> %A) {
989 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
990 ;CHECK-NEXT: cmhi {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
991         %tmp3 = icmp ugt <8 x i8> %A, zeroinitializer;
992    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
993         ret <8 x i8> %tmp4
994 }
995
996 define <16 x i8> @cmhiz16xi8(<16 x i8> %A) {
997 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
998 ;CHECK-NEXT: cmhi {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
999         %tmp3 = icmp ugt <16 x i8> %A, zeroinitializer;
1000    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1001         ret <16 x i8> %tmp4
1002 }
1003
1004 define <4 x i16> @cmhiz4xi16(<4 x i16> %A) {
1005 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
1006 ;CHECK-NEXT: cmhi {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1007         %tmp3 = icmp ugt <4 x i16> %A, zeroinitializer;
1008    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1009         ret <4 x i16> %tmp4
1010 }
1011
1012 define <8 x i16> @cmhiz8xi16(<8 x i16> %A) {
1013 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
1014 ;CHECK-NEXT: cmhi {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1015         %tmp3 = icmp ugt <8 x i16> %A, zeroinitializer;
1016    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1017         ret <8 x i16> %tmp4
1018 }
1019
1020 define <2 x i32> @cmhiz2xi32(<2 x i32> %A) {
1021 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
1022 ;CHECK-NEXT: cmhi {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
1023         %tmp3 = icmp ugt <2 x i32> %A, zeroinitializer;
1024    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1025         ret <2 x i32> %tmp4
1026 }
1027
1028 define <4 x i32> @cmhiz4xi32(<4 x i32> %A) {
1029 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
1030 ;CHECK-NEXT: cmhi {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1031         %tmp3 = icmp ugt <4 x i32> %A, zeroinitializer;
1032    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1033         ret <4 x i32> %tmp4
1034 }
1035
1036 define <2 x i64> @cmhiz2xi64(<2 x i64> %A) {
1037 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
1038 ;CHECK-NEXT: cmhi {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1039         %tmp3 = icmp ugt <2 x i64> %A, zeroinitializer;
1040    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1041         ret <2 x i64> %tmp4
1042 }
1043
1044 define <8 x i8> @cmlsz8xi8(<8 x i8> %A) {
1045 ; Using registers other than v0, v1 are possible, but would be odd.
1046 ; LS implemented as HS, so check reversed operands.
1047 ;CHECK: movi v1.8b, #0x0
1048 ;CHECK-NEXT: cmhs {{v[0-9]+}}.8b, v1.8b, v0.8b
1049         %tmp3 = icmp ule <8 x i8> %A, zeroinitializer;
1050    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1051         ret <8 x i8> %tmp4
1052 }
1053
1054 define <16 x i8> @cmlsz16xi8(<16 x i8> %A) {
1055 ; Using registers other than v0, v1 are possible, but would be odd.
1056 ; LS implemented as HS, so check reversed operands.
1057 ;CHECK: movi v1.16b, #0x0
1058 ;CHECK-NEXT: cmhs {{v[0-9]+}}.16b, v1.16b, v0.16b
1059         %tmp3 = icmp ule <16 x i8> %A, zeroinitializer;
1060    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1061         ret <16 x i8> %tmp4
1062 }
1063
1064 define <4 x i16> @cmlsz4xi16(<4 x i16> %A) {
1065 ; Using registers other than v0, v1 are possible, but would be odd.
1066 ; LS implemented as HS, so check reversed operands.
1067 ;CHECK: movi v1.8b, #0x0
1068 ;CHECK-NEXT: cmhs {{v[0-9]+}}.4h, v1.4h, v0.4h
1069         %tmp3 = icmp ule <4 x i16> %A, zeroinitializer;
1070    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1071         ret <4 x i16> %tmp4
1072 }
1073
1074 define <8 x i16> @cmlsz8xi16(<8 x i16> %A) {
1075 ; Using registers other than v0, v1 are possible, but would be odd.
1076 ; LS implemented as HS, so check reversed operands.
1077 ;CHECK: movi v1.16b, #0x0
1078 ;CHECK-NEXT: cmhs {{v[0-9]+}}.8h, v1.8h, v0.8h
1079         %tmp3 = icmp ule <8 x i16> %A, zeroinitializer;
1080    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1081         ret <8 x i16> %tmp4
1082 }
1083
1084 define <2 x i32> @cmlsz2xi32(<2 x i32> %A) {
1085 ; Using registers other than v0, v1 are possible, but would be odd.
1086 ; LS implemented as HS, so check reversed operands.
1087 ;CHECK: movi v1.8b, #0x0
1088 ;CHECK-NEXT: cmhs {{v[0-9]+}}.2s, v1.2s, v0.2s
1089         %tmp3 = icmp ule <2 x i32> %A, zeroinitializer;
1090    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1091         ret <2 x i32> %tmp4
1092 }
1093
1094 define <4 x i32> @cmlsz4xi32(<4 x i32> %A) {
1095 ; Using registers other than v0, v1 are possible, but would be odd.
1096 ; LS implemented as HS, so check reversed operands.
1097 ;CHECK: movi v1.16b, #0x0
1098 ;CHECK-NEXT: cmhs {{v[0-9]+}}.4s, v1.4s, v0.4s
1099         %tmp3 = icmp ule <4 x i32> %A, zeroinitializer;
1100    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1101         ret <4 x i32> %tmp4
1102 }
1103
1104 define <2 x i64> @cmlsz2xi64(<2 x i64> %A) {
1105 ; Using registers other than v0, v1 are possible, but would be odd.
1106 ; LS implemented as HS, so check reversed operands.
1107 ;CHECK: movi v1.16b, #0x0
1108 ;CHECK-NEXT: cmhs {{v[0-9]+}}.2d, v1.2d, v0.2d
1109         %tmp3 = icmp ule <2 x i64> %A, zeroinitializer;
1110    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1111         ret <2 x i64> %tmp4
1112 }
1113
1114 define <8 x i8> @cmloz8xi8(<8 x i8> %A) {
1115 ; Using registers other than v0, v1 are possible, but would be odd.
1116 ; LO implemented as HI, so check reversed operands.
1117 ;CHECK: movi v1.8b, #0x0
1118 ;CHECK-NEXT: cmhi {{v[0-9]+}}.8b, v1.8b, {{v[0-9]+}}.8b
1119         %tmp3 = icmp ult <8 x i8> %A, zeroinitializer;
1120    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1121         ret <8 x i8> %tmp4
1122 }
1123
1124 define <16 x i8> @cmloz16xi8(<16 x i8> %A) {
1125 ; Using registers other than v0, v1 are possible, but would be odd.
1126 ; LO implemented as HI, so check reversed operands.
1127 ;CHECK: movi v1.16b, #0x0
1128 ;CHECK-NEXT: cmhi {{v[0-9]+}}.16b, v1.16b, v0.16b
1129         %tmp3 = icmp ult <16 x i8> %A, zeroinitializer;
1130    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1131         ret <16 x i8> %tmp4
1132 }
1133
1134 define <4 x i16> @cmloz4xi16(<4 x i16> %A) {
1135 ; Using registers other than v0, v1 are possible, but would be odd.
1136 ; LO implemented as HI, so check reversed operands.
1137 ;CHECK: movi v1.8b, #0x0
1138 ;CHECK-NEXT: cmhi {{v[0-9]+}}.4h, v1.4h, v0.4h
1139         %tmp3 = icmp ult <4 x i16> %A, zeroinitializer;
1140    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1141         ret <4 x i16> %tmp4
1142 }
1143
1144 define <8 x i16> @cmloz8xi16(<8 x i16> %A) {
1145 ; Using registers other than v0, v1 are possible, but would be odd.
1146 ; LO implemented as HI, so check reversed operands.
1147 ;CHECK: movi v1.16b, #0x0
1148 ;CHECK-NEXT: cmhi {{v[0-9]+}}.8h, v1.8h, v0.8h
1149         %tmp3 = icmp ult <8 x i16> %A, zeroinitializer;
1150    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1151         ret <8 x i16> %tmp4
1152 }
1153
1154 define <2 x i32> @cmloz2xi32(<2 x i32> %A) {
1155 ; Using registers other than v0, v1 are possible, but would be odd.
1156 ; LO implemented as HI, so check reversed operands.
1157 ;CHECK: movi v1.8b, #0x0
1158 ;CHECK-NEXT: cmhi {{v[0-9]+}}.2s, v1.2s, v0.2s
1159         %tmp3 = icmp ult <2 x i32> %A, zeroinitializer;
1160    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1161         ret <2 x i32> %tmp4
1162 }
1163
1164 define <4 x i32> @cmloz4xi32(<4 x i32> %A) {
1165 ; Using registers other than v0, v1 are possible, but would be odd.
1166 ; LO implemented as HI, so check reversed operands.
1167 ;CHECK: movi v1.16b, #0x0
1168 ;CHECK-NEXT: cmhi {{v[0-9]+}}.4s, v1.4s, v0.4s
1169         %tmp3 = icmp ult <4 x i32> %A, zeroinitializer;
1170    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1171         ret <4 x i32> %tmp4
1172 }
1173
1174 define <2 x i64> @cmloz2xi64(<2 x i64> %A) {
1175 ; Using registers other than v0, v1 are possible, but would be odd.
1176 ; LO implemented as HI, so check reversed operands.
1177 ;CHECK: movi v1.16b, #0x0
1178 ;CHECK-NEXT: cmhi {{v[0-9]+}}.2d, v1.2d, v0.2d
1179         %tmp3 = icmp ult <2 x i64> %A, zeroinitializer;
1180    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1181         ret <2 x i64> %tmp4
1182 }
1183
1184
1185 define <2 x i32> @fcmoeq2xfloat(<2 x float> %A, <2 x float> %B) {
1186 ;CHECK: fcmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
1187    %tmp3 = fcmp oeq <2 x float> %A, %B
1188    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1189         ret <2 x i32> %tmp4
1190 }
1191
1192 define <4 x i32> @fcmoeq4xfloat(<4 x float> %A, <4 x float> %B) {
1193 ;CHECK: fcmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1194    %tmp3 = fcmp oeq <4 x float> %A, %B
1195    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1196         ret <4 x i32> %tmp4
1197 }
1198 define <2 x i64> @fcmoeq2xdouble(<2 x double> %A, <2 x double> %B) {
1199 ;CHECK: fcmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1200    %tmp3 = fcmp oeq <2 x double> %A, %B
1201    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1202         ret <2 x i64> %tmp4
1203 }
1204
1205 define <2 x i32> @fcmoge2xfloat(<2 x float> %A, <2 x float> %B) {
1206 ;CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
1207    %tmp3 = fcmp oge <2 x float> %A, %B
1208    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1209         ret <2 x i32> %tmp4
1210 }
1211
1212 define <4 x i32> @fcmoge4xfloat(<4 x float> %A, <4 x float> %B) {
1213 ;CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1214    %tmp3 = fcmp oge <4 x float> %A, %B
1215    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1216         ret <4 x i32> %tmp4
1217 }
1218 define <2 x i64> @fcmoge2xdouble(<2 x double> %A, <2 x double> %B) {
1219 ;CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1220    %tmp3 = fcmp oge <2 x double> %A, %B
1221    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1222         ret <2 x i64> %tmp4
1223 }
1224
1225 define <2 x i32> @fcmogt2xfloat(<2 x float> %A, <2 x float> %B) {
1226 ;CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
1227    %tmp3 = fcmp ogt <2 x float> %A, %B
1228    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1229         ret <2 x i32> %tmp4
1230 }
1231
1232 define <4 x i32> @fcmogt4xfloat(<4 x float> %A, <4 x float> %B) {
1233 ;CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1234    %tmp3 = fcmp ogt <4 x float> %A, %B
1235    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1236         ret <4 x i32> %tmp4
1237 }
1238 define <2 x i64> @fcmogt2xdouble(<2 x double> %A, <2 x double> %B) {
1239 ;CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1240    %tmp3 = fcmp ogt <2 x double> %A, %B
1241    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1242         ret <2 x i64> %tmp4
1243 }
1244
1245 define <2 x i32> @fcmole2xfloat(<2 x float> %A, <2 x float> %B) {
1246 ; Using registers other than v0, v1 are possible, but would be odd.
1247 ; OLE implemented as OGE, so check reversed operands.
1248 ;CHECK: fcmge {{v[0-9]+}}.2s, v1.2s, v0.2s
1249    %tmp3 = fcmp ole <2 x float> %A, %B
1250    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1251         ret <2 x i32> %tmp4
1252 }
1253
1254 define <4 x i32> @fcmole4xfloat(<4 x float> %A, <4 x float> %B) {
1255 ; Using registers other than v0, v1 are possible, but would be odd.
1256 ; OLE implemented as OGE, so check reversed operands.
1257 ;CHECK: fcmge {{v[0-9]+}}.4s, v1.4s, v0.4s
1258    %tmp3 = fcmp ole <4 x float> %A, %B
1259    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1260         ret <4 x i32> %tmp4
1261 }
1262 define <2 x i64> @fcmole2xdouble(<2 x double> %A, <2 x double> %B) {
1263 ; Using registers other than v0, v1 are possible, but would be odd.
1264 ; OLE implemented as OGE, so check reversed operands.
1265 ;CHECK: fcmge {{v[0-9]+}}.2d, v1.2d, v0.2d
1266    %tmp3 = fcmp ole <2 x double> %A, %B
1267    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1268         ret <2 x i64> %tmp4
1269 }
1270
1271 define <2 x i32> @fcmolt2xfloat(<2 x float> %A, <2 x float> %B) {
1272 ; Using registers other than v0, v1 are possible, but would be odd.
1273 ; OLE implemented as OGE, so check reversed operands.
1274 ;CHECK: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1275    %tmp3 = fcmp olt <2 x float> %A, %B
1276    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1277         ret <2 x i32> %tmp4
1278 }
1279
1280 define <4 x i32> @fcmolt4xfloat(<4 x float> %A, <4 x float> %B) {
1281 ; Using registers other than v0, v1 are possible, but would be odd.
1282 ; OLE implemented as OGE, so check reversed operands.
1283 ;CHECK: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1284    %tmp3 = fcmp olt <4 x float> %A, %B
1285    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1286         ret <4 x i32> %tmp4
1287 }
1288 define <2 x i64> @fcmolt2xdouble(<2 x double> %A, <2 x double> %B) {
1289 ; Using registers other than v0, v1 are possible, but would be odd.
1290 ; OLE implemented as OGE, so check reversed operands.
1291 ;CHECK: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1292    %tmp3 = fcmp olt <2 x double> %A, %B
1293    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1294         ret <2 x i64> %tmp4
1295 }
1296
1297 define <2 x i32> @fcmone2xfloat(<2 x float> %A, <2 x float> %B) {
1298 ; Using registers other than v0, v1 are possible, but would be odd.
1299 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
1300 ;CHECK: fcmgt {{v[0-9]+}}.2s, v0.2s, v1.2s
1301 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1302 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1303    %tmp3 = fcmp one <2 x float> %A, %B
1304    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1305         ret <2 x i32> %tmp4
1306 }
1307
1308 define <4 x i32> @fcmone4xfloat(<4 x float> %A, <4 x float> %B) {
1309 ; Using registers other than v0, v1 are possible, but would be odd.
1310 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
1311 ;CHECK: fcmgt {{v[0-9]+}}.4s, v0.4s, v1.4s
1312 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1313 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1314    %tmp3 = fcmp one <4 x float> %A, %B
1315    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1316         ret <4 x i32> %tmp4
1317 }
1318 define <2 x i64> @fcmone2xdouble(<2 x double> %A, <2 x double> %B) {
1319 ; Using registers other than v0, v1 are possible, but would be odd.
1320 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
1321 ;CHECK: fcmgt {{v[0-9]+}}.2d, v0.2d, v1.2d
1322 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1323 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1324 ; todo check reversed operands
1325    %tmp3 = fcmp one <2 x double> %A, %B
1326    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1327         ret <2 x i64> %tmp4
1328 }
1329
1330
1331 define <2 x i32> @fcmord2xfloat(<2 x float> %A, <2 x float> %B) {
1332 ; Using registers other than v0, v1 are possible, but would be odd.
1333 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
1334 ;CHECK: fcmge {{v[0-9]+}}.2s, v0.2s, v1.2s
1335 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1336 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1337    %tmp3 = fcmp ord <2 x float> %A, %B
1338    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1339         ret <2 x i32> %tmp4
1340 }
1341
1342
1343 define <4 x i32> @fcmord4xfloat(<4 x float> %A, <4 x float> %B) {
1344 ; Using registers other than v0, v1 are possible, but would be odd.
1345 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
1346 ;CHECK: fcmge {{v[0-9]+}}.4s, v0.4s, v1.4s
1347 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1348 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1349    %tmp3 = fcmp ord <4 x float> %A, %B
1350    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1351         ret <4 x i32> %tmp4
1352 }
1353
1354 define <2 x i64> @fcmord2xdouble(<2 x double> %A, <2 x double> %B) {
1355 ; Using registers other than v0, v1 are possible, but would be odd.
1356 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
1357 ;CHECK: fcmge {{v[0-9]+}}.2d, v0.2d, v1.2d
1358 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1359 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1360    %tmp3 = fcmp ord <2 x double> %A, %B
1361    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1362         ret <2 x i64> %tmp4
1363 }
1364
1365
1366 define <2 x i32> @fcmuno2xfloat(<2 x float> %A, <2 x float> %B) {
1367 ; Using registers other than v0, v1 are possible, but would be odd.
1368 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
1369 ;CHECK: fcmge {{v[0-9]+}}.2s, v0.2s, v1.2s
1370 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1371 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1372 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1373 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1374    %tmp3 = fcmp uno <2 x float> %A, %B
1375    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1376         ret <2 x i32> %tmp4
1377 }
1378
1379 define <4 x i32> @fcmuno4xfloat(<4 x float> %A, <4 x float> %B) {
1380 ; Using registers other than v0, v1 are possible, but would be odd.
1381 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
1382 ;CHECK: fcmge {{v[0-9]+}}.4s, v0.4s, v1.4s
1383 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1384 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1385 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1386 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1387    %tmp3 = fcmp uno <4 x float> %A, %B
1388    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1389         ret <4 x i32> %tmp4
1390 }
1391
1392 define <2 x i64> @fcmuno2xdouble(<2 x double> %A, <2 x double> %B) {
1393 ; Using registers other than v0, v1 are possible, but would be odd.
1394 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
1395 ;CHECK: fcmge {{v[0-9]+}}.2d, v0.2d, v1.2d
1396 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1397 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1398 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1399 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1400    %tmp3 = fcmp uno <2 x double> %A, %B
1401    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1402         ret <2 x i64> %tmp4
1403 }
1404
1405 define <2 x i32> @fcmueq2xfloat(<2 x float> %A, <2 x float> %B) {
1406 ; Using registers other than v0, v1 are possible, but would be odd.
1407 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
1408 ;CHECK: fcmgt {{v[0-9]+}}.2s, v0.2s, v1.2s
1409 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1410 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1411 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1412 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1413    %tmp3 = fcmp ueq <2 x float> %A, %B
1414    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1415         ret <2 x i32> %tmp4
1416 }
1417
1418 define <4 x i32> @fcmueq4xfloat(<4 x float> %A, <4 x float> %B) {
1419 ; Using registers other than v0, v1 are possible, but would be odd.
1420 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
1421 ;CHECK: fcmgt {{v[0-9]+}}.4s, v0.4s, v1.4s
1422 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1423 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1424 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1425 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1426    %tmp3 = fcmp ueq <4 x float> %A, %B
1427    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1428         ret <4 x i32> %tmp4
1429 }
1430
1431 define <2 x i64> @fcmueq2xdouble(<2 x double> %A, <2 x double> %B) {
1432 ; Using registers other than v0, v1 are possible, but would be odd.
1433 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
1434 ;CHECK: fcmgt {{v[0-9]+}}.2d, v0.2d, v1.2d
1435 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1436 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1437 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1438 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1439    %tmp3 = fcmp ueq <2 x double> %A, %B
1440    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1441         ret <2 x i64> %tmp4
1442 }
1443
1444 define <2 x i32> @fcmuge2xfloat(<2 x float> %A, <2 x float> %B) {
1445 ; Using registers other than v0, v1 are possible, but would be odd.
1446 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
1447 ;CHECK: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1448 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1449 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1450    %tmp3 = fcmp uge <2 x float> %A, %B
1451    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1452         ret <2 x i32> %tmp4
1453 }
1454
1455 define <4 x i32> @fcmuge4xfloat(<4 x float> %A, <4 x float> %B) {
1456 ; Using registers other than v0, v1 are possible, but would be odd.
1457 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
1458 ;CHECK: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1459 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1460 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1461    %tmp3 = fcmp uge <4 x float> %A, %B
1462    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1463         ret <4 x i32> %tmp4
1464 }
1465
1466 define <2 x i64> @fcmuge2xdouble(<2 x double> %A, <2 x double> %B) {
1467 ; Using registers other than v0, v1 are possible, but would be odd.
1468 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
1469 ;CHECK: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1470 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1471 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1472    %tmp3 = fcmp uge <2 x double> %A, %B
1473    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1474         ret <2 x i64> %tmp4
1475 }
1476
1477 define <2 x i32> @fcmugt2xfloat(<2 x float> %A, <2 x float> %B) {
1478 ; Using registers other than v0, v1 are possible, but would be odd.
1479 ; UGT = ULT with swapped operands, ULT implemented as !OGE.
1480 ;CHECK: fcmge {{v[0-9]+}}.2s, v1.2s, v0.2s
1481 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1482 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1483    %tmp3 = fcmp ugt <2 x float> %A, %B
1484    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1485         ret <2 x i32> %tmp4
1486 }
1487
1488 define <4 x i32> @fcmugt4xfloat(<4 x float> %A, <4 x float> %B) {
1489 ; Using registers other than v0, v1 are possible, but would be odd.
1490 ; UGT = ULT with swapped operands, ULT implemented as !OGE.
1491 ;CHECK: fcmge {{v[0-9]+}}.4s, v1.4s, v0.4s
1492 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1493 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1494    %tmp3 = fcmp ugt <4 x float> %A, %B
1495    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1496         ret <4 x i32> %tmp4
1497 }
1498 define <2 x i64> @fcmugt2xdouble(<2 x double> %A, <2 x double> %B) {
1499 ;CHECK: fcmge {{v[0-9]+}}.2d, v1.2d, v0.2d
1500 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1501 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1502    %tmp3 = fcmp ugt <2 x double> %A, %B
1503    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1504         ret <2 x i64> %tmp4
1505 }
1506
1507 define <2 x i32> @fcmule2xfloat(<2 x float> %A, <2 x float> %B) {
1508 ; Using registers other than v0, v1 are possible, but would be odd.
1509 ; ULE implemented as !OGT.
1510 ;CHECK: fcmgt {{v[0-9]+}}.2s, v0.2s, v1.2s
1511 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1512 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1513    %tmp3 = fcmp ule <2 x float> %A, %B
1514    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1515         ret <2 x i32> %tmp4
1516 }
1517
1518 define <4 x i32> @fcmule4xfloat(<4 x float> %A, <4 x float> %B) {
1519 ; Using registers other than v0, v1 are possible, but would be odd.
1520 ; ULE implemented as !OGT.
1521 ;CHECK: fcmgt {{v[0-9]+}}.4s, v0.4s, v1.4s
1522 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1523 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1524    %tmp3 = fcmp ule <4 x float> %A, %B
1525    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1526         ret <4 x i32> %tmp4
1527 }
1528 define <2 x i64> @fcmule2xdouble(<2 x double> %A, <2 x double> %B) {
1529 ; Using registers other than v0, v1 are possible, but would be odd.
1530 ; ULE implemented as !OGT.
1531 ;CHECK: fcmgt {{v[0-9]+}}.2d, v0.2d, v1.2d
1532 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1533 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1534    %tmp3 = fcmp ule <2 x double> %A, %B
1535    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1536         ret <2 x i64> %tmp4
1537 }
1538
1539 define <2 x i32> @fcmult2xfloat(<2 x float> %A, <2 x float> %B) {
1540 ; Using registers other than v0, v1 are possible, but would be odd.
1541 ; ULT implemented as !OGE.
1542 ;CHECK: fcmge {{v[0-9]+}}.2s, v0.2s, v1.2s
1543 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1544 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1545    %tmp3 = fcmp ult <2 x float> %A, %B
1546    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1547         ret <2 x i32> %tmp4
1548 }
1549
1550 define <4 x i32> @fcmult4xfloat(<4 x float> %A, <4 x float> %B) {
1551 ; Using registers other than v0, v1 are possible, but would be odd.
1552 ; ULT implemented as !OGE.
1553 ;CHECK: fcmge {{v[0-9]+}}.4s, v0.4s, v1.4s
1554 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1555 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1556    %tmp3 = fcmp ult <4 x float> %A, %B
1557    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1558         ret <4 x i32> %tmp4
1559 }
1560 define <2 x i64> @fcmult2xdouble(<2 x double> %A, <2 x double> %B) {
1561 ; Using registers other than v0, v1 are possible, but would be odd.
1562 ; ULT implemented as !OGE.
1563 ;CHECK: fcmge {{v[0-9]+}}.2d, v0.2d, v1.2d
1564 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1565 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1566    %tmp3 = fcmp ult <2 x double> %A, %B
1567    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1568         ret <2 x i64> %tmp4
1569 }
1570
1571 define <2 x i32> @fcmune2xfloat(<2 x float> %A, <2 x float> %B) {
1572 ; Using registers other than v0, v1 are possible, but would be odd.
1573 ; UNE = !OEQ.
1574 ;CHECK: fcmeq {{v[0-9]+}}.2s, v0.2s, v1.2s
1575 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1576 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1577    %tmp3 = fcmp une <2 x float> %A, %B
1578    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1579         ret <2 x i32> %tmp4
1580 }
1581
1582 define <4 x i32> @fcmune4xfloat(<4 x float> %A, <4 x float> %B) {
1583 ; Using registers other than v0, v1 are possible, but would be odd.
1584 ; UNE = !OEQ.
1585 ;CHECK: fcmeq {{v[0-9]+}}.4s, v0.4s, v1.4s
1586 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1587 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1588    %tmp3 = fcmp une <4 x float> %A, %B
1589    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1590         ret <4 x i32> %tmp4
1591 }
1592 define <2 x i64> @fcmune2xdouble(<2 x double> %A, <2 x double> %B) {
1593 ; Using registers other than v0, v1 are possible, but would be odd.
1594 ; UNE = !OEQ.
1595 ;CHECK: fcmeq {{v[0-9]+}}.2d, v0.2d, v1.2d
1596 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1597 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1598    %tmp3 = fcmp une <2 x double> %A, %B
1599    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1600         ret <2 x i64> %tmp4
1601 }
1602
1603 define <2 x i32> @fcmoeqz2xfloat(<2 x float> %A) {
1604 ;CHECK: fcmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1605    %tmp3 = fcmp oeq <2 x float> %A, zeroinitializer
1606    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1607         ret <2 x i32> %tmp4
1608 }
1609
1610 define <4 x i32> @fcmoeqz4xfloat(<4 x float> %A) {
1611 ;CHECK: fcmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1612    %tmp3 = fcmp oeq <4 x float> %A, zeroinitializer
1613    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1614         ret <4 x i32> %tmp4
1615 }
1616 define <2 x i64> @fcmoeqz2xdouble(<2 x double> %A) {
1617 ;CHECK: fcmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1618    %tmp3 = fcmp oeq <2 x double> %A, zeroinitializer
1619    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1620         ret <2 x i64> %tmp4
1621 }
1622
1623
1624 define <2 x i32> @fcmogez2xfloat(<2 x float> %A) {
1625 ;CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1626    %tmp3 = fcmp oge <2 x float> %A, zeroinitializer
1627    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1628         ret <2 x i32> %tmp4
1629 }
1630
1631 define <4 x i32> @fcmogez4xfloat(<4 x float> %A) {
1632 ;CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1633    %tmp3 = fcmp oge <4 x float> %A, zeroinitializer
1634    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1635         ret <4 x i32> %tmp4
1636 }
1637 define <2 x i64> @fcmogez2xdouble(<2 x double> %A) {
1638 ;CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1639    %tmp3 = fcmp oge <2 x double> %A, zeroinitializer
1640    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1641         ret <2 x i64> %tmp4
1642 }
1643
1644 define <2 x i32> @fcmogtz2xfloat(<2 x float> %A) {
1645 ;CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1646    %tmp3 = fcmp ogt <2 x float> %A, zeroinitializer
1647    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1648         ret <2 x i32> %tmp4
1649 }
1650
1651 define <4 x i32> @fcmogtz4xfloat(<4 x float> %A) {
1652 ;CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1653    %tmp3 = fcmp ogt <4 x float> %A, zeroinitializer
1654    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1655         ret <4 x i32> %tmp4
1656 }
1657 define <2 x i64> @fcmogtz2xdouble(<2 x double> %A) {
1658 ;CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1659    %tmp3 = fcmp ogt <2 x double> %A, zeroinitializer
1660    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1661         ret <2 x i64> %tmp4
1662 }
1663
1664 define <2 x i32> @fcmoltz2xfloat(<2 x float> %A) {
1665 ;CHECK: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1666    %tmp3 = fcmp olt <2 x float> %A, zeroinitializer
1667    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1668         ret <2 x i32> %tmp4
1669 }
1670
1671 define <4 x i32> @fcmoltz4xfloat(<4 x float> %A) {
1672 ;CHECK: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1673    %tmp3 = fcmp olt <4 x float> %A, zeroinitializer
1674    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1675         ret <4 x i32> %tmp4
1676 }
1677
1678 define <2 x i64> @fcmoltz2xdouble(<2 x double> %A) {
1679 ;CHECK: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1680    %tmp3 = fcmp olt <2 x double> %A, zeroinitializer
1681    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1682         ret <2 x i64> %tmp4
1683 }
1684
1685 define <2 x i32> @fcmolez2xfloat(<2 x float> %A) {
1686 ;CHECK: fcmle {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1687    %tmp3 = fcmp ole <2 x float> %A, zeroinitializer
1688    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1689         ret <2 x i32> %tmp4
1690 }
1691
1692 define <4 x i32> @fcmolez4xfloat(<4 x float> %A) {
1693 ;CHECK: fcmle {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1694    %tmp3 = fcmp ole <4 x float> %A, zeroinitializer
1695    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1696         ret <4 x i32> %tmp4
1697 }
1698
1699 define <2 x i64> @fcmolez2xdouble(<2 x double> %A) {
1700 ;CHECK: fcmle {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1701    %tmp3 = fcmp ole <2 x double> %A, zeroinitializer
1702    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1703         ret <2 x i64> %tmp4
1704 }
1705
1706 define <2 x i32> @fcmonez2xfloat(<2 x float> %A) {
1707 ; ONE with zero = OLT | OGT
1708 ;CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1709 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1710 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1711    %tmp3 = fcmp one <2 x float> %A, zeroinitializer
1712    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1713         ret <2 x i32> %tmp4
1714 }
1715
1716 define <4 x i32> @fcmonez4xfloat(<4 x float> %A) {
1717 ; ONE with zero = OLT | OGT
1718 ;CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1719 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1720 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1721    %tmp3 = fcmp one <4 x float> %A, zeroinitializer
1722    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1723         ret <4 x i32> %tmp4
1724 }
1725 define <2 x i64> @fcmonez2xdouble(<2 x double> %A) {
1726 ; ONE with zero = OLT | OGT
1727 ;CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1728 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1729 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1730    %tmp3 = fcmp one <2 x double> %A, zeroinitializer
1731    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1732         ret <2 x i64> %tmp4
1733 }
1734
1735 define <2 x i32> @fcmordz2xfloat(<2 x float> %A) {
1736 ; ORD with zero = OLT | OGE
1737 ;CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1738 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1739 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1740    %tmp3 = fcmp ord <2 x float> %A, zeroinitializer
1741    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1742         ret <2 x i32> %tmp4
1743 }
1744
1745 define <4 x i32> @fcmordz4xfloat(<4 x float> %A) {
1746 ; ORD with zero = OLT | OGE
1747 ;CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1748 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1749 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1750    %tmp3 = fcmp ord <4 x float> %A, zeroinitializer
1751    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1752         ret <4 x i32> %tmp4
1753 }
1754 define <2 x i64> @fcmordz2xdouble(<2 x double> %A) {
1755 ; ORD with zero = OLT | OGE
1756 ;CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1757 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1758 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1759    %tmp3 = fcmp ord <2 x double> %A, zeroinitializer
1760    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1761         ret <2 x i64> %tmp4
1762 }
1763
1764 define <2 x i32> @fcmueqz2xfloat(<2 x float> %A) {
1765 ; UEQ with zero = !ONE = !(OLT |OGT)
1766 ;CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1767 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1768 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1769 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1770 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1771    %tmp3 = fcmp ueq <2 x float> %A, zeroinitializer
1772    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1773         ret <2 x i32> %tmp4
1774 }
1775
1776 define <4 x i32> @fcmueqz4xfloat(<4 x float> %A) {
1777 ; UEQ with zero = !ONE = !(OLT |OGT)
1778 ;CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1779 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1780 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1781 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1782 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1783    %tmp3 = fcmp ueq <4 x float> %A, zeroinitializer
1784    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1785         ret <4 x i32> %tmp4
1786 }
1787
1788 define <2 x i64> @fcmueqz2xdouble(<2 x double> %A) {
1789 ; UEQ with zero = !ONE = !(OLT |OGT)
1790 ;CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1791 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1792 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1793 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1794 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1795    %tmp3 = fcmp ueq <2 x double> %A, zeroinitializer
1796    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1797         ret <2 x i64> %tmp4
1798 }
1799
1800 define <2 x i32> @fcmugez2xfloat(<2 x float> %A) {
1801 ; UGE with zero = !OLT
1802 ;CHECK: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1803 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1804 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1805    %tmp3 = fcmp uge <2 x float> %A, zeroinitializer
1806    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1807         ret <2 x i32> %tmp4
1808 }
1809
1810 define <4 x i32> @fcmugez4xfloat(<4 x float> %A) {
1811 ; UGE with zero = !OLT
1812 ;CHECK: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1813 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1814 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1815    %tmp3 = fcmp uge <4 x float> %A, zeroinitializer
1816    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1817         ret <4 x i32> %tmp4
1818 }
1819 define <2 x i64> @fcmugez2xdouble(<2 x double> %A) {
1820 ; UGE with zero = !OLT
1821 ;CHECK: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1822 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1823 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1824    %tmp3 = fcmp uge <2 x double> %A, zeroinitializer
1825    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1826         ret <2 x i64> %tmp4
1827 }
1828
1829 define <2 x i32> @fcmugtz2xfloat(<2 x float> %A) {
1830 ; UGT with zero = !OLE
1831 ;CHECK: fcmle {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1832 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1833 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1834    %tmp3 = fcmp ugt <2 x float> %A, zeroinitializer
1835    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1836         ret <2 x i32> %tmp4
1837 }
1838
1839 define <4 x i32> @fcmugtz4xfloat(<4 x float> %A) {
1840 ; UGT with zero = !OLE
1841 ;CHECK: fcmle {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1842 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1843 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1844    %tmp3 = fcmp ugt <4 x float> %A, zeroinitializer
1845    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1846         ret <4 x i32> %tmp4
1847 }
1848 define <2 x i64> @fcmugtz2xdouble(<2 x double> %A) {
1849 ; UGT with zero = !OLE
1850 ;CHECK: fcmle {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1851 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1852 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1853    %tmp3 = fcmp ugt <2 x double> %A, zeroinitializer
1854    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1855         ret <2 x i64> %tmp4
1856 }
1857
1858 define <2 x i32> @fcmultz2xfloat(<2 x float> %A) {
1859 ; ULT with zero = !OGE
1860 ;CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1861 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1862 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1863    %tmp3 = fcmp ult <2 x float> %A, zeroinitializer
1864    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1865         ret <2 x i32> %tmp4
1866 }
1867
1868 define <4 x i32> @fcmultz4xfloat(<4 x float> %A) {
1869 ;CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1870 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1871 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1872    %tmp3 = fcmp ult <4 x float> %A, zeroinitializer
1873    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1874         ret <4 x i32> %tmp4
1875 }
1876
1877 define <2 x i64> @fcmultz2xdouble(<2 x double> %A) {
1878 ;CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1879 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1880 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1881    %tmp3 = fcmp ult <2 x double> %A, zeroinitializer
1882    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1883         ret <2 x i64> %tmp4
1884 }
1885
1886
1887 define <2 x i32> @fcmulez2xfloat(<2 x float> %A) {
1888 ; ULE with zero = !OGT
1889 ;CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1890 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1891 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1892    %tmp3 = fcmp ule <2 x float> %A, zeroinitializer
1893    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1894         ret <2 x i32> %tmp4
1895 }
1896
1897 define <4 x i32> @fcmulez4xfloat(<4 x float> %A) {
1898 ; ULE with zero = !OGT
1899 ;CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1900 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1901 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1902    %tmp3 = fcmp ule <4 x float> %A, zeroinitializer
1903    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1904         ret <4 x i32> %tmp4
1905 }
1906
1907 define <2 x i64> @fcmulez2xdouble(<2 x double> %A) {
1908 ; ULE with zero = !OGT
1909 ;CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1910 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1911 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1912    %tmp3 = fcmp ule <2 x double> %A, zeroinitializer
1913    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1914         ret <2 x i64> %tmp4
1915 }
1916
1917 define <2 x i32> @fcmunez2xfloat(<2 x float> %A) {
1918 ; UNE with zero = !OEQ with zero
1919 ;CHECK: fcmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1920 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1921 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1922    %tmp3 = fcmp une <2 x float> %A, zeroinitializer
1923    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1924         ret <2 x i32> %tmp4
1925 }
1926
1927 define <4 x i32> @fcmunez4xfloat(<4 x float> %A) {
1928 ; UNE with zero = !OEQ with zero
1929 ;CHECK: fcmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1930 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1931 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1932    %tmp3 = fcmp une <4 x float> %A, zeroinitializer
1933    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1934         ret <4 x i32> %tmp4
1935 }
1936 define <2 x i64> @fcmunez2xdouble(<2 x double> %A) {
1937 ; UNE with zero = !OEQ with zero
1938 ;CHECK: fcmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1939 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1940 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1941    %tmp3 = fcmp une <2 x double> %A, zeroinitializer
1942    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1943         ret <2 x i64> %tmp4
1944 }
1945
1946
1947 define <2 x i32> @fcmunoz2xfloat(<2 x float> %A) {
1948 ; UNO with zero = !ORD = !(OLT | OGE)
1949 ;CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1950 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
1951 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1952 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
1953 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1954    %tmp3 = fcmp uno <2 x float> %A, zeroinitializer
1955    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1956         ret <2 x i32> %tmp4
1957 }
1958
1959 define <4 x i32> @fcmunoz4xfloat(<4 x float> %A) {
1960 ; UNO with zero = !ORD = !(OLT | OGE)
1961 ;CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1962 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
1963 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1964 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1965 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1966    %tmp3 = fcmp uno <4 x float> %A, zeroinitializer
1967    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1968         ret <4 x i32> %tmp4
1969 }
1970
1971 define <2 x i64> @fcmunoz2xdouble(<2 x double> %A) {
1972 ; UNO with zero = !ORD = !(OLT | OGE)
1973 ;CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1974 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
1975 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1976 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
1977 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1978    %tmp3 = fcmp uno <2 x double> %A, zeroinitializer
1979    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1980         ret <2 x i64> %tmp4
1981
1982 }