xref: /llvm-project/llvm/test/CodeGen/LoongArch/is_fpclass_f64.ll (revision 0a692b6b9632e1460f9e0e983196f2be5879acd1)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2; RUN: llc --mtriple=loongarch32 --mattr=+d --verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK32
3; RUN: llc --mtriple=loongarch64 --mattr=+d --verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK64
4
5define i1 @isnan_d(double %x) {
6; CHECK32-LABEL: isnan_d:
7; CHECK32:       # %bb.0: # %entry
8; CHECK32-NEXT:    fclass.d $fa0, $fa0
9; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
10; CHECK32-NEXT:    andi $a0, $a0, 3
11; CHECK32-NEXT:    sltu $a0, $zero, $a0
12; CHECK32-NEXT:    ret
13;
14; CHECK64-LABEL: isnan_d:
15; CHECK64:       # %bb.0: # %entry
16; CHECK64-NEXT:    fclass.d $fa0, $fa0
17; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
18; CHECK64-NEXT:    andi $a0, $a0, 3
19; CHECK64-NEXT:    sltu $a0, $zero, $a0
20; CHECK64-NEXT:    ret
21entry:
22  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 3)  ; "nan"
23  ret i1 %0
24}
25
26define i1 @isnot_nan_d(double %x) {
27; CHECK32-LABEL: isnot_nan_d:
28; CHECK32:       # %bb.0: # %entry
29; CHECK32-NEXT:    fclass.d $fa0, $fa0
30; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
31; CHECK32-NEXT:    andi $a0, $a0, 1020
32; CHECK32-NEXT:    sltu $a0, $zero, $a0
33; CHECK32-NEXT:    ret
34;
35; CHECK64-LABEL: isnot_nan_d:
36; CHECK64:       # %bb.0: # %entry
37; CHECK64-NEXT:    fclass.d $fa0, $fa0
38; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
39; CHECK64-NEXT:    andi $a0, $a0, 1020
40; CHECK64-NEXT:    sltu $a0, $zero, $a0
41; CHECK64-NEXT:    ret
42entry:
43  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1020)  ; 0x3fc = "zero|subnormal|normal|inf"
44  ret i1 %0
45}
46
47define i1 @issignaling_d(double %x) {
48; CHECK32-LABEL: issignaling_d:
49; CHECK32:       # %bb.0: # %entry
50; CHECK32-NEXT:    fclass.d $fa0, $fa0
51; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
52; CHECK32-NEXT:    andi $a0, $a0, 1
53; CHECK32-NEXT:    sltu $a0, $zero, $a0
54; CHECK32-NEXT:    ret
55;
56; CHECK64-LABEL: issignaling_d:
57; CHECK64:       # %bb.0: # %entry
58; CHECK64-NEXT:    fclass.d $fa0, $fa0
59; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
60; CHECK64-NEXT:    andi $a0, $a0, 1
61; CHECK64-NEXT:    sltu $a0, $zero, $a0
62; CHECK64-NEXT:    ret
63entry:
64  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1)  ; "snan"
65  ret i1 %0
66}
67
68define i1 @not_issignaling_d(double %x) {
69; CHECK32-LABEL: not_issignaling_d:
70; CHECK32:       # %bb.0: # %entry
71; CHECK32-NEXT:    fclass.d $fa0, $fa0
72; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
73; CHECK32-NEXT:    andi $a0, $a0, 1022
74; CHECK32-NEXT:    sltu $a0, $zero, $a0
75; CHECK32-NEXT:    ret
76;
77; CHECK64-LABEL: not_issignaling_d:
78; CHECK64:       # %bb.0: # %entry
79; CHECK64-NEXT:    fclass.d $fa0, $fa0
80; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
81; CHECK64-NEXT:    andi $a0, $a0, 1022
82; CHECK64-NEXT:    sltu $a0, $zero, $a0
83; CHECK64-NEXT:    ret
84entry:
85  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1022)  ; ~"snan"
86  ret i1 %0
87}
88
89define i1 @isquiet_d(double %x) {
90; CHECK32-LABEL: isquiet_d:
91; CHECK32:       # %bb.0: # %entry
92; CHECK32-NEXT:    fclass.d $fa0, $fa0
93; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
94; CHECK32-NEXT:    andi $a0, $a0, 2
95; CHECK32-NEXT:    sltu $a0, $zero, $a0
96; CHECK32-NEXT:    ret
97;
98; CHECK64-LABEL: isquiet_d:
99; CHECK64:       # %bb.0: # %entry
100; CHECK64-NEXT:    fclass.d $fa0, $fa0
101; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
102; CHECK64-NEXT:    andi $a0, $a0, 2
103; CHECK64-NEXT:    sltu $a0, $zero, $a0
104; CHECK64-NEXT:    ret
105entry:
106  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 2)  ; "qnan"
107  ret i1 %0
108}
109
110define i1 @not_isquiet_d(double %x) {
111; CHECK32-LABEL: not_isquiet_d:
112; CHECK32:       # %bb.0: # %entry
113; CHECK32-NEXT:    fclass.d $fa0, $fa0
114; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
115; CHECK32-NEXT:    andi $a0, $a0, 1021
116; CHECK32-NEXT:    sltu $a0, $zero, $a0
117; CHECK32-NEXT:    ret
118;
119; CHECK64-LABEL: not_isquiet_d:
120; CHECK64:       # %bb.0: # %entry
121; CHECK64-NEXT:    fclass.d $fa0, $fa0
122; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
123; CHECK64-NEXT:    andi $a0, $a0, 1021
124; CHECK64-NEXT:    sltu $a0, $zero, $a0
125; CHECK64-NEXT:    ret
126entry:
127  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1021)  ; ~"qnan"
128  ret i1 %0
129}
130
131define i1 @isinf_d(double %x) {
132; CHECK32-LABEL: isinf_d:
133; CHECK32:       # %bb.0: # %entry
134; CHECK32-NEXT:    fclass.d $fa0, $fa0
135; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
136; CHECK32-NEXT:    andi $a0, $a0, 68
137; CHECK32-NEXT:    sltu $a0, $zero, $a0
138; CHECK32-NEXT:    ret
139;
140; CHECK64-LABEL: isinf_d:
141; CHECK64:       # %bb.0: # %entry
142; CHECK64-NEXT:    fclass.d $fa0, $fa0
143; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
144; CHECK64-NEXT:    andi $a0, $a0, 68
145; CHECK64-NEXT:    sltu $a0, $zero, $a0
146; CHECK64-NEXT:    ret
147entry:
148  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 516)  ; 0x204 = "inf"
149  ret i1 %0
150}
151
152define i1 @not_isinf_d(double %x) {
153; CHECK32-LABEL: not_isinf_d:
154; CHECK32:       # %bb.0: # %entry
155; CHECK32-NEXT:    fclass.d $fa0, $fa0
156; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
157; CHECK32-NEXT:    andi $a0, $a0, 955
158; CHECK32-NEXT:    sltu $a0, $zero, $a0
159; CHECK32-NEXT:    ret
160;
161; CHECK64-LABEL: not_isinf_d:
162; CHECK64:       # %bb.0: # %entry
163; CHECK64-NEXT:    fclass.d $fa0, $fa0
164; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
165; CHECK64-NEXT:    andi $a0, $a0, 955
166; CHECK64-NEXT:    sltu $a0, $zero, $a0
167; CHECK64-NEXT:    ret
168entry:
169  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 507)  ; ~0x204 = "~inf"
170  ret i1 %0
171}
172
173define i1 @is_plus_inf_d(double %x) {
174; CHECK32-LABEL: is_plus_inf_d:
175; CHECK32:       # %bb.0: # %entry
176; CHECK32-NEXT:    fclass.d $fa0, $fa0
177; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
178; CHECK32-NEXT:    andi $a0, $a0, 64
179; CHECK32-NEXT:    sltu $a0, $zero, $a0
180; CHECK32-NEXT:    ret
181;
182; CHECK64-LABEL: is_plus_inf_d:
183; CHECK64:       # %bb.0: # %entry
184; CHECK64-NEXT:    fclass.d $fa0, $fa0
185; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
186; CHECK64-NEXT:    andi $a0, $a0, 64
187; CHECK64-NEXT:    sltu $a0, $zero, $a0
188; CHECK64-NEXT:    ret
189entry:
190  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 512)  ; 0x200 = "+inf"
191  ret i1 %0
192}
193
194define i1 @is_minus_inf_d(double %x) {
195; CHECK32-LABEL: is_minus_inf_d:
196; CHECK32:       # %bb.0: # %entry
197; CHECK32-NEXT:    fclass.d $fa0, $fa0
198; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
199; CHECK32-NEXT:    andi $a0, $a0, 4
200; CHECK32-NEXT:    sltu $a0, $zero, $a0
201; CHECK32-NEXT:    ret
202;
203; CHECK64-LABEL: is_minus_inf_d:
204; CHECK64:       # %bb.0: # %entry
205; CHECK64-NEXT:    fclass.d $fa0, $fa0
206; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
207; CHECK64-NEXT:    andi $a0, $a0, 4
208; CHECK64-NEXT:    sltu $a0, $zero, $a0
209; CHECK64-NEXT:    ret
210entry:
211  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 4)  ; "-inf"
212  ret i1 %0
213}
214
215define i1 @not_is_minus_inf_d(double %x) {
216; CHECK32-LABEL: not_is_minus_inf_d:
217; CHECK32:       # %bb.0: # %entry
218; CHECK32-NEXT:    fclass.d $fa0, $fa0
219; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
220; CHECK32-NEXT:    andi $a0, $a0, 1019
221; CHECK32-NEXT:    sltu $a0, $zero, $a0
222; CHECK32-NEXT:    ret
223;
224; CHECK64-LABEL: not_is_minus_inf_d:
225; CHECK64:       # %bb.0: # %entry
226; CHECK64-NEXT:    fclass.d $fa0, $fa0
227; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
228; CHECK64-NEXT:    andi $a0, $a0, 1019
229; CHECK64-NEXT:    sltu $a0, $zero, $a0
230; CHECK64-NEXT:    ret
231entry:
232  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1019)  ; ~"-inf"
233  ret i1 %0
234}
235
236define i1 @isfinite_d(double %x) {
237; CHECK32-LABEL: isfinite_d:
238; CHECK32:       # %bb.0: # %entry
239; CHECK32-NEXT:    fclass.d $fa0, $fa0
240; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
241; CHECK32-NEXT:    andi $a0, $a0, 952
242; CHECK32-NEXT:    sltu $a0, $zero, $a0
243; CHECK32-NEXT:    ret
244;
245; CHECK64-LABEL: isfinite_d:
246; CHECK64:       # %bb.0: # %entry
247; CHECK64-NEXT:    fclass.d $fa0, $fa0
248; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
249; CHECK64-NEXT:    andi $a0, $a0, 952
250; CHECK64-NEXT:    sltu $a0, $zero, $a0
251; CHECK64-NEXT:    ret
252entry:
253  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 504)  ; 0x1f8 = "finite"
254  ret i1 %0
255}
256
257define i1 @not_isfinite_d(double %x) {
258; CHECK32-LABEL: not_isfinite_d:
259; CHECK32:       # %bb.0: # %entry
260; CHECK32-NEXT:    fclass.d $fa0, $fa0
261; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
262; CHECK32-NEXT:    andi $a0, $a0, 71
263; CHECK32-NEXT:    sltu $a0, $zero, $a0
264; CHECK32-NEXT:    ret
265;
266; CHECK64-LABEL: not_isfinite_d:
267; CHECK64:       # %bb.0: # %entry
268; CHECK64-NEXT:    fclass.d $fa0, $fa0
269; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
270; CHECK64-NEXT:    andi $a0, $a0, 71
271; CHECK64-NEXT:    sltu $a0, $zero, $a0
272; CHECK64-NEXT:    ret
273entry:
274  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 519)  ; ~0x1f8 = "~finite"
275  ret i1 %0
276}
277
278define i1 @is_plus_finite_d(double %x) {
279; CHECK32-LABEL: is_plus_finite_d:
280; CHECK32:       # %bb.0: # %entry
281; CHECK32-NEXT:    fclass.d $fa0, $fa0
282; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
283; CHECK32-NEXT:    andi $a0, $a0, 896
284; CHECK32-NEXT:    sltu $a0, $zero, $a0
285; CHECK32-NEXT:    ret
286;
287; CHECK64-LABEL: is_plus_finite_d:
288; CHECK64:       # %bb.0: # %entry
289; CHECK64-NEXT:    fclass.d $fa0, $fa0
290; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
291; CHECK64-NEXT:    andi $a0, $a0, 896
292; CHECK64-NEXT:    sltu $a0, $zero, $a0
293; CHECK64-NEXT:    ret
294entry:
295  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 448)  ; 0x1c0 = "+finite"
296  ret i1 %0
297}
298
299define i1 @not_is_plus_finite_d(double %x) {
300; CHECK32-LABEL: not_is_plus_finite_d:
301; CHECK32:       # %bb.0: # %entry
302; CHECK32-NEXT:    fclass.d $fa0, $fa0
303; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
304; CHECK32-NEXT:    andi $a0, $a0, 127
305; CHECK32-NEXT:    sltu $a0, $zero, $a0
306; CHECK32-NEXT:    ret
307;
308; CHECK64-LABEL: not_is_plus_finite_d:
309; CHECK64:       # %bb.0: # %entry
310; CHECK64-NEXT:    fclass.d $fa0, $fa0
311; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
312; CHECK64-NEXT:    andi $a0, $a0, 127
313; CHECK64-NEXT:    sltu $a0, $zero, $a0
314; CHECK64-NEXT:    ret
315entry:
316  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 575)  ; ~0x1c0 = ~"+finite"
317  ret i1 %0
318}
319
320define i1 @is_minus_finite_d(double %x) {
321; CHECK32-LABEL: is_minus_finite_d:
322; CHECK32:       # %bb.0: # %entry
323; CHECK32-NEXT:    fclass.d $fa0, $fa0
324; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
325; CHECK32-NEXT:    andi $a0, $a0, 56
326; CHECK32-NEXT:    sltu $a0, $zero, $a0
327; CHECK32-NEXT:    ret
328;
329; CHECK64-LABEL: is_minus_finite_d:
330; CHECK64:       # %bb.0: # %entry
331; CHECK64-NEXT:    fclass.d $fa0, $fa0
332; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
333; CHECK64-NEXT:    andi $a0, $a0, 56
334; CHECK64-NEXT:    sltu $a0, $zero, $a0
335; CHECK64-NEXT:    ret
336entry:
337  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 56)  ; 0x38 = "-finite"
338  ret i1 %0
339}
340
341define i1 @not_is_minus_finite_d(double %x) {
342; CHECK32-LABEL: not_is_minus_finite_d:
343; CHECK32:       # %bb.0: # %entry
344; CHECK32-NEXT:    fclass.d $fa0, $fa0
345; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
346; CHECK32-NEXT:    andi $a0, $a0, 967
347; CHECK32-NEXT:    sltu $a0, $zero, $a0
348; CHECK32-NEXT:    ret
349;
350; CHECK64-LABEL: not_is_minus_finite_d:
351; CHECK64:       # %bb.0: # %entry
352; CHECK64-NEXT:    fclass.d $fa0, $fa0
353; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
354; CHECK64-NEXT:    andi $a0, $a0, 967
355; CHECK64-NEXT:    sltu $a0, $zero, $a0
356; CHECK64-NEXT:    ret
357entry:
358  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 967)  ; ~0x38 = ~"-finite"
359  ret i1 %0
360}
361
362define i1 @isnormal_d(double %x) {
363; CHECK32-LABEL: isnormal_d:
364; CHECK32:       # %bb.0: # %entry
365; CHECK32-NEXT:    fclass.d $fa0, $fa0
366; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
367; CHECK32-NEXT:    andi $a0, $a0, 136
368; CHECK32-NEXT:    sltu $a0, $zero, $a0
369; CHECK32-NEXT:    ret
370;
371; CHECK64-LABEL: isnormal_d:
372; CHECK64:       # %bb.0: # %entry
373; CHECK64-NEXT:    fclass.d $fa0, $fa0
374; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
375; CHECK64-NEXT:    andi $a0, $a0, 136
376; CHECK64-NEXT:    sltu $a0, $zero, $a0
377; CHECK64-NEXT:    ret
378entry:
379  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 264)  ; 0x108 = "normal"
380  ret i1 %0
381}
382
383define i1 @not_isnormal_d(double %x) {
384; CHECK32-LABEL: not_isnormal_d:
385; CHECK32:       # %bb.0: # %entry
386; CHECK32-NEXT:    fclass.d $fa0, $fa0
387; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
388; CHECK32-NEXT:    andi $a0, $a0, 887
389; CHECK32-NEXT:    sltu $a0, $zero, $a0
390; CHECK32-NEXT:    ret
391;
392; CHECK64-LABEL: not_isnormal_d:
393; CHECK64:       # %bb.0: # %entry
394; CHECK64-NEXT:    fclass.d $fa0, $fa0
395; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
396; CHECK64-NEXT:    andi $a0, $a0, 887
397; CHECK64-NEXT:    sltu $a0, $zero, $a0
398; CHECK64-NEXT:    ret
399entry:
400  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 759)  ; ~0x108 = "~normal"
401  ret i1 %0
402}
403
404define i1 @is_plus_normal_d(double %x) {
405; CHECK32-LABEL: is_plus_normal_d:
406; CHECK32:       # %bb.0: # %entry
407; CHECK32-NEXT:    fclass.d $fa0, $fa0
408; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
409; CHECK32-NEXT:    andi $a0, $a0, 128
410; CHECK32-NEXT:    sltu $a0, $zero, $a0
411; CHECK32-NEXT:    ret
412;
413; CHECK64-LABEL: is_plus_normal_d:
414; CHECK64:       # %bb.0: # %entry
415; CHECK64-NEXT:    fclass.d $fa0, $fa0
416; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
417; CHECK64-NEXT:    andi $a0, $a0, 128
418; CHECK64-NEXT:    sltu $a0, $zero, $a0
419; CHECK64-NEXT:    ret
420entry:
421  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 256)  ; 0x100 = "+normal"
422  ret i1 %0
423}
424
425define i1 @issubnormal_d(double %x) {
426; CHECK32-LABEL: issubnormal_d:
427; CHECK32:       # %bb.0: # %entry
428; CHECK32-NEXT:    fclass.d $fa0, $fa0
429; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
430; CHECK32-NEXT:    andi $a0, $a0, 272
431; CHECK32-NEXT:    sltu $a0, $zero, $a0
432; CHECK32-NEXT:    ret
433;
434; CHECK64-LABEL: issubnormal_d:
435; CHECK64:       # %bb.0: # %entry
436; CHECK64-NEXT:    fclass.d $fa0, $fa0
437; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
438; CHECK64-NEXT:    andi $a0, $a0, 272
439; CHECK64-NEXT:    sltu $a0, $zero, $a0
440; CHECK64-NEXT:    ret
441entry:
442  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 144)  ; 0x90 = "subnormal"
443  ret i1 %0
444}
445
446define i1 @not_issubnormal_d(double %x) {
447; CHECK32-LABEL: not_issubnormal_d:
448; CHECK32:       # %bb.0: # %entry
449; CHECK32-NEXT:    fclass.d $fa0, $fa0
450; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
451; CHECK32-NEXT:    andi $a0, $a0, 751
452; CHECK32-NEXT:    sltu $a0, $zero, $a0
453; CHECK32-NEXT:    ret
454;
455; CHECK64-LABEL: not_issubnormal_d:
456; CHECK64:       # %bb.0: # %entry
457; CHECK64-NEXT:    fclass.d $fa0, $fa0
458; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
459; CHECK64-NEXT:    andi $a0, $a0, 751
460; CHECK64-NEXT:    sltu $a0, $zero, $a0
461; CHECK64-NEXT:    ret
462entry:
463  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 879)  ; ~0x90 = "~subnormal"
464  ret i1 %0
465}
466
467define i1 @is_plus_subnormal_d(double %x) {
468; CHECK32-LABEL: is_plus_subnormal_d:
469; CHECK32:       # %bb.0: # %entry
470; CHECK32-NEXT:    fclass.d $fa0, $fa0
471; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
472; CHECK32-NEXT:    andi $a0, $a0, 256
473; CHECK32-NEXT:    sltu $a0, $zero, $a0
474; CHECK32-NEXT:    ret
475;
476; CHECK64-LABEL: is_plus_subnormal_d:
477; CHECK64:       # %bb.0: # %entry
478; CHECK64-NEXT:    fclass.d $fa0, $fa0
479; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
480; CHECK64-NEXT:    andi $a0, $a0, 256
481; CHECK64-NEXT:    sltu $a0, $zero, $a0
482; CHECK64-NEXT:    ret
483entry:
484  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 128)  ; 0x80 = "+subnormal"
485  ret i1 %0
486}
487
488define i1 @not_is_plus_subnormal_d(double %x) {
489; CHECK32-LABEL: not_is_plus_subnormal_d:
490; CHECK32:       # %bb.0: # %entry
491; CHECK32-NEXT:    fclass.d $fa0, $fa0
492; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
493; CHECK32-NEXT:    andi $a0, $a0, 767
494; CHECK32-NEXT:    sltu $a0, $zero, $a0
495; CHECK32-NEXT:    ret
496;
497; CHECK64-LABEL: not_is_plus_subnormal_d:
498; CHECK64:       # %bb.0: # %entry
499; CHECK64-NEXT:    fclass.d $fa0, $fa0
500; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
501; CHECK64-NEXT:    andi $a0, $a0, 767
502; CHECK64-NEXT:    sltu $a0, $zero, $a0
503; CHECK64-NEXT:    ret
504entry:
505  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 895)  ; ~0x80 = ~"+subnormal"
506  ret i1 %0
507}
508
509define i1 @is_minus_subnormal_d(double %x) {
510; CHECK32-LABEL: is_minus_subnormal_d:
511; CHECK32:       # %bb.0: # %entry
512; CHECK32-NEXT:    fclass.d $fa0, $fa0
513; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
514; CHECK32-NEXT:    andi $a0, $a0, 16
515; CHECK32-NEXT:    sltu $a0, $zero, $a0
516; CHECK32-NEXT:    ret
517;
518; CHECK64-LABEL: is_minus_subnormal_d:
519; CHECK64:       # %bb.0: # %entry
520; CHECK64-NEXT:    fclass.d $fa0, $fa0
521; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
522; CHECK64-NEXT:    andi $a0, $a0, 16
523; CHECK64-NEXT:    sltu $a0, $zero, $a0
524; CHECK64-NEXT:    ret
525entry:
526  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 16)  ; 0x10 = "-subnormal"
527  ret i1 %0
528}
529
530define i1 @not_is_minus_subnormal_d(double %x) {
531; CHECK32-LABEL: not_is_minus_subnormal_d:
532; CHECK32:       # %bb.0: # %entry
533; CHECK32-NEXT:    fclass.d $fa0, $fa0
534; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
535; CHECK32-NEXT:    andi $a0, $a0, 1007
536; CHECK32-NEXT:    sltu $a0, $zero, $a0
537; CHECK32-NEXT:    ret
538;
539; CHECK64-LABEL: not_is_minus_subnormal_d:
540; CHECK64:       # %bb.0: # %entry
541; CHECK64-NEXT:    fclass.d $fa0, $fa0
542; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
543; CHECK64-NEXT:    andi $a0, $a0, 1007
544; CHECK64-NEXT:    sltu $a0, $zero, $a0
545; CHECK64-NEXT:    ret
546entry:
547  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1007)  ; ~0x10 = ~"-subnormal"
548  ret i1 %0
549}
550
551define i1 @iszero_d(double %x) {
552; CHECK32-LABEL: iszero_d:
553; CHECK32:       # %bb.0: # %entry
554; CHECK32-NEXT:    fclass.d $fa0, $fa0
555; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
556; CHECK32-NEXT:    andi $a0, $a0, 544
557; CHECK32-NEXT:    sltu $a0, $zero, $a0
558; CHECK32-NEXT:    ret
559;
560; CHECK64-LABEL: iszero_d:
561; CHECK64:       # %bb.0: # %entry
562; CHECK64-NEXT:    fclass.d $fa0, $fa0
563; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
564; CHECK64-NEXT:    andi $a0, $a0, 544
565; CHECK64-NEXT:    sltu $a0, $zero, $a0
566; CHECK64-NEXT:    ret
567entry:
568  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 96)  ; 0x60 = "zero"
569  ret i1 %0
570}
571
572define i1 @not_iszero_d(double %x) {
573; CHECK32-LABEL: not_iszero_d:
574; CHECK32:       # %bb.0: # %entry
575; CHECK32-NEXT:    fclass.d $fa0, $fa0
576; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
577; CHECK32-NEXT:    andi $a0, $a0, 479
578; CHECK32-NEXT:    sltu $a0, $zero, $a0
579; CHECK32-NEXT:    ret
580;
581; CHECK64-LABEL: not_iszero_d:
582; CHECK64:       # %bb.0: # %entry
583; CHECK64-NEXT:    fclass.d $fa0, $fa0
584; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
585; CHECK64-NEXT:    andi $a0, $a0, 479
586; CHECK64-NEXT:    sltu $a0, $zero, $a0
587; CHECK64-NEXT:    ret
588entry:
589  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 927)  ; ~0x60 = "~zero"
590  ret i1 %0
591}
592
593define i1 @issubnormal_or_zero_d(double %x) {
594; CHECK32-LABEL: issubnormal_or_zero_d:
595; CHECK32:       # %bb.0: # %entry
596; CHECK32-NEXT:    fclass.d $fa0, $fa0
597; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
598; CHECK32-NEXT:    andi $a0, $a0, 816
599; CHECK32-NEXT:    sltu $a0, $zero, $a0
600; CHECK32-NEXT:    ret
601;
602; CHECK64-LABEL: issubnormal_or_zero_d:
603; CHECK64:       # %bb.0: # %entry
604; CHECK64-NEXT:    fclass.d $fa0, $fa0
605; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
606; CHECK64-NEXT:    andi $a0, $a0, 816
607; CHECK64-NEXT:    sltu $a0, $zero, $a0
608; CHECK64-NEXT:    ret
609entry:
610  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 240)  ; 0xf0 = "subnormal|zero"
611  ret i1 %0
612}
613
614define i1 @not_issubnormal_or_zero_d(double %x) {
615; CHECK32-LABEL: not_issubnormal_or_zero_d:
616; CHECK32:       # %bb.0: # %entry
617; CHECK32-NEXT:    fclass.d $fa0, $fa0
618; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
619; CHECK32-NEXT:    andi $a0, $a0, 207
620; CHECK32-NEXT:    sltu $a0, $zero, $a0
621; CHECK32-NEXT:    ret
622;
623; CHECK64-LABEL: not_issubnormal_or_zero_d:
624; CHECK64:       # %bb.0: # %entry
625; CHECK64-NEXT:    fclass.d $fa0, $fa0
626; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
627; CHECK64-NEXT:    andi $a0, $a0, 207
628; CHECK64-NEXT:    sltu $a0, $zero, $a0
629; CHECK64-NEXT:    ret
630entry:
631  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 783)  ; ~0xf0 = "~(subnormal|zero)"
632  ret i1 %0
633}
634
635define i1 @is_plus_zero_d(double %x) {
636; CHECK32-LABEL: is_plus_zero_d:
637; CHECK32:       # %bb.0: # %entry
638; CHECK32-NEXT:    fclass.d $fa0, $fa0
639; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
640; CHECK32-NEXT:    andi $a0, $a0, 512
641; CHECK32-NEXT:    sltu $a0, $zero, $a0
642; CHECK32-NEXT:    ret
643;
644; CHECK64-LABEL: is_plus_zero_d:
645; CHECK64:       # %bb.0: # %entry
646; CHECK64-NEXT:    fclass.d $fa0, $fa0
647; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
648; CHECK64-NEXT:    andi $a0, $a0, 512
649; CHECK64-NEXT:    sltu $a0, $zero, $a0
650; CHECK64-NEXT:    ret
651entry:
652  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 64)  ; 0x40 = "+zero"
653  ret i1 %0
654}
655
656define i1 @not_is_plus_zero_d(double %x) {
657; CHECK32-LABEL: not_is_plus_zero_d:
658; CHECK32:       # %bb.0: # %entry
659; CHECK32-NEXT:    fclass.d $fa0, $fa0
660; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
661; CHECK32-NEXT:    andi $a0, $a0, 511
662; CHECK32-NEXT:    sltu $a0, $zero, $a0
663; CHECK32-NEXT:    ret
664;
665; CHECK64-LABEL: not_is_plus_zero_d:
666; CHECK64:       # %bb.0: # %entry
667; CHECK64-NEXT:    fclass.d $fa0, $fa0
668; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
669; CHECK64-NEXT:    andi $a0, $a0, 511
670; CHECK64-NEXT:    sltu $a0, $zero, $a0
671; CHECK64-NEXT:    ret
672entry:
673  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 959)  ; ~0x40 = ~"+zero"
674  ret i1 %0
675}
676
677define i1 @is_minus_zero_d(double %x) {
678; CHECK32-LABEL: is_minus_zero_d:
679; CHECK32:       # %bb.0: # %entry
680; CHECK32-NEXT:    fclass.d $fa0, $fa0
681; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
682; CHECK32-NEXT:    andi $a0, $a0, 32
683; CHECK32-NEXT:    sltu $a0, $zero, $a0
684; CHECK32-NEXT:    ret
685;
686; CHECK64-LABEL: is_minus_zero_d:
687; CHECK64:       # %bb.0: # %entry
688; CHECK64-NEXT:    fclass.d $fa0, $fa0
689; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
690; CHECK64-NEXT:    andi $a0, $a0, 32
691; CHECK64-NEXT:    sltu $a0, $zero, $a0
692; CHECK64-NEXT:    ret
693entry:
694  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 32)  ; 0x20 = "-zero"
695  ret i1 %0
696}
697
698define i1 @not_is_minus_zero_d(double %x) {
699; CHECK32-LABEL: not_is_minus_zero_d:
700; CHECK32:       # %bb.0: # %entry
701; CHECK32-NEXT:    fclass.d $fa0, $fa0
702; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
703; CHECK32-NEXT:    andi $a0, $a0, 991
704; CHECK32-NEXT:    sltu $a0, $zero, $a0
705; CHECK32-NEXT:    ret
706;
707; CHECK64-LABEL: not_is_minus_zero_d:
708; CHECK64:       # %bb.0: # %entry
709; CHECK64-NEXT:    fclass.d $fa0, $fa0
710; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
711; CHECK64-NEXT:    andi $a0, $a0, 991
712; CHECK64-NEXT:    sltu $a0, $zero, $a0
713; CHECK64-NEXT:    ret
714entry:
715  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 991)  ; ~0x20 = ~"-zero"
716  ret i1 %0
717}
718
719define i1 @isnone_d(double %x) {
720; CHECK32-LABEL: isnone_d:
721; CHECK32:       # %bb.0: # %entry
722; CHECK32-NEXT:    fclass.d $fa0, $fa0
723; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
724; CHECK32-NEXT:    andi $a0, $a0, 0
725; CHECK32-NEXT:    sltu $a0, $zero, $a0
726; CHECK32-NEXT:    ret
727;
728; CHECK64-LABEL: isnone_d:
729; CHECK64:       # %bb.0: # %entry
730; CHECK64-NEXT:    fclass.d $fa0, $fa0
731; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
732; CHECK64-NEXT:    andi $a0, $a0, 0
733; CHECK64-NEXT:    sltu $a0, $zero, $a0
734; CHECK64-NEXT:    ret
735entry:
736  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 0)
737  ret i1 %0
738}
739
740define i1 @isany_d(double %x) {
741; CHECK32-LABEL: isany_d:
742; CHECK32:       # %bb.0: # %entry
743; CHECK32-NEXT:    fclass.d $fa0, $fa0
744; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
745; CHECK32-NEXT:    andi $a0, $a0, 1023
746; CHECK32-NEXT:    sltu $a0, $zero, $a0
747; CHECK32-NEXT:    ret
748;
749; CHECK64-LABEL: isany_d:
750; CHECK64:       # %bb.0: # %entry
751; CHECK64-NEXT:    fclass.d $fa0, $fa0
752; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
753; CHECK64-NEXT:    andi $a0, $a0, 1023
754; CHECK64-NEXT:    sltu $a0, $zero, $a0
755; CHECK64-NEXT:    ret
756entry:
757  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1023)
758  ret i1 %0
759}
760
761define i1 @iszero_or_nan_d(double %x) {
762; CHECK32-LABEL: iszero_or_nan_d:
763; CHECK32:       # %bb.0: # %entry
764; CHECK32-NEXT:    fclass.d $fa0, $fa0
765; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
766; CHECK32-NEXT:    andi $a0, $a0, 547
767; CHECK32-NEXT:    sltu $a0, $zero, $a0
768; CHECK32-NEXT:    ret
769;
770; CHECK64-LABEL: iszero_or_nan_d:
771; CHECK64:       # %bb.0: # %entry
772; CHECK64-NEXT:    fclass.d $fa0, $fa0
773; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
774; CHECK64-NEXT:    andi $a0, $a0, 547
775; CHECK64-NEXT:    sltu $a0, $zero, $a0
776; CHECK64-NEXT:    ret
777entry:
778  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 99)  ; 0x60|0x3 = "zero|nan"
779  ret i1 %0
780}
781
782define i1 @not_iszero_or_nan_d(double %x) {
783; CHECK32-LABEL: not_iszero_or_nan_d:
784; CHECK32:       # %bb.0: # %entry
785; CHECK32-NEXT:    fclass.d $fa0, $fa0
786; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
787; CHECK32-NEXT:    andi $a0, $a0, 476
788; CHECK32-NEXT:    sltu $a0, $zero, $a0
789; CHECK32-NEXT:    ret
790;
791; CHECK64-LABEL: not_iszero_or_nan_d:
792; CHECK64:       # %bb.0: # %entry
793; CHECK64-NEXT:    fclass.d $fa0, $fa0
794; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
795; CHECK64-NEXT:    andi $a0, $a0, 476
796; CHECK64-NEXT:    sltu $a0, $zero, $a0
797; CHECK64-NEXT:    ret
798entry:
799  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 924)  ; ~0x60 = "~(zero|nan)"
800  ret i1 %0
801}
802
803define i1 @iszero_or_qnan_d(double %x) {
804; CHECK32-LABEL: iszero_or_qnan_d:
805; CHECK32:       # %bb.0: # %entry
806; CHECK32-NEXT:    fclass.d $fa0, $fa0
807; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
808; CHECK32-NEXT:    andi $a0, $a0, 546
809; CHECK32-NEXT:    sltu $a0, $zero, $a0
810; CHECK32-NEXT:    ret
811;
812; CHECK64-LABEL: iszero_or_qnan_d:
813; CHECK64:       # %bb.0: # %entry
814; CHECK64-NEXT:    fclass.d $fa0, $fa0
815; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
816; CHECK64-NEXT:    andi $a0, $a0, 546
817; CHECK64-NEXT:    sltu $a0, $zero, $a0
818; CHECK64-NEXT:    ret
819entry:
820  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 98)  ; 0x60|0x2 = "zero|qnan"
821  ret i1 %0
822}
823
824define i1 @iszero_or_snan_d(double %x) {
825; CHECK32-LABEL: iszero_or_snan_d:
826; CHECK32:       # %bb.0: # %entry
827; CHECK32-NEXT:    fclass.d $fa0, $fa0
828; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
829; CHECK32-NEXT:    andi $a0, $a0, 545
830; CHECK32-NEXT:    sltu $a0, $zero, $a0
831; CHECK32-NEXT:    ret
832;
833; CHECK64-LABEL: iszero_or_snan_d:
834; CHECK64:       # %bb.0: # %entry
835; CHECK64-NEXT:    fclass.d $fa0, $fa0
836; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
837; CHECK64-NEXT:    andi $a0, $a0, 545
838; CHECK64-NEXT:    sltu $a0, $zero, $a0
839; CHECK64-NEXT:    ret
840entry:
841  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 97)  ; 0x60|0x1 = "zero|snan"
842  ret i1 %0
843}
844
845define i1 @not_iszero_or_qnan_d(double %x) {
846; CHECK32-LABEL: not_iszero_or_qnan_d:
847; CHECK32:       # %bb.0: # %entry
848; CHECK32-NEXT:    fclass.d $fa0, $fa0
849; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
850; CHECK32-NEXT:    andi $a0, $a0, 477
851; CHECK32-NEXT:    sltu $a0, $zero, $a0
852; CHECK32-NEXT:    ret
853;
854; CHECK64-LABEL: not_iszero_or_qnan_d:
855; CHECK64:       # %bb.0: # %entry
856; CHECK64-NEXT:    fclass.d $fa0, $fa0
857; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
858; CHECK64-NEXT:    andi $a0, $a0, 477
859; CHECK64-NEXT:    sltu $a0, $zero, $a0
860; CHECK64-NEXT:    ret
861entry:
862  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 925)  ; ~(0x60|0x2) = "~(zero|qnan)"
863  ret i1 %0
864}
865
866define i1 @not_iszero_or_snan_d(double %x) {
867; CHECK32-LABEL: not_iszero_or_snan_d:
868; CHECK32:       # %bb.0: # %entry
869; CHECK32-NEXT:    fclass.d $fa0, $fa0
870; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
871; CHECK32-NEXT:    andi $a0, $a0, 478
872; CHECK32-NEXT:    sltu $a0, $zero, $a0
873; CHECK32-NEXT:    ret
874;
875; CHECK64-LABEL: not_iszero_or_snan_d:
876; CHECK64:       # %bb.0: # %entry
877; CHECK64-NEXT:    fclass.d $fa0, $fa0
878; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
879; CHECK64-NEXT:    andi $a0, $a0, 478
880; CHECK64-NEXT:    sltu $a0, $zero, $a0
881; CHECK64-NEXT:    ret
882entry:
883  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 926)  ; ~(0x60|0x1) = "~(zero|snan)"
884  ret i1 %0
885}
886
887define i1 @isinf_or_nan_d(double %x) {
888; CHECK32-LABEL: isinf_or_nan_d:
889; CHECK32:       # %bb.0: # %entry
890; CHECK32-NEXT:    fclass.d $fa0, $fa0
891; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
892; CHECK32-NEXT:    andi $a0, $a0, 71
893; CHECK32-NEXT:    sltu $a0, $zero, $a0
894; CHECK32-NEXT:    ret
895;
896; CHECK64-LABEL: isinf_or_nan_d:
897; CHECK64:       # %bb.0: # %entry
898; CHECK64-NEXT:    fclass.d $fa0, $fa0
899; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
900; CHECK64-NEXT:    andi $a0, $a0, 71
901; CHECK64-NEXT:    sltu $a0, $zero, $a0
902; CHECK64-NEXT:    ret
903entry:
904  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 519)  ; 0x204|0x3 = "inf|nan"
905  ret i1 %0
906}
907
908define i1 @not_isinf_or_nan_d(double %x) {
909; CHECK32-LABEL: not_isinf_or_nan_d:
910; CHECK32:       # %bb.0: # %entry
911; CHECK32-NEXT:    fclass.d $fa0, $fa0
912; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
913; CHECK32-NEXT:    andi $a0, $a0, 952
914; CHECK32-NEXT:    sltu $a0, $zero, $a0
915; CHECK32-NEXT:    ret
916;
917; CHECK64-LABEL: not_isinf_or_nan_d:
918; CHECK64:       # %bb.0: # %entry
919; CHECK64-NEXT:    fclass.d $fa0, $fa0
920; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
921; CHECK64-NEXT:    andi $a0, $a0, 952
922; CHECK64-NEXT:    sltu $a0, $zero, $a0
923; CHECK64-NEXT:    ret
924entry:
925  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 504)  ; ~(0x204|0x3) = "~(inf|nan)"
926  ret i1 %0
927}
928
929define i1 @isfinite_or_nan_d(double %x) {
930; CHECK32-LABEL: isfinite_or_nan_d:
931; CHECK32:       # %bb.0: # %entry
932; CHECK32-NEXT:    fclass.d $fa0, $fa0
933; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
934; CHECK32-NEXT:    andi $a0, $a0, 955
935; CHECK32-NEXT:    sltu $a0, $zero, $a0
936; CHECK32-NEXT:    ret
937;
938; CHECK64-LABEL: isfinite_or_nan_d:
939; CHECK64:       # %bb.0: # %entry
940; CHECK64-NEXT:    fclass.d $fa0, $fa0
941; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
942; CHECK64-NEXT:    andi $a0, $a0, 955
943; CHECK64-NEXT:    sltu $a0, $zero, $a0
944; CHECK64-NEXT:    ret
945entry:
946  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 507)  ; 0x1f8|0x3 = "finite|nan"
947  ret i1 %0
948}
949
950define i1 @not_isfinite_or_nan_d(double %x) {
951; CHECK32-LABEL: not_isfinite_or_nan_d:
952; CHECK32:       # %bb.0: # %entry
953; CHECK32-NEXT:    fclass.d $fa0, $fa0
954; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
955; CHECK32-NEXT:    andi $a0, $a0, 68
956; CHECK32-NEXT:    sltu $a0, $zero, $a0
957; CHECK32-NEXT:    ret
958;
959; CHECK64-LABEL: not_isfinite_or_nan_d:
960; CHECK64:       # %bb.0: # %entry
961; CHECK64-NEXT:    fclass.d $fa0, $fa0
962; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
963; CHECK64-NEXT:    andi $a0, $a0, 68
964; CHECK64-NEXT:    sltu $a0, $zero, $a0
965; CHECK64-NEXT:    ret
966entry:
967  %0 = tail call i1 @llvm.is.fpclass.f64(double %x, i32 516)  ; ~(0x1f8|0x3) = "~(finite|nan)"
968  ret i1 %0
969}
970
971define i1 @is_plus_inf_or_nan_d(double %x) {
972; CHECK32-LABEL: is_plus_inf_or_nan_d:
973; CHECK32:       # %bb.0:
974; CHECK32-NEXT:    fclass.d $fa0, $fa0
975; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
976; CHECK32-NEXT:    andi $a0, $a0, 67
977; CHECK32-NEXT:    sltu $a0, $zero, $a0
978; CHECK32-NEXT:    ret
979;
980; CHECK64-LABEL: is_plus_inf_or_nan_d:
981; CHECK64:       # %bb.0:
982; CHECK64-NEXT:    fclass.d $fa0, $fa0
983; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
984; CHECK64-NEXT:    andi $a0, $a0, 67
985; CHECK64-NEXT:    sltu $a0, $zero, $a0
986; CHECK64-NEXT:    ret
987  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 515)  ; 0x200|0x3 = "+inf|nan"
988  ret i1 %class
989}
990
991define i1 @is_minus_inf_or_nan_d(double %x) {
992; CHECK32-LABEL: is_minus_inf_or_nan_d:
993; CHECK32:       # %bb.0:
994; CHECK32-NEXT:    fclass.d $fa0, $fa0
995; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
996; CHECK32-NEXT:    andi $a0, $a0, 7
997; CHECK32-NEXT:    sltu $a0, $zero, $a0
998; CHECK32-NEXT:    ret
999;
1000; CHECK64-LABEL: is_minus_inf_or_nan_d:
1001; CHECK64:       # %bb.0:
1002; CHECK64-NEXT:    fclass.d $fa0, $fa0
1003; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1004; CHECK64-NEXT:    andi $a0, $a0, 7
1005; CHECK64-NEXT:    sltu $a0, $zero, $a0
1006; CHECK64-NEXT:    ret
1007  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 7)  ; "-inf|nan"
1008  ret i1 %class
1009}
1010
1011define i1 @not_is_plus_inf_or_nan_d(double %x) {
1012; CHECK32-LABEL: not_is_plus_inf_or_nan_d:
1013; CHECK32:       # %bb.0:
1014; CHECK32-NEXT:    fclass.d $fa0, $fa0
1015; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1016; CHECK32-NEXT:    andi $a0, $a0, 956
1017; CHECK32-NEXT:    sltu $a0, $zero, $a0
1018; CHECK32-NEXT:    ret
1019;
1020; CHECK64-LABEL: not_is_plus_inf_or_nan_d:
1021; CHECK64:       # %bb.0:
1022; CHECK64-NEXT:    fclass.d $fa0, $fa0
1023; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1024; CHECK64-NEXT:    andi $a0, $a0, 956
1025; CHECK64-NEXT:    sltu $a0, $zero, $a0
1026; CHECK64-NEXT:    ret
1027  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 508)  ; ~(0x200|0x3) = "~(+inf|nan)"
1028  ret i1 %class
1029}
1030
1031define i1 @not_is_minus_inf_or_nan_d(double %x) {
1032; CHECK32-LABEL: not_is_minus_inf_or_nan_d:
1033; CHECK32:       # %bb.0:
1034; CHECK32-NEXT:    fclass.d $fa0, $fa0
1035; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1036; CHECK32-NEXT:    andi $a0, $a0, 1016
1037; CHECK32-NEXT:    sltu $a0, $zero, $a0
1038; CHECK32-NEXT:    ret
1039;
1040; CHECK64-LABEL: not_is_minus_inf_or_nan_d:
1041; CHECK64:       # %bb.0:
1042; CHECK64-NEXT:    fclass.d $fa0, $fa0
1043; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1044; CHECK64-NEXT:    andi $a0, $a0, 1016
1045; CHECK64-NEXT:    sltu $a0, $zero, $a0
1046; CHECK64-NEXT:    ret
1047  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1016)  ; "~(-inf|nan)"
1048  ret i1 %class
1049}
1050
1051define i1 @is_plus_inf_or_snan_d(double %x) {
1052; CHECK32-LABEL: is_plus_inf_or_snan_d:
1053; CHECK32:       # %bb.0:
1054; CHECK32-NEXT:    fclass.d $fa0, $fa0
1055; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1056; CHECK32-NEXT:    andi $a0, $a0, 65
1057; CHECK32-NEXT:    sltu $a0, $zero, $a0
1058; CHECK32-NEXT:    ret
1059;
1060; CHECK64-LABEL: is_plus_inf_or_snan_d:
1061; CHECK64:       # %bb.0:
1062; CHECK64-NEXT:    fclass.d $fa0, $fa0
1063; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1064; CHECK64-NEXT:    andi $a0, $a0, 65
1065; CHECK64-NEXT:    sltu $a0, $zero, $a0
1066; CHECK64-NEXT:    ret
1067  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 513)  ; 0x200|0x1 = "+inf|snan"
1068  ret i1 %class
1069}
1070
1071define i1 @is_plus_inf_or_qnan_d(double %x) {
1072; CHECK32-LABEL: is_plus_inf_or_qnan_d:
1073; CHECK32:       # %bb.0:
1074; CHECK32-NEXT:    fclass.d $fa0, $fa0
1075; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1076; CHECK32-NEXT:    andi $a0, $a0, 66
1077; CHECK32-NEXT:    sltu $a0, $zero, $a0
1078; CHECK32-NEXT:    ret
1079;
1080; CHECK64-LABEL: is_plus_inf_or_qnan_d:
1081; CHECK64:       # %bb.0:
1082; CHECK64-NEXT:    fclass.d $fa0, $fa0
1083; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1084; CHECK64-NEXT:    andi $a0, $a0, 66
1085; CHECK64-NEXT:    sltu $a0, $zero, $a0
1086; CHECK64-NEXT:    ret
1087  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 514)  ; 0x200|0x1 = "+inf|qnan"
1088  ret i1 %class
1089}
1090
1091define i1 @not_is_plus_inf_or_snan_d(double %x) {
1092; CHECK32-LABEL: not_is_plus_inf_or_snan_d:
1093; CHECK32:       # %bb.0:
1094; CHECK32-NEXT:    fclass.d $fa0, $fa0
1095; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1096; CHECK32-NEXT:    andi $a0, $a0, 958
1097; CHECK32-NEXT:    sltu $a0, $zero, $a0
1098; CHECK32-NEXT:    ret
1099;
1100; CHECK64-LABEL: not_is_plus_inf_or_snan_d:
1101; CHECK64:       # %bb.0:
1102; CHECK64-NEXT:    fclass.d $fa0, $fa0
1103; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1104; CHECK64-NEXT:    andi $a0, $a0, 958
1105; CHECK64-NEXT:    sltu $a0, $zero, $a0
1106; CHECK64-NEXT:    ret
1107  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 510) ; ~(+inf|snan)
1108  ret i1 %class
1109}
1110
1111define i1 @not_is_plus_inf_or_qnan_d(double %x) {
1112; CHECK32-LABEL: not_is_plus_inf_or_qnan_d:
1113; CHECK32:       # %bb.0:
1114; CHECK32-NEXT:    fclass.d $fa0, $fa0
1115; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1116; CHECK32-NEXT:    andi $a0, $a0, 957
1117; CHECK32-NEXT:    sltu $a0, $zero, $a0
1118; CHECK32-NEXT:    ret
1119;
1120; CHECK64-LABEL: not_is_plus_inf_or_qnan_d:
1121; CHECK64:       # %bb.0:
1122; CHECK64-NEXT:    fclass.d $fa0, $fa0
1123; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1124; CHECK64-NEXT:    andi $a0, $a0, 957
1125; CHECK64-NEXT:    sltu $a0, $zero, $a0
1126; CHECK64-NEXT:    ret
1127  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 509) ; ~(+inf|qnan)
1128  ret i1 %class
1129}
1130
1131define i1 @is_minus_inf_or_snan_d(double %x) {
1132; CHECK32-LABEL: is_minus_inf_or_snan_d:
1133; CHECK32:       # %bb.0:
1134; CHECK32-NEXT:    fclass.d $fa0, $fa0
1135; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1136; CHECK32-NEXT:    andi $a0, $a0, 5
1137; CHECK32-NEXT:    sltu $a0, $zero, $a0
1138; CHECK32-NEXT:    ret
1139;
1140; CHECK64-LABEL: is_minus_inf_or_snan_d:
1141; CHECK64:       # %bb.0:
1142; CHECK64-NEXT:    fclass.d $fa0, $fa0
1143; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1144; CHECK64-NEXT:    andi $a0, $a0, 5
1145; CHECK64-NEXT:    sltu $a0, $zero, $a0
1146; CHECK64-NEXT:    ret
1147  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 5)  ; "-inf|snan"
1148  ret i1 %class
1149}
1150
1151define i1 @is_minus_inf_or_qnan_d(double %x) {
1152; CHECK32-LABEL: is_minus_inf_or_qnan_d:
1153; CHECK32:       # %bb.0:
1154; CHECK32-NEXT:    fclass.d $fa0, $fa0
1155; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1156; CHECK32-NEXT:    andi $a0, $a0, 6
1157; CHECK32-NEXT:    sltu $a0, $zero, $a0
1158; CHECK32-NEXT:    ret
1159;
1160; CHECK64-LABEL: is_minus_inf_or_qnan_d:
1161; CHECK64:       # %bb.0:
1162; CHECK64-NEXT:    fclass.d $fa0, $fa0
1163; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1164; CHECK64-NEXT:    andi $a0, $a0, 6
1165; CHECK64-NEXT:    sltu $a0, $zero, $a0
1166; CHECK64-NEXT:    ret
1167  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 6)  ; "-inf|qnan"
1168  ret i1 %class
1169}
1170
1171define i1 @not_is_minus_inf_or_snan_d(double %x) {
1172; CHECK32-LABEL: not_is_minus_inf_or_snan_d:
1173; CHECK32:       # %bb.0:
1174; CHECK32-NEXT:    fclass.d $fa0, $fa0
1175; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1176; CHECK32-NEXT:    andi $a0, $a0, 1018
1177; CHECK32-NEXT:    sltu $a0, $zero, $a0
1178; CHECK32-NEXT:    ret
1179;
1180; CHECK64-LABEL: not_is_minus_inf_or_snan_d:
1181; CHECK64:       # %bb.0:
1182; CHECK64-NEXT:    fclass.d $fa0, $fa0
1183; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1184; CHECK64-NEXT:    andi $a0, $a0, 1018
1185; CHECK64-NEXT:    sltu $a0, $zero, $a0
1186; CHECK64-NEXT:    ret
1187  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1018)  ; "~(-inf|snan)"
1188  ret i1 %class
1189}
1190
1191define i1 @not_is_minus_inf_or_qnan_d(double %x) {
1192; CHECK32-LABEL: not_is_minus_inf_or_qnan_d:
1193; CHECK32:       # %bb.0:
1194; CHECK32-NEXT:    fclass.d $fa0, $fa0
1195; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1196; CHECK32-NEXT:    andi $a0, $a0, 1017
1197; CHECK32-NEXT:    sltu $a0, $zero, $a0
1198; CHECK32-NEXT:    ret
1199;
1200; CHECK64-LABEL: not_is_minus_inf_or_qnan_d:
1201; CHECK64:       # %bb.0:
1202; CHECK64-NEXT:    fclass.d $fa0, $fa0
1203; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1204; CHECK64-NEXT:    andi $a0, $a0, 1017
1205; CHECK64-NEXT:    sltu $a0, $zero, $a0
1206; CHECK64-NEXT:    ret
1207  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 1017)  ; "-inf|qnan"
1208  ret i1 %class
1209}
1210
1211define i1 @issubnormal_or_nan_d(double %x) {
1212; CHECK32-LABEL: issubnormal_or_nan_d:
1213; CHECK32:       # %bb.0:
1214; CHECK32-NEXT:    fclass.d $fa0, $fa0
1215; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1216; CHECK32-NEXT:    andi $a0, $a0, 275
1217; CHECK32-NEXT:    sltu $a0, $zero, $a0
1218; CHECK32-NEXT:    ret
1219;
1220; CHECK64-LABEL: issubnormal_or_nan_d:
1221; CHECK64:       # %bb.0:
1222; CHECK64-NEXT:    fclass.d $fa0, $fa0
1223; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1224; CHECK64-NEXT:    andi $a0, $a0, 275
1225; CHECK64-NEXT:    sltu $a0, $zero, $a0
1226; CHECK64-NEXT:    ret
1227  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 147)  ; 0x90|0x3 = "subnormal|nan"
1228  ret i1 %class
1229}
1230
1231define i1 @issubnormal_or_zero_or_nan_d(double %x) {
1232; CHECK32-LABEL: issubnormal_or_zero_or_nan_d:
1233; CHECK32:       # %bb.0:
1234; CHECK32-NEXT:    fclass.d $fa0, $fa0
1235; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1236; CHECK32-NEXT:    andi $a0, $a0, 819
1237; CHECK32-NEXT:    sltu $a0, $zero, $a0
1238; CHECK32-NEXT:    ret
1239;
1240; CHECK64-LABEL: issubnormal_or_zero_or_nan_d:
1241; CHECK64:       # %bb.0:
1242; CHECK64-NEXT:    fclass.d $fa0, $fa0
1243; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1244; CHECK64-NEXT:    andi $a0, $a0, 819
1245; CHECK64-NEXT:    sltu $a0, $zero, $a0
1246; CHECK64-NEXT:    ret
1247  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 243)  ; 0xf0|0x3 = "subnormal|zero|nan"
1248  ret i1 %class
1249}
1250
1251define i1 @issubnormal_or_zero_or_snan_d(double %x) {
1252; CHECK32-LABEL: issubnormal_or_zero_or_snan_d:
1253; CHECK32:       # %bb.0:
1254; CHECK32-NEXT:    fclass.d $fa0, $fa0
1255; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1256; CHECK32-NEXT:    andi $a0, $a0, 817
1257; CHECK32-NEXT:    sltu $a0, $zero, $a0
1258; CHECK32-NEXT:    ret
1259;
1260; CHECK64-LABEL: issubnormal_or_zero_or_snan_d:
1261; CHECK64:       # %bb.0:
1262; CHECK64-NEXT:    fclass.d $fa0, $fa0
1263; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1264; CHECK64-NEXT:    andi $a0, $a0, 817
1265; CHECK64-NEXT:    sltu $a0, $zero, $a0
1266; CHECK64-NEXT:    ret
1267  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 241)  ; 0x90|0x1 = "subnormal|snan"
1268  ret i1 %class
1269}
1270
1271define i1 @issubnormal_or_zero_or_qnan_d(double %x) {
1272; CHECK32-LABEL: issubnormal_or_zero_or_qnan_d:
1273; CHECK32:       # %bb.0:
1274; CHECK32-NEXT:    fclass.d $fa0, $fa0
1275; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1276; CHECK32-NEXT:    andi $a0, $a0, 818
1277; CHECK32-NEXT:    sltu $a0, $zero, $a0
1278; CHECK32-NEXT:    ret
1279;
1280; CHECK64-LABEL: issubnormal_or_zero_or_qnan_d:
1281; CHECK64:       # %bb.0:
1282; CHECK64-NEXT:    fclass.d $fa0, $fa0
1283; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1284; CHECK64-NEXT:    andi $a0, $a0, 818
1285; CHECK64-NEXT:    sltu $a0, $zero, $a0
1286; CHECK64-NEXT:    ret
1287  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 242)  ; 0x90|0x2 = "subnormal|qnan"
1288  ret i1 %class
1289}
1290
1291define i1 @not_issubnormal_or_nan_d(double %x) {
1292; CHECK32-LABEL: not_issubnormal_or_nan_d:
1293; CHECK32:       # %bb.0:
1294; CHECK32-NEXT:    fclass.d $fa0, $fa0
1295; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1296; CHECK32-NEXT:    andi $a0, $a0, 748
1297; CHECK32-NEXT:    sltu $a0, $zero, $a0
1298; CHECK32-NEXT:    ret
1299;
1300; CHECK64-LABEL: not_issubnormal_or_nan_d:
1301; CHECK64:       # %bb.0:
1302; CHECK64-NEXT:    fclass.d $fa0, $fa0
1303; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1304; CHECK64-NEXT:    andi $a0, $a0, 748
1305; CHECK64-NEXT:    sltu $a0, $zero, $a0
1306; CHECK64-NEXT:    ret
1307  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 876)  ; ~(0x90|0x3) = ~"subnormal|nan"
1308  ret i1 %class
1309}
1310
1311define i1 @not_issubnormal_or_zero_or_nan_d(double %x) {
1312; CHECK32-LABEL: not_issubnormal_or_zero_or_nan_d:
1313; CHECK32:       # %bb.0:
1314; CHECK32-NEXT:    fclass.d $fa0, $fa0
1315; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1316; CHECK32-NEXT:    andi $a0, $a0, 204
1317; CHECK32-NEXT:    sltu $a0, $zero, $a0
1318; CHECK32-NEXT:    ret
1319;
1320; CHECK64-LABEL: not_issubnormal_or_zero_or_nan_d:
1321; CHECK64:       # %bb.0:
1322; CHECK64-NEXT:    fclass.d $fa0, $fa0
1323; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1324; CHECK64-NEXT:    andi $a0, $a0, 204
1325; CHECK64-NEXT:    sltu $a0, $zero, $a0
1326; CHECK64-NEXT:    ret
1327  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 780)  ; ~(0xf0|0x3) = ~"subnormal|zero|nan"
1328  ret i1 %class
1329}
1330
1331define i1 @not_issubnormal_or_zero_or_snan_d(double %x) {
1332; CHECK32-LABEL: not_issubnormal_or_zero_or_snan_d:
1333; CHECK32:       # %bb.0:
1334; CHECK32-NEXT:    fclass.d $fa0, $fa0
1335; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1336; CHECK32-NEXT:    andi $a0, $a0, 206
1337; CHECK32-NEXT:    sltu $a0, $zero, $a0
1338; CHECK32-NEXT:    ret
1339;
1340; CHECK64-LABEL: not_issubnormal_or_zero_or_snan_d:
1341; CHECK64:       # %bb.0:
1342; CHECK64-NEXT:    fclass.d $fa0, $fa0
1343; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1344; CHECK64-NEXT:    andi $a0, $a0, 206
1345; CHECK64-NEXT:    sltu $a0, $zero, $a0
1346; CHECK64-NEXT:    ret
1347  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 782)  ; ~(0x90|0x1) = ~"subnormal|snan"
1348  ret i1 %class
1349}
1350
1351define i1 @not_issubnormal_or_zero_or_qnan_d(double %x) {
1352; CHECK32-LABEL: not_issubnormal_or_zero_or_qnan_d:
1353; CHECK32:       # %bb.0:
1354; CHECK32-NEXT:    fclass.d $fa0, $fa0
1355; CHECK32-NEXT:    movfr2gr.s $a0, $fa0
1356; CHECK32-NEXT:    andi $a0, $a0, 205
1357; CHECK32-NEXT:    sltu $a0, $zero, $a0
1358; CHECK32-NEXT:    ret
1359;
1360; CHECK64-LABEL: not_issubnormal_or_zero_or_qnan_d:
1361; CHECK64:       # %bb.0:
1362; CHECK64-NEXT:    fclass.d $fa0, $fa0
1363; CHECK64-NEXT:    movfr2gr.d $a0, $fa0
1364; CHECK64-NEXT:    andi $a0, $a0, 205
1365; CHECK64-NEXT:    sltu $a0, $zero, $a0
1366; CHECK64-NEXT:    ret
1367  %class = tail call i1 @llvm.is.fpclass.f64(double %x, i32 781)  ; ~(0x90|0x2) = ~"subnormal|qnan"
1368  ret i1 %class
1369}
1370
1371declare i1 @llvm.is.fpclass.f64(double, i32)
1372