• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; Test if we can read compare instructions.
2
3; RUN: %p2i -i %s --insts | FileCheck %s
4; RUN:   %p2i -i %s --args -notranslate -timing | \
5; RUN:   FileCheck --check-prefix=NOIR %s
6
7define internal void @IcmpI1(i32 %p1, i32 %p2) {
8entry:
9  %a1 = trunc i32 %p1 to i1
10  %a2 = trunc i32 %p2 to i1
11  %veq = icmp eq i1 %a1, %a2
12  %vne = icmp ne i1 %a1, %a2
13  %vugt = icmp ugt i1 %a1, %a2
14  %vuge = icmp uge i1 %a1, %a2
15  %vult = icmp ult i1 %a1, %a2
16  %vule = icmp ule i1 %a1, %a2
17  %vsgt = icmp sgt i1 %a1, %a2
18  %vsge = icmp sge i1 %a1, %a2
19  %vslt = icmp slt i1 %a1, %a2
20  %vsle = icmp sle i1 %a1, %a2
21  ret void
22}
23
24; CHECK:      define internal void @IcmpI1(i32 %p1, i32 %p2) {
25; CHECK-NEXT: entry:
26; CHECK-NEXT:   %a1 = trunc i32 %p1 to i1
27; CHECK-NEXT:   %a2 = trunc i32 %p2 to i1
28; CHECK-NEXT:   %veq = icmp eq i1 %a1, %a2
29; CHECK-NEXT:   %vne = icmp ne i1 %a1, %a2
30; CHECK-NEXT:   %vugt = icmp ugt i1 %a1, %a2
31; CHECK-NEXT:   %vuge = icmp uge i1 %a1, %a2
32; CHECK-NEXT:   %vult = icmp ult i1 %a1, %a2
33; CHECK-NEXT:   %vule = icmp ule i1 %a1, %a2
34; CHECK-NEXT:   %vsgt = icmp sgt i1 %a1, %a2
35; CHECK-NEXT:   %vsge = icmp sge i1 %a1, %a2
36; CHECK-NEXT:   %vslt = icmp slt i1 %a1, %a2
37; CHECK-NEXT:   %vsle = icmp sle i1 %a1, %a2
38; CHECK-NEXT:   ret void
39; CHECK-NEXT: }
40
41define internal void @IcmpI8(i32 %p1, i32 %p2) {
42entry:
43  %a1 = trunc i32 %p1 to i8
44  %a2 = trunc i32 %p2 to i8
45  %veq = icmp eq i8 %a1, %a2
46  %vne = icmp ne i8 %a1, %a2
47  %vugt = icmp ugt i8 %a1, %a2
48  %vuge = icmp uge i8 %a1, %a2
49  %vult = icmp ult i8 %a1, %a2
50  %vule = icmp ule i8 %a1, %a2
51  %vsgt = icmp sgt i8 %a1, %a2
52  %vsge = icmp sge i8 %a1, %a2
53  %vslt = icmp slt i8 %a1, %a2
54  %vsle = icmp sle i8 %a1, %a2
55  ret void
56}
57
58; CHECK-NEXT: define internal void @IcmpI8(i32 %p1, i32 %p2) {
59; CHECK-NEXT: entry:
60; CHECK-NEXT:   %a1 = trunc i32 %p1 to i8
61; CHECK-NEXT:   %a2 = trunc i32 %p2 to i8
62; CHECK-NEXT:   %veq = icmp eq i8 %a1, %a2
63; CHECK-NEXT:   %vne = icmp ne i8 %a1, %a2
64; CHECK-NEXT:   %vugt = icmp ugt i8 %a1, %a2
65; CHECK-NEXT:   %vuge = icmp uge i8 %a1, %a2
66; CHECK-NEXT:   %vult = icmp ult i8 %a1, %a2
67; CHECK-NEXT:   %vule = icmp ule i8 %a1, %a2
68; CHECK-NEXT:   %vsgt = icmp sgt i8 %a1, %a2
69; CHECK-NEXT:   %vsge = icmp sge i8 %a1, %a2
70; CHECK-NEXT:   %vslt = icmp slt i8 %a1, %a2
71; CHECK-NEXT:   %vsle = icmp sle i8 %a1, %a2
72; CHECK-NEXT:   ret void
73; CHECK-NEXT: }
74
75define internal void @IcmpI16(i32 %p1, i32 %p2) {
76entry:
77  %a1 = trunc i32 %p1 to i16
78  %a2 = trunc i32 %p2 to i16
79  %veq = icmp eq i16 %a1, %a2
80  %vne = icmp ne i16 %a1, %a2
81  %vugt = icmp ugt i16 %a1, %a2
82  %vuge = icmp uge i16 %a1, %a2
83  %vult = icmp ult i16 %a1, %a2
84  %vule = icmp ule i16 %a1, %a2
85  %vsgt = icmp sgt i16 %a1, %a2
86  %vsge = icmp sge i16 %a1, %a2
87  %vslt = icmp slt i16 %a1, %a2
88  %vsle = icmp sle i16 %a1, %a2
89  ret void
90}
91
92; CHECK-NEXT: define internal void @IcmpI16(i32 %p1, i32 %p2) {
93; CHECK-NEXT: entry:
94; CHECK-NEXT:   %a1 = trunc i32 %p1 to i16
95; CHECK-NEXT:   %a2 = trunc i32 %p2 to i16
96; CHECK-NEXT:   %veq = icmp eq i16 %a1, %a2
97; CHECK-NEXT:   %vne = icmp ne i16 %a1, %a2
98; CHECK-NEXT:   %vugt = icmp ugt i16 %a1, %a2
99; CHECK-NEXT:   %vuge = icmp uge i16 %a1, %a2
100; CHECK-NEXT:   %vult = icmp ult i16 %a1, %a2
101; CHECK-NEXT:   %vule = icmp ule i16 %a1, %a2
102; CHECK-NEXT:   %vsgt = icmp sgt i16 %a1, %a2
103; CHECK-NEXT:   %vsge = icmp sge i16 %a1, %a2
104; CHECK-NEXT:   %vslt = icmp slt i16 %a1, %a2
105; CHECK-NEXT:   %vsle = icmp sle i16 %a1, %a2
106; CHECK-NEXT:   ret void
107; CHECK-NEXT: }
108
109define internal void @IcmpI32(i32 %a1, i32 %a2) {
110entry:
111  %veq = icmp eq i32 %a1, %a2
112  %vne = icmp ne i32 %a1, %a2
113  %vugt = icmp ugt i32 %a1, %a2
114  %vuge = icmp uge i32 %a1, %a2
115  %vult = icmp ult i32 %a1, %a2
116  %vule = icmp ule i32 %a1, %a2
117  %vsgt = icmp sgt i32 %a1, %a2
118  %vsge = icmp sge i32 %a1, %a2
119  %vslt = icmp slt i32 %a1, %a2
120  %vsle = icmp sle i32 %a1, %a2
121  ret void
122}
123
124; CHECK-NEXT: define internal void @IcmpI32(i32 %a1, i32 %a2) {
125; CHECK-NEXT: entry:
126; CHECK-NEXT:   %veq = icmp eq i32 %a1, %a2
127; CHECK-NEXT:   %vne = icmp ne i32 %a1, %a2
128; CHECK-NEXT:   %vugt = icmp ugt i32 %a1, %a2
129; CHECK-NEXT:   %vuge = icmp uge i32 %a1, %a2
130; CHECK-NEXT:   %vult = icmp ult i32 %a1, %a2
131; CHECK-NEXT:   %vule = icmp ule i32 %a1, %a2
132; CHECK-NEXT:   %vsgt = icmp sgt i32 %a1, %a2
133; CHECK-NEXT:   %vsge = icmp sge i32 %a1, %a2
134; CHECK-NEXT:   %vslt = icmp slt i32 %a1, %a2
135; CHECK-NEXT:   %vsle = icmp sle i32 %a1, %a2
136; CHECK-NEXT:   ret void
137; CHECK-NEXT: }
138
139define internal void @IcmpI64(i64 %a1, i64 %a2) {
140entry:
141  %veq = icmp eq i64 %a1, %a2
142  %vne = icmp ne i64 %a1, %a2
143  %vugt = icmp ugt i64 %a1, %a2
144  %vuge = icmp uge i64 %a1, %a2
145  %vult = icmp ult i64 %a1, %a2
146  %vule = icmp ule i64 %a1, %a2
147  %vsgt = icmp sgt i64 %a1, %a2
148  %vsge = icmp sge i64 %a1, %a2
149  %vslt = icmp slt i64 %a1, %a2
150  %vsle = icmp sle i64 %a1, %a2
151  ret void
152}
153
154; CHECK-NEXT: define internal void @IcmpI64(i64 %a1, i64 %a2) {
155; CHECK-NEXT: entry:
156; CHECK-NEXT:   %veq = icmp eq i64 %a1, %a2
157; CHECK-NEXT:   %vne = icmp ne i64 %a1, %a2
158; CHECK-NEXT:   %vugt = icmp ugt i64 %a1, %a2
159; CHECK-NEXT:   %vuge = icmp uge i64 %a1, %a2
160; CHECK-NEXT:   %vult = icmp ult i64 %a1, %a2
161; CHECK-NEXT:   %vule = icmp ule i64 %a1, %a2
162; CHECK-NEXT:   %vsgt = icmp sgt i64 %a1, %a2
163; CHECK-NEXT:   %vsge = icmp sge i64 %a1, %a2
164; CHECK-NEXT:   %vslt = icmp slt i64 %a1, %a2
165; CHECK-NEXT:   %vsle = icmp sle i64 %a1, %a2
166; CHECK-NEXT:   ret void
167; CHECK-NEXT: }
168
169define internal <4 x i1> @IcmpV4xI1(<4 x i1> %a1, <4 x i1> %a2) {
170entry:
171  %veq = icmp eq <4 x i1> %a1, %a2
172  %vne = icmp ne <4 x i1> %a1, %a2
173  %vugt = icmp ugt <4 x i1> %a1, %a2
174  %vuge = icmp uge <4 x i1> %a1, %a2
175  %vult = icmp ult <4 x i1> %a1, %a2
176  %vule = icmp ule <4 x i1> %a1, %a2
177  %vsgt = icmp sgt <4 x i1> %a1, %a2
178  %vsge = icmp sge <4 x i1> %a1, %a2
179  %vslt = icmp slt <4 x i1> %a1, %a2
180  %vsle = icmp sle <4 x i1> %a1, %a2
181  ret <4 x i1> %veq
182}
183
184; CHECK-NEXT: define internal <4 x i1> @IcmpV4xI1(<4 x i1> %a1, <4 x i1> %a2) {
185; CHECK-NEXT: entry:
186; CHECK-NEXT:   %veq = icmp eq <4 x i1> %a1, %a2
187; CHECK-NEXT:   %vne = icmp ne <4 x i1> %a1, %a2
188; CHECK-NEXT:   %vugt = icmp ugt <4 x i1> %a1, %a2
189; CHECK-NEXT:   %vuge = icmp uge <4 x i1> %a1, %a2
190; CHECK-NEXT:   %vult = icmp ult <4 x i1> %a1, %a2
191; CHECK-NEXT:   %vule = icmp ule <4 x i1> %a1, %a2
192; CHECK-NEXT:   %vsgt = icmp sgt <4 x i1> %a1, %a2
193; CHECK-NEXT:   %vsge = icmp sge <4 x i1> %a1, %a2
194; CHECK-NEXT:   %vslt = icmp slt <4 x i1> %a1, %a2
195; CHECK-NEXT:   %vsle = icmp sle <4 x i1> %a1, %a2
196; CHECK-NEXT:   ret <4 x i1> %veq
197; CHECK-NEXT: }
198
199define internal <8 x i1> @IcmpV8xI1(<8 x i1> %a1, <8 x i1> %a2) {
200entry:
201  %veq = icmp eq <8 x i1> %a1, %a2
202  %vne = icmp ne <8 x i1> %a1, %a2
203  %vugt = icmp ugt <8 x i1> %a1, %a2
204  %vuge = icmp uge <8 x i1> %a1, %a2
205  %vult = icmp ult <8 x i1> %a1, %a2
206  %vule = icmp ule <8 x i1> %a1, %a2
207  %vsgt = icmp sgt <8 x i1> %a1, %a2
208  %vsge = icmp sge <8 x i1> %a1, %a2
209  %vslt = icmp slt <8 x i1> %a1, %a2
210  %vsle = icmp sle <8 x i1> %a1, %a2
211  ret <8 x i1> %veq
212}
213
214; CHECK-NEXT: define internal <8 x i1> @IcmpV8xI1(<8 x i1> %a1, <8 x i1> %a2) {
215; CHECK-NEXT: entry:
216; CHECK-NEXT:   %veq = icmp eq <8 x i1> %a1, %a2
217; CHECK-NEXT:   %vne = icmp ne <8 x i1> %a1, %a2
218; CHECK-NEXT:   %vugt = icmp ugt <8 x i1> %a1, %a2
219; CHECK-NEXT:   %vuge = icmp uge <8 x i1> %a1, %a2
220; CHECK-NEXT:   %vult = icmp ult <8 x i1> %a1, %a2
221; CHECK-NEXT:   %vule = icmp ule <8 x i1> %a1, %a2
222; CHECK-NEXT:   %vsgt = icmp sgt <8 x i1> %a1, %a2
223; CHECK-NEXT:   %vsge = icmp sge <8 x i1> %a1, %a2
224; CHECK-NEXT:   %vslt = icmp slt <8 x i1> %a1, %a2
225; CHECK-NEXT:   %vsle = icmp sle <8 x i1> %a1, %a2
226; CHECK-NEXT:   ret <8 x i1> %veq
227; CHECK-NEXT: }
228
229define internal <16 x i1> @IcmpV16xI1(<16 x i1> %a1, <16 x i1> %a2) {
230entry:
231  %veq = icmp eq <16 x i1> %a1, %a2
232  %vne = icmp ne <16 x i1> %a1, %a2
233  %vugt = icmp ugt <16 x i1> %a1, %a2
234  %vuge = icmp uge <16 x i1> %a1, %a2
235  %vult = icmp ult <16 x i1> %a1, %a2
236  %vule = icmp ule <16 x i1> %a1, %a2
237  %vsgt = icmp sgt <16 x i1> %a1, %a2
238  %vsge = icmp sge <16 x i1> %a1, %a2
239  %vslt = icmp slt <16 x i1> %a1, %a2
240  %vsle = icmp sle <16 x i1> %a1, %a2
241  ret <16 x i1> %veq
242}
243
244; CHECK-NEXT: define internal <16 x i1> @IcmpV16xI1(<16 x i1> %a1, <16 x i1> %a2) {
245; CHECK-NEXT: entry:
246; CHECK-NEXT:   %veq = icmp eq <16 x i1> %a1, %a2
247; CHECK-NEXT:   %vne = icmp ne <16 x i1> %a1, %a2
248; CHECK-NEXT:   %vugt = icmp ugt <16 x i1> %a1, %a2
249; CHECK-NEXT:   %vuge = icmp uge <16 x i1> %a1, %a2
250; CHECK-NEXT:   %vult = icmp ult <16 x i1> %a1, %a2
251; CHECK-NEXT:   %vule = icmp ule <16 x i1> %a1, %a2
252; CHECK-NEXT:   %vsgt = icmp sgt <16 x i1> %a1, %a2
253; CHECK-NEXT:   %vsge = icmp sge <16 x i1> %a1, %a2
254; CHECK-NEXT:   %vslt = icmp slt <16 x i1> %a1, %a2
255; CHECK-NEXT:   %vsle = icmp sle <16 x i1> %a1, %a2
256; CHECK-NEXT:   ret <16 x i1> %veq
257; CHECK-NEXT: }
258
259define internal <16 x i1> @IcmpV16xI8(<16 x i8> %a1, <16 x i8> %a2) {
260entry:
261  %veq = icmp eq <16 x i8> %a1, %a2
262  %vne = icmp ne <16 x i8> %a1, %a2
263  %vugt = icmp ugt <16 x i8> %a1, %a2
264  %vuge = icmp uge <16 x i8> %a1, %a2
265  %vult = icmp ult <16 x i8> %a1, %a2
266  %vule = icmp ule <16 x i8> %a1, %a2
267  %vsgt = icmp sgt <16 x i8> %a1, %a2
268  %vsge = icmp sge <16 x i8> %a1, %a2
269  %vslt = icmp slt <16 x i8> %a1, %a2
270  %vsle = icmp sle <16 x i8> %a1, %a2
271  ret <16 x i1> %veq
272}
273
274; CHECK-NEXT: define internal <16 x i1> @IcmpV16xI8(<16 x i8> %a1, <16 x i8> %a2) {
275; CHECK-NEXT: entry:
276; CHECK-NEXT:   %veq = icmp eq <16 x i8> %a1, %a2
277; CHECK-NEXT:   %vne = icmp ne <16 x i8> %a1, %a2
278; CHECK-NEXT:   %vugt = icmp ugt <16 x i8> %a1, %a2
279; CHECK-NEXT:   %vuge = icmp uge <16 x i8> %a1, %a2
280; CHECK-NEXT:   %vult = icmp ult <16 x i8> %a1, %a2
281; CHECK-NEXT:   %vule = icmp ule <16 x i8> %a1, %a2
282; CHECK-NEXT:   %vsgt = icmp sgt <16 x i8> %a1, %a2
283; CHECK-NEXT:   %vsge = icmp sge <16 x i8> %a1, %a2
284; CHECK-NEXT:   %vslt = icmp slt <16 x i8> %a1, %a2
285; CHECK-NEXT:   %vsle = icmp sle <16 x i8> %a1, %a2
286; CHECK-NEXT:   ret <16 x i1> %veq
287; CHECK-NEXT: }
288
289define internal <8 x i1> @IcmpV8xI16(<8 x i16> %a1, <8 x i16> %a2) {
290entry:
291  %veq = icmp eq <8 x i16> %a1, %a2
292  %vne = icmp ne <8 x i16> %a1, %a2
293  %vugt = icmp ugt <8 x i16> %a1, %a2
294  %vuge = icmp uge <8 x i16> %a1, %a2
295  %vult = icmp ult <8 x i16> %a1, %a2
296  %vule = icmp ule <8 x i16> %a1, %a2
297  %vsgt = icmp sgt <8 x i16> %a1, %a2
298  %vsge = icmp sge <8 x i16> %a1, %a2
299  %vslt = icmp slt <8 x i16> %a1, %a2
300  %vsle = icmp sle <8 x i16> %a1, %a2
301  ret <8 x i1> %veq
302}
303
304; CHECK-NEXT: define internal <8 x i1> @IcmpV8xI16(<8 x i16> %a1, <8 x i16> %a2) {
305; CHECK-NEXT: entry:
306; CHECK-NEXT:   %veq = icmp eq <8 x i16> %a1, %a2
307; CHECK-NEXT:   %vne = icmp ne <8 x i16> %a1, %a2
308; CHECK-NEXT:   %vugt = icmp ugt <8 x i16> %a1, %a2
309; CHECK-NEXT:   %vuge = icmp uge <8 x i16> %a1, %a2
310; CHECK-NEXT:   %vult = icmp ult <8 x i16> %a1, %a2
311; CHECK-NEXT:   %vule = icmp ule <8 x i16> %a1, %a2
312; CHECK-NEXT:   %vsgt = icmp sgt <8 x i16> %a1, %a2
313; CHECK-NEXT:   %vsge = icmp sge <8 x i16> %a1, %a2
314; CHECK-NEXT:   %vslt = icmp slt <8 x i16> %a1, %a2
315; CHECK-NEXT:   %vsle = icmp sle <8 x i16> %a1, %a2
316; CHECK-NEXT:   ret <8 x i1> %veq
317; CHECK-NEXT: }
318
319define internal <4 x i1> @IcmpV4xI32(<4 x i32> %a1, <4 x i32> %a2) {
320entry:
321  %veq = icmp eq <4 x i32> %a1, %a2
322  %vne = icmp ne <4 x i32> %a1, %a2
323  %vugt = icmp ugt <4 x i32> %a1, %a2
324  %vuge = icmp uge <4 x i32> %a1, %a2
325  %vult = icmp ult <4 x i32> %a1, %a2
326  %vule = icmp ule <4 x i32> %a1, %a2
327  %vsgt = icmp sgt <4 x i32> %a1, %a2
328  %vsge = icmp sge <4 x i32> %a1, %a2
329  %vslt = icmp slt <4 x i32> %a1, %a2
330  %vsle = icmp sle <4 x i32> %a1, %a2
331  ret <4 x i1> %veq
332}
333
334; CHECK-NEXT: define internal <4 x i1> @IcmpV4xI32(<4 x i32> %a1, <4 x i32> %a2) {
335; CHECK-NEXT: entry:
336; CHECK-NEXT:   %veq = icmp eq <4 x i32> %a1, %a2
337; CHECK-NEXT:   %vne = icmp ne <4 x i32> %a1, %a2
338; CHECK-NEXT:   %vugt = icmp ugt <4 x i32> %a1, %a2
339; CHECK-NEXT:   %vuge = icmp uge <4 x i32> %a1, %a2
340; CHECK-NEXT:   %vult = icmp ult <4 x i32> %a1, %a2
341; CHECK-NEXT:   %vule = icmp ule <4 x i32> %a1, %a2
342; CHECK-NEXT:   %vsgt = icmp sgt <4 x i32> %a1, %a2
343; CHECK-NEXT:   %vsge = icmp sge <4 x i32> %a1, %a2
344; CHECK-NEXT:   %vslt = icmp slt <4 x i32> %a1, %a2
345; CHECK-NEXT:   %vsle = icmp sle <4 x i32> %a1, %a2
346; CHECK-NEXT:   ret <4 x i1> %veq
347; CHECK-NEXT: }
348
349define internal void @FcmpFloat(float %a1, float %a2) {
350entry:
351  %vfalse = fcmp false float %a1, %a2
352  %voeq = fcmp oeq float %a1, %a2
353  %vogt = fcmp ogt float %a1, %a2
354  %voge = fcmp oge float %a1, %a2
355  %volt = fcmp olt float %a1, %a2
356  %vole = fcmp ole float %a1, %a2
357  %vone = fcmp one float %a1, %a2
358  %ord = fcmp ord float %a1, %a2
359  %vueq = fcmp ueq float %a1, %a2
360  %vugt = fcmp ugt float %a1, %a2
361  %vuge = fcmp uge float %a1, %a2
362  %vult = fcmp ult float %a1, %a2
363  %vule = fcmp ule float %a1, %a2
364  %vune = fcmp une float %a1, %a2
365  %vuno = fcmp uno float %a1, %a2
366  %vtrue = fcmp true float %a1, %a2
367  ret void
368}
369
370; CHECK-NEXT: define internal void @FcmpFloat(float %a1, float %a2) {
371; CHECK-NEXT: entry:
372; CHECK-NEXT:   %vfalse = fcmp false float %a1, %a2
373; CHECK-NEXT:   %voeq = fcmp oeq float %a1, %a2
374; CHECK-NEXT:   %vogt = fcmp ogt float %a1, %a2
375; CHECK-NEXT:   %voge = fcmp oge float %a1, %a2
376; CHECK-NEXT:   %volt = fcmp olt float %a1, %a2
377; CHECK-NEXT:   %vole = fcmp ole float %a1, %a2
378; CHECK-NEXT:   %vone = fcmp one float %a1, %a2
379; CHECK-NEXT:   %ord = fcmp ord float %a1, %a2
380; CHECK-NEXT:   %vueq = fcmp ueq float %a1, %a2
381; CHECK-NEXT:   %vugt = fcmp ugt float %a1, %a2
382; CHECK-NEXT:   %vuge = fcmp uge float %a1, %a2
383; CHECK-NEXT:   %vult = fcmp ult float %a1, %a2
384; CHECK-NEXT:   %vule = fcmp ule float %a1, %a2
385; CHECK-NEXT:   %vune = fcmp une float %a1, %a2
386; CHECK-NEXT:   %vuno = fcmp uno float %a1, %a2
387; CHECK-NEXT:   %vtrue = fcmp true float %a1, %a2
388; CHECK-NEXT:   ret void
389; CHECK-NEXT: }
390
391define internal void @FcmpDouble(double %a1, double %a2) {
392entry:
393  %vfalse = fcmp false double %a1, %a2
394  %voeq = fcmp oeq double %a1, %a2
395  %vogt = fcmp ogt double %a1, %a2
396  %voge = fcmp oge double %a1, %a2
397  %volt = fcmp olt double %a1, %a2
398  %vole = fcmp ole double %a1, %a2
399  %vone = fcmp one double %a1, %a2
400  %ord = fcmp ord double %a1, %a2
401  %vueq = fcmp ueq double %a1, %a2
402  %vugt = fcmp ugt double %a1, %a2
403  %vuge = fcmp uge double %a1, %a2
404  %vult = fcmp ult double %a1, %a2
405  %vule = fcmp ule double %a1, %a2
406  %vune = fcmp une double %a1, %a2
407  %vuno = fcmp uno double %a1, %a2
408  %vtrue = fcmp true double %a1, %a2
409  ret void
410}
411
412; CHECK-NEXT: define internal void @FcmpDouble(double %a1, double %a2) {
413; CHECK-NEXT: entry:
414; CHECK-NEXT:   %vfalse = fcmp false double %a1, %a2
415; CHECK-NEXT:   %voeq = fcmp oeq double %a1, %a2
416; CHECK-NEXT:   %vogt = fcmp ogt double %a1, %a2
417; CHECK-NEXT:   %voge = fcmp oge double %a1, %a2
418; CHECK-NEXT:   %volt = fcmp olt double %a1, %a2
419; CHECK-NEXT:   %vole = fcmp ole double %a1, %a2
420; CHECK-NEXT:   %vone = fcmp one double %a1, %a2
421; CHECK-NEXT:   %ord = fcmp ord double %a1, %a2
422; CHECK-NEXT:   %vueq = fcmp ueq double %a1, %a2
423; CHECK-NEXT:   %vugt = fcmp ugt double %a1, %a2
424; CHECK-NEXT:   %vuge = fcmp uge double %a1, %a2
425; CHECK-NEXT:   %vult = fcmp ult double %a1, %a2
426; CHECK-NEXT:   %vule = fcmp ule double %a1, %a2
427; CHECK-NEXT:   %vune = fcmp une double %a1, %a2
428; CHECK-NEXT:   %vuno = fcmp uno double %a1, %a2
429; CHECK-NEXT:   %vtrue = fcmp true double %a1, %a2
430; CHECK-NEXT:   ret void
431; CHECK-NEXT: }
432
433define internal <4 x i1> @FcmpV4xFloat(<4 x float> %a1, <4 x float> %a2) {
434entry:
435  %vfalse = fcmp false <4 x float> %a1, %a2
436  %voeq = fcmp oeq <4 x float> %a1, %a2
437  %vogt = fcmp ogt <4 x float> %a1, %a2
438  %voge = fcmp oge <4 x float> %a1, %a2
439  %volt = fcmp olt <4 x float> %a1, %a2
440  %vole = fcmp ole <4 x float> %a1, %a2
441  %vone = fcmp one <4 x float> %a1, %a2
442  %ord = fcmp ord <4 x float> %a1, %a2
443  %vueq = fcmp ueq <4 x float> %a1, %a2
444  %vugt = fcmp ugt <4 x float> %a1, %a2
445  %vuge = fcmp uge <4 x float> %a1, %a2
446  %vult = fcmp ult <4 x float> %a1, %a2
447  %vule = fcmp ule <4 x float> %a1, %a2
448  %vune = fcmp une <4 x float> %a1, %a2
449  %vuno = fcmp uno <4 x float> %a1, %a2
450  %vtrue = fcmp true <4 x float> %a1, %a2
451  ret <4 x i1> %voeq
452}
453
454; CHECK-NEXT: define internal <4 x i1> @FcmpV4xFloat(<4 x float> %a1, <4 x float> %a2) {
455; CHECK-NEXT: entry:
456; CHECK-NEXT:   %vfalse = fcmp false <4 x float> %a1, %a2
457; CHECK-NEXT:   %voeq = fcmp oeq <4 x float> %a1, %a2
458; CHECK-NEXT:   %vogt = fcmp ogt <4 x float> %a1, %a2
459; CHECK-NEXT:   %voge = fcmp oge <4 x float> %a1, %a2
460; CHECK-NEXT:   %volt = fcmp olt <4 x float> %a1, %a2
461; CHECK-NEXT:   %vole = fcmp ole <4 x float> %a1, %a2
462; CHECK-NEXT:   %vone = fcmp one <4 x float> %a1, %a2
463; CHECK-NEXT:   %ord = fcmp ord <4 x float> %a1, %a2
464; CHECK-NEXT:   %vueq = fcmp ueq <4 x float> %a1, %a2
465; CHECK-NEXT:   %vugt = fcmp ugt <4 x float> %a1, %a2
466; CHECK-NEXT:   %vuge = fcmp uge <4 x float> %a1, %a2
467; CHECK-NEXT:   %vult = fcmp ult <4 x float> %a1, %a2
468; CHECK-NEXT:   %vule = fcmp ule <4 x float> %a1, %a2
469; CHECK-NEXT:   %vune = fcmp une <4 x float> %a1, %a2
470; CHECK-NEXT:   %vuno = fcmp uno <4 x float> %a1, %a2
471; CHECK-NEXT:   %vtrue = fcmp true <4 x float> %a1, %a2
472; CHECK-NEXT:   ret <4 x i1> %voeq
473; CHECK-NEXT: }
474
475; NOIR: Total across all functions
476