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