Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / fsqrt.f32.ll
blob13e588dffaf5c18c829edd0fbb38e8f06755c002
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,SDAG,GCN-IEEE,SDAG-IEEE %s
3 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GISEL,GCN-IEEE,GISEL-IEEE %s
5 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=tahiti -denormal-fp-math-f32=preserve-sign < %s | FileCheck -check-prefixes=GCN,SDAG,GCN-DAZ,SDAG-DAZ %s
6 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=tahiti -denormal-fp-math-f32=preserve-sign < %s | FileCheck -check-prefixes=GCN,GISEL,GCN-DAZ,GISEL-DAZ %s
8 define float @v_sqrt_f32(float %x) {
9 ; SDAG-IEEE-LABEL: v_sqrt_f32:
10 ; SDAG-IEEE:       ; %bb.0:
11 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
13 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
14 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
15 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
16 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
17 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
18 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
19 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
20 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
21 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
22 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
23 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
24 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
25 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
26 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
27 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
28 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
29 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
30 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
32 ; GISEL-IEEE-LABEL: v_sqrt_f32:
33 ; GISEL-IEEE:       ; %bb.0:
34 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
36 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
37 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
38 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
39 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
40 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
41 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
42 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
43 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
44 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
45 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
46 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
47 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
48 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
49 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
50 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
51 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
52 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
53 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
55 ; SDAG-DAZ-LABEL: v_sqrt_f32:
56 ; SDAG-DAZ:       ; %bb.0:
57 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
58 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
59 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
60 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
61 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
62 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
63 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
64 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
65 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
66 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
67 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
68 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
69 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
70 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
71 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
72 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
73 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
74 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
75 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
77 ; GISEL-DAZ-LABEL: v_sqrt_f32:
78 ; GISEL-DAZ:       ; %bb.0:
79 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
80 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
81 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
82 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
83 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
84 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
85 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
86 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
87 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
88 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
89 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
90 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
91 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
92 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
93 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
94 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
95 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
96 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
97 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
98   %result = call float @llvm.sqrt.f32(float %x)
99   ret float %result
102 define float @v_sqrt_f32_fneg(float %x) {
103 ; SDAG-IEEE-LABEL: v_sqrt_f32_fneg:
104 ; SDAG-IEEE:       ; %bb.0:
105 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
106 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x8f800000
107 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0xcf800000, v0
108 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
109 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, -v0, v1, vcc
110 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
111 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
112 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
113 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
114 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
115 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
116 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
117 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
118 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
119 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
120 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
121 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
122 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
123 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
124 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
126 ; GISEL-IEEE-LABEL: v_sqrt_f32_fneg:
127 ; GISEL-IEEE:       ; %bb.0:
128 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
129 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
130 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x4f800000
131 ; GISEL-IEEE-NEXT:    v_mul_f32_e64 v2, -v0, v2
132 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 vcc, v1, -v0
133 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, -v0, v2, vcc
134 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
135 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
136 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
137 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
138 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
139 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
140 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
141 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
142 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
143 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
144 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
145 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
146 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
147 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
148 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
150 ; SDAG-DAZ-LABEL: v_sqrt_f32_fneg:
151 ; SDAG-DAZ:       ; %bb.0:
152 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
153 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0x8f800000
154 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0xcf800000, v0
155 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
156 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v0, -v0, v1, vcc
157 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
158 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
159 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
160 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
161 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
162 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
163 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
164 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
165 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
166 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
167 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
168 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
169 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
170 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
172 ; GISEL-DAZ-LABEL: v_sqrt_f32_fneg:
173 ; GISEL-DAZ:       ; %bb.0:
174 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
175 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
176 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x4f800000
177 ; GISEL-DAZ-NEXT:    v_mul_f32_e64 v2, -v0, v2
178 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, v1, -v0
179 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v0, -v0, v2, vcc
180 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
181 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
182 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
183 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
184 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
185 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
186 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
187 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
188 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
189 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
190 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
191 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
192 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
193 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
194   %x.neg = fneg float %x
195   %result = call float @llvm.sqrt.f32(float %x.neg)
196   ret float %result
199 define float @v_sqrt_f32_fabs(float %x) {
200 ; SDAG-IEEE-LABEL: v_sqrt_f32_fabs:
201 ; SDAG-IEEE:       ; %bb.0:
202 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
203 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
204 ; SDAG-IEEE-NEXT:    s_mov_b32 s5, 0x4f800000
205 ; SDAG-IEEE-NEXT:    v_mul_f32_e64 v1, |v0|, s5
206 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
207 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, |v0|, v1, vcc
208 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
209 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
210 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
211 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
212 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
213 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
214 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
215 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
216 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
217 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
218 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
219 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
220 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
221 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
222 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
224 ; GISEL-IEEE-LABEL: v_sqrt_f32_fabs:
225 ; GISEL-IEEE:       ; %bb.0:
226 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
227 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
228 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x4f800000
229 ; GISEL-IEEE-NEXT:    v_mul_f32_e64 v2, |v0|, v2
230 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 vcc, v1, |v0|
231 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, |v0|, v2, vcc
232 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
233 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
234 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
235 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
236 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
237 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
238 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
239 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
240 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
241 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
242 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
243 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
244 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
245 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
246 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
248 ; SDAG-DAZ-LABEL: v_sqrt_f32_fabs:
249 ; SDAG-DAZ:       ; %bb.0:
250 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
251 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
252 ; SDAG-DAZ-NEXT:    s_mov_b32 s5, 0x4f800000
253 ; SDAG-DAZ-NEXT:    v_mul_f32_e64 v1, |v0|, s5
254 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
255 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v0, |v0|, v1, vcc
256 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
257 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
258 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
259 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
260 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
261 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
262 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
263 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
264 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
265 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
266 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
267 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
268 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
269 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
271 ; GISEL-DAZ-LABEL: v_sqrt_f32_fabs:
272 ; GISEL-DAZ:       ; %bb.0:
273 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
274 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
275 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x4f800000
276 ; GISEL-DAZ-NEXT:    v_mul_f32_e64 v2, |v0|, v2
277 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, v1, |v0|
278 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v0, |v0|, v2, vcc
279 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
280 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
281 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
282 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
283 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
284 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
285 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
286 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
287 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
288 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
289 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
290 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
291 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
292 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
293   %x.fabs = call float @llvm.fabs.f32(float %x)
294   %result = call float @llvm.sqrt.f32(float %x.fabs)
295   ret float %result
298 define float @v_sqrt_f32_fneg_fabs(float %x) {
299 ; SDAG-IEEE-LABEL: v_sqrt_f32_fneg_fabs:
300 ; SDAG-IEEE:       ; %bb.0:
301 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
302 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x8f800000
303 ; SDAG-IEEE-NEXT:    s_mov_b32 s5, 0xcf800000
304 ; SDAG-IEEE-NEXT:    v_mul_f32_e64 v1, |v0|, s5
305 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
306 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, -|v0|, v1, vcc
307 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
308 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
309 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
310 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
311 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
312 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
313 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
314 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
315 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
316 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
317 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
318 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
319 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
320 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
321 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
323 ; GISEL-IEEE-LABEL: v_sqrt_f32_fneg_fabs:
324 ; GISEL-IEEE:       ; %bb.0:
325 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
326 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
327 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x4f800000
328 ; GISEL-IEEE-NEXT:    v_mul_f32_e64 v2, -|v0|, v2
329 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 vcc, v1, -|v0|
330 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, -|v0|, v2, vcc
331 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
332 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
333 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
334 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
335 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
336 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
337 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
338 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
339 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
340 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
341 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
342 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
343 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
344 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
345 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
347 ; SDAG-DAZ-LABEL: v_sqrt_f32_fneg_fabs:
348 ; SDAG-DAZ:       ; %bb.0:
349 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
350 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0x8f800000
351 ; SDAG-DAZ-NEXT:    s_mov_b32 s5, 0xcf800000
352 ; SDAG-DAZ-NEXT:    v_mul_f32_e64 v1, |v0|, s5
353 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
354 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v0, -|v0|, v1, vcc
355 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
356 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
357 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
358 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
359 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
360 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
361 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
362 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
363 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
364 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
365 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
366 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
367 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
368 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
370 ; GISEL-DAZ-LABEL: v_sqrt_f32_fneg_fabs:
371 ; GISEL-DAZ:       ; %bb.0:
372 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
373 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
374 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x4f800000
375 ; GISEL-DAZ-NEXT:    v_mul_f32_e64 v2, -|v0|, v2
376 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, v1, -|v0|
377 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v0, -|v0|, v2, vcc
378 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
379 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
380 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
381 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
382 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
383 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
384 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
385 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
386 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
387 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
388 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
389 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
390 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
391 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
392   %x.fabs = call float @llvm.fabs.f32(float %x)
393   %x.fabs.neg = fneg float %x.fabs
394   %result = call float @llvm.sqrt.f32(float %x.fabs.neg)
395   ret float %result
398 define float @v_sqrt_f32_ninf(float %x) {
399 ; SDAG-IEEE-LABEL: v_sqrt_f32_ninf:
400 ; SDAG-IEEE:       ; %bb.0:
401 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
402 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
403 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
404 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
405 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
406 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
407 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
408 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
409 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
410 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
411 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
412 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
413 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
414 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
415 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
416 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
417 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
418 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
419 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
420 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
422 ; GISEL-IEEE-LABEL: v_sqrt_f32_ninf:
423 ; GISEL-IEEE:       ; %bb.0:
424 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
425 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
426 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
427 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
428 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
429 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
430 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
431 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
432 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
433 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
434 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
435 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
436 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
437 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
438 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
439 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
440 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
441 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
442 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
443 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
445 ; SDAG-DAZ-LABEL: v_sqrt_f32_ninf:
446 ; SDAG-DAZ:       ; %bb.0:
447 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
448 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
449 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
450 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
451 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
452 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
453 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
454 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
455 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
456 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
457 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
458 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
459 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
460 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
461 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
462 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
463 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
464 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
465 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
467 ; GISEL-DAZ-LABEL: v_sqrt_f32_ninf:
468 ; GISEL-DAZ:       ; %bb.0:
469 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
470 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
471 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
472 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
473 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
474 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
475 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
476 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
477 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
478 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
479 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
480 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
481 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
482 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
483 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
484 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
485 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
486 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
487 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
488   %result = call ninf float @llvm.sqrt.f32(float %x)
489   ret float %result
492 define float @v_sqrt_f32_no_infs_attribute(float %x) #5 {
493 ; SDAG-IEEE-LABEL: v_sqrt_f32_no_infs_attribute:
494 ; SDAG-IEEE:       ; %bb.0:
495 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
496 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
497 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
498 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
499 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
500 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
501 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
502 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
503 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
504 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
505 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
506 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
507 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
508 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
509 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
510 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
511 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
512 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
513 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
514 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
516 ; GISEL-IEEE-LABEL: v_sqrt_f32_no_infs_attribute:
517 ; GISEL-IEEE:       ; %bb.0:
518 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
519 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
520 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
521 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
522 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
523 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
524 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
525 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
526 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
527 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
528 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
529 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
530 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
531 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
532 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
533 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
534 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
535 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
536 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
537 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
539 ; SDAG-DAZ-LABEL: v_sqrt_f32_no_infs_attribute:
540 ; SDAG-DAZ:       ; %bb.0:
541 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
542 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
543 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
544 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
545 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
546 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
547 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
548 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
549 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
550 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
551 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
552 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
553 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
554 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
555 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
556 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
557 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
558 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
559 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
561 ; GISEL-DAZ-LABEL: v_sqrt_f32_no_infs_attribute:
562 ; GISEL-DAZ:       ; %bb.0:
563 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
564 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
565 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
566 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
567 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
568 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
569 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
570 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
571 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
572 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
573 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
574 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
575 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
576 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
577 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
578 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
579 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
580 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
581 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
582   %result = call ninf float @llvm.sqrt.f32(float %x)
583   ret float %result
586 define float @v_sqrt_f32_nnan(float %x) {
587 ; SDAG-IEEE-LABEL: v_sqrt_f32_nnan:
588 ; SDAG-IEEE:       ; %bb.0:
589 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
590 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
591 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
592 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
593 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
594 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
595 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
596 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
597 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
598 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
599 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
600 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
601 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
602 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
603 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
604 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
605 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
606 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
607 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
608 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
610 ; GISEL-IEEE-LABEL: v_sqrt_f32_nnan:
611 ; GISEL-IEEE:       ; %bb.0:
612 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
613 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
614 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
615 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
616 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
617 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
618 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
619 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
620 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
621 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
622 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
623 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
624 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
625 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
626 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
627 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
628 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
629 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
630 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
631 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
633 ; SDAG-DAZ-LABEL: v_sqrt_f32_nnan:
634 ; SDAG-DAZ:       ; %bb.0:
635 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
636 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
637 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
638 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
639 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
640 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
641 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
642 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
643 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
644 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
645 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
646 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
647 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
648 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
649 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
650 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
651 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
652 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
653 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
655 ; GISEL-DAZ-LABEL: v_sqrt_f32_nnan:
656 ; GISEL-DAZ:       ; %bb.0:
657 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
658 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
659 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
660 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
661 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
662 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
663 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
664 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
665 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
666 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
667 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
668 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
669 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
670 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
671 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
672 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
673 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
674 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
675 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
676   %result = call nnan float @llvm.sqrt.f32(float %x)
677   ret float %result
680 define amdgpu_ps i32 @s_sqrt_f32(float inreg %x) {
681 ; SDAG-IEEE-LABEL: s_sqrt_f32:
682 ; SDAG-IEEE:       ; %bb.0:
683 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
684 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
685 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s0, v1
686 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, s0
687 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s0, v0
688 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v1, s[0:1]
689 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
690 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v1
691 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
692 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
693 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
694 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v1
695 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
696 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
697 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
698 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
699 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
700 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
701 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
702 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
703 ; SDAG-IEEE-NEXT:    v_readfirstlane_b32 s0, v0
704 ; SDAG-IEEE-NEXT:    ; return to shader part epilog
706 ; GISEL-IEEE-LABEL: s_sqrt_f32:
707 ; GISEL-IEEE:       ; %bb.0:
708 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
709 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x4f800000
710 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, s0
711 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, s0, v2
712 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s0, v0
713 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
714 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
715 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[0:1], -1, v1
716 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
717 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[0:1], 1, v1
718 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
719 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v3
720 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
721 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v5
722 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[0:1]
723 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
724 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
725 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
726 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
727 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
728 ; GISEL-IEEE-NEXT:    v_readfirstlane_b32 s0, v0
729 ; GISEL-IEEE-NEXT:    ; return to shader part epilog
731 ; SDAG-DAZ-LABEL: s_sqrt_f32:
732 ; SDAG-DAZ:       ; %bb.0:
733 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
734 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
735 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s0, v1
736 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, s0
737 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s0, v0
738 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
739 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
740 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
741 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
742 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
743 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
744 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
745 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
746 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
747 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
748 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
749 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
750 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
751 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
752 ; SDAG-DAZ-NEXT:    v_readfirstlane_b32 s0, v0
753 ; SDAG-DAZ-NEXT:    ; return to shader part epilog
755 ; GISEL-DAZ-LABEL: s_sqrt_f32:
756 ; GISEL-DAZ:       ; %bb.0:
757 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
758 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x4f800000
759 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, s0
760 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, s0, v2
761 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s0, v0
762 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
763 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
764 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
765 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
766 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
767 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
768 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
769 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
770 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
771 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
772 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
773 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
774 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
775 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
776 ; GISEL-DAZ-NEXT:    v_readfirstlane_b32 s0, v0
777 ; GISEL-DAZ-NEXT:    ; return to shader part epilog
778   %result = call float @llvm.sqrt.f32(float %x)
779   %cast = bitcast float %result to i32
780   %firstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
781   ret i32 %firstlane
784 define amdgpu_ps i32 @s_sqrt_f32_ninf(float inreg %x) {
785 ; SDAG-IEEE-LABEL: s_sqrt_f32_ninf:
786 ; SDAG-IEEE:       ; %bb.0:
787 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
788 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
789 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s0, v1
790 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, s0
791 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s0, v0
792 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v1, s[0:1]
793 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
794 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v1
795 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
796 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
797 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
798 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v1
799 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
800 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
801 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
802 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
803 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
804 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
805 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
806 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
807 ; SDAG-IEEE-NEXT:    v_readfirstlane_b32 s0, v0
808 ; SDAG-IEEE-NEXT:    ; return to shader part epilog
810 ; GISEL-IEEE-LABEL: s_sqrt_f32_ninf:
811 ; GISEL-IEEE:       ; %bb.0:
812 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
813 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x4f800000
814 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, s0
815 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, s0, v2
816 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s0, v0
817 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
818 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
819 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[0:1], -1, v1
820 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
821 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[0:1], 1, v1
822 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
823 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v3
824 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
825 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v5
826 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[0:1]
827 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
828 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
829 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
830 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
831 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
832 ; GISEL-IEEE-NEXT:    v_readfirstlane_b32 s0, v0
833 ; GISEL-IEEE-NEXT:    ; return to shader part epilog
835 ; SDAG-DAZ-LABEL: s_sqrt_f32_ninf:
836 ; SDAG-DAZ:       ; %bb.0:
837 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
838 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
839 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s0, v1
840 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, s0
841 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s0, v0
842 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
843 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
844 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
845 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
846 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
847 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
848 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
849 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
850 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
851 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
852 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
853 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
854 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
855 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
856 ; SDAG-DAZ-NEXT:    v_readfirstlane_b32 s0, v0
857 ; SDAG-DAZ-NEXT:    ; return to shader part epilog
859 ; GISEL-DAZ-LABEL: s_sqrt_f32_ninf:
860 ; GISEL-DAZ:       ; %bb.0:
861 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
862 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x4f800000
863 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, s0
864 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, s0, v2
865 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s0, v0
866 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
867 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
868 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
869 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
870 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
871 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
872 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
873 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
874 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
875 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
876 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
877 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
878 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
879 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
880 ; GISEL-DAZ-NEXT:    v_readfirstlane_b32 s0, v0
881 ; GISEL-DAZ-NEXT:    ; return to shader part epilog
882   %result = call ninf float @llvm.sqrt.f32(float %x)
883   %cast = bitcast float %result to i32
884   %firstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
885   ret i32 %firstlane
888 define amdgpu_ps i32 @s_sqrt_f32_afn(float inreg %x) {
889 ; GCN-LABEL: s_sqrt_f32_afn:
890 ; GCN:       ; %bb.0:
891 ; GCN-NEXT:    v_sqrt_f32_e32 v0, s0
892 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
893 ; GCN-NEXT:    ; return to shader part epilog
894   %result = call afn float @llvm.sqrt.f32(float %x)
895   %cast = bitcast float %result to i32
896   %firstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
897   ret i32 %firstlane
900 define amdgpu_ps i32 @s_sqrt_f32_afn_nnan_ninf(float inreg %x) {
901 ; GCN-LABEL: s_sqrt_f32_afn_nnan_ninf:
902 ; GCN:       ; %bb.0:
903 ; GCN-NEXT:    v_sqrt_f32_e32 v0, s0
904 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
905 ; GCN-NEXT:    ; return to shader part epilog
906   %result = call afn nnan ninf float @llvm.sqrt.f32(float %x)
907   %cast = bitcast float %result to i32
908   %firstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
909   ret i32 %firstlane
912 define float @v_sqrt_f32_nsz(float %x) {
913 ; SDAG-IEEE-LABEL: v_sqrt_f32_nsz:
914 ; SDAG-IEEE:       ; %bb.0:
915 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
916 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
917 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
918 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
919 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
920 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
921 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
922 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
923 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
924 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
925 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
926 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
927 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
928 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
929 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
930 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
931 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
932 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
933 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
934 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
936 ; GISEL-IEEE-LABEL: v_sqrt_f32_nsz:
937 ; GISEL-IEEE:       ; %bb.0:
938 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
939 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
940 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
941 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
942 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
943 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
944 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
945 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
946 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
947 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
948 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
949 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
950 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
951 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
952 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
953 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
954 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
955 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
956 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
957 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
959 ; SDAG-DAZ-LABEL: v_sqrt_f32_nsz:
960 ; SDAG-DAZ:       ; %bb.0:
961 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
962 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
963 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
964 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
965 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
966 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
967 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
968 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
969 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
970 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
971 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
972 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
973 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
974 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
975 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
976 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
977 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
978 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
979 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
981 ; GISEL-DAZ-LABEL: v_sqrt_f32_nsz:
982 ; GISEL-DAZ:       ; %bb.0:
983 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
984 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
985 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
986 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
987 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
988 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
989 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
990 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
991 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
992 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
993 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
994 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
995 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
996 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
997 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
998 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
999 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1000 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1001 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
1002   %result = call nsz float @llvm.sqrt.f32(float %x)
1003   ret float %result
1006 define float @v_sqrt_f32_nnan_ninf(float %x) {
1007 ; SDAG-IEEE-LABEL: v_sqrt_f32_nnan_ninf:
1008 ; SDAG-IEEE:       ; %bb.0:
1009 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1010 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
1011 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
1012 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1013 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1014 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1015 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1016 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1017 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1018 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
1019 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
1020 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
1021 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
1022 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
1023 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1024 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1025 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1026 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1027 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1028 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1030 ; GISEL-IEEE-LABEL: v_sqrt_f32_nnan_ninf:
1031 ; GISEL-IEEE:       ; %bb.0:
1032 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1033 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
1034 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1035 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
1036 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1037 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1038 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1039 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1040 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
1041 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
1042 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1043 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
1044 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
1045 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
1046 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1047 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1048 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1049 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1050 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1051 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1053 ; SDAG-DAZ-LABEL: v_sqrt_f32_nnan_ninf:
1054 ; SDAG-DAZ:       ; %bb.0:
1055 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1056 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
1057 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
1058 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1059 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1060 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
1061 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
1062 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
1063 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
1064 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
1065 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
1066 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
1067 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
1068 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1069 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1070 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
1071 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1072 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1073 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
1075 ; GISEL-DAZ-LABEL: v_sqrt_f32_nnan_ninf:
1076 ; GISEL-DAZ:       ; %bb.0:
1077 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1078 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
1079 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1080 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
1081 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1082 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
1083 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
1084 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
1085 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
1086 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
1087 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
1088 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
1089 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
1090 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1091 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1092 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
1093 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1094 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1095 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
1096   %result = call nnan ninf float @llvm.sqrt.f32(float %x)
1097   ret float %result
1100 define float @v_sqrt_f32_nnan_ninf_nsz(float %x) {
1101 ; SDAG-IEEE-LABEL: v_sqrt_f32_nnan_ninf_nsz:
1102 ; SDAG-IEEE:       ; %bb.0:
1103 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1104 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
1105 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
1106 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1107 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1108 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1109 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1110 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1111 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1112 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
1113 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
1114 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
1115 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
1116 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
1117 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1118 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1119 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1120 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1121 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1122 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1124 ; GISEL-IEEE-LABEL: v_sqrt_f32_nnan_ninf_nsz:
1125 ; GISEL-IEEE:       ; %bb.0:
1126 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1127 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
1128 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1129 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
1130 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1131 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1132 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1133 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1134 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
1135 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
1136 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1137 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
1138 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
1139 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
1140 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1141 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1142 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1143 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1144 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1145 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1147 ; SDAG-DAZ-LABEL: v_sqrt_f32_nnan_ninf_nsz:
1148 ; SDAG-DAZ:       ; %bb.0:
1149 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1150 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
1151 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
1152 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1153 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1154 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
1155 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
1156 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
1157 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
1158 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
1159 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
1160 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
1161 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
1162 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1163 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1164 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
1165 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1166 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1167 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
1169 ; GISEL-DAZ-LABEL: v_sqrt_f32_nnan_ninf_nsz:
1170 ; GISEL-DAZ:       ; %bb.0:
1171 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1172 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
1173 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1174 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
1175 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1176 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
1177 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
1178 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
1179 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
1180 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
1181 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
1182 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
1183 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
1184 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1185 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1186 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
1187 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1188 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1189 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
1190   %result = call nnan ninf nsz float @llvm.sqrt.f32(float %x)
1191   ret float %result
1194 define float @v_sqrt_f32_afn(float %x) {
1195 ; GCN-LABEL: v_sqrt_f32_afn:
1196 ; GCN:       ; %bb.0:
1197 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1198 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
1199 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1200   %result = call afn float @llvm.sqrt.f32(float %x)
1201   ret float %result
1204 define float @v_sqrt_f32_afn_nsz(float %x) {
1205 ; GCN-LABEL: v_sqrt_f32_afn_nsz:
1206 ; GCN:       ; %bb.0:
1207 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1208 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
1209 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1210   %result = call afn nsz float @llvm.sqrt.f32(float %x)
1211   ret float %result
1214 define <2 x float> @v_sqrt_v2f32_afn(<2 x float> %x) {
1215 ; GCN-LABEL: v_sqrt_v2f32_afn:
1216 ; GCN:       ; %bb.0:
1217 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1218 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
1219 ; GCN-NEXT:    v_sqrt_f32_e32 v1, v1
1220 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1221   %result = call afn <2 x float> @llvm.sqrt.v2f32(<2 x float> %x)
1222   ret <2 x float> %result
1225 define float @v_sqrt_f32_afn_nnan(float %x) {
1226 ; GCN-LABEL: v_sqrt_f32_afn_nnan:
1227 ; GCN:       ; %bb.0:
1228 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1229 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
1230 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1231   %result = call afn nnan float @llvm.sqrt.f32(float %x)
1232   ret float %result
1235 define float @v_sqrt_f32_fabs_afn_ninf(float %x) {
1236 ; GCN-LABEL: v_sqrt_f32_fabs_afn_ninf:
1237 ; GCN:       ; %bb.0:
1238 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1239 ; GCN-NEXT:    v_sqrt_f32_e64 v0, |v0|
1240 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1241   %fabs = call float @llvm.fabs.f32(float %x)
1242   %result = call afn ninf float @llvm.sqrt.f32(float %fabs)
1243   ret float %result
1246 define float @v_sqrt_f32_afn_nnan_ninf(float %x) {
1247 ; GCN-LABEL: v_sqrt_f32_afn_nnan_ninf:
1248 ; GCN:       ; %bb.0:
1249 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1250 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
1251 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1252   %result = call afn nnan ninf float @llvm.sqrt.f32(float %x)
1253   ret float %result
1256 define <2 x float> @v_sqrt_v2f32_afn_nnan_ninf(<2 x float> %x) {
1257 ; GCN-LABEL: v_sqrt_v2f32_afn_nnan_ninf:
1258 ; GCN:       ; %bb.0:
1259 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1260 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
1261 ; GCN-NEXT:    v_sqrt_f32_e32 v1, v1
1262 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1263   %result = call afn nnan ninf <2 x float> @llvm.sqrt.v2f32(<2 x float> %x)
1264   ret <2 x float> %result
1267 define float @v_sqrt_f32_afn_nnan_ninf_nsz(float %x) {
1268 ; GCN-LABEL: v_sqrt_f32_afn_nnan_ninf_nsz:
1269 ; GCN:       ; %bb.0:
1270 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1271 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
1272 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1273   %result = call afn nnan ninf nsz float @llvm.sqrt.f32(float %x)
1274   ret float %result
1277 define float @v_sqrt_f32__approx_func_fp_math(float %x) #2 {
1278 ; GCN-LABEL: v_sqrt_f32__approx_func_fp_math:
1279 ; GCN:       ; %bb.0:
1280 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1281 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
1282 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1283   %result = call nsz float @llvm.sqrt.f32(float %x)
1284   ret float %result
1287 define float @v_sqrt_f32__enough_unsafe_attrs(float %x) #3 {
1288 ; GCN-LABEL: v_sqrt_f32__enough_unsafe_attrs:
1289 ; GCN:       ; %bb.0:
1290 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1291 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
1292 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1293   %result = call nsz float @llvm.sqrt.f32(float %x)
1294   ret float %result
1297 define float @v_sqrt_f32__unsafe_attr(float %x) #4 {
1298 ; GCN-LABEL: v_sqrt_f32__unsafe_attr:
1299 ; GCN:       ; %bb.0:
1300 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1301 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
1302 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1303   %result = call nsz float @llvm.sqrt.f32(float %x)
1304   ret float %result
1307 define <2 x float> @v_sqrt_v2f32(<2 x float> %x) {
1308 ; SDAG-IEEE-LABEL: v_sqrt_v2f32:
1309 ; SDAG-IEEE:       ; %bb.0:
1310 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1311 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, 0xf800000
1312 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1313 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v0
1314 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1315 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v2, v0
1316 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v2
1317 ; SDAG-IEEE-NEXT:    v_fma_f32 v4, -v3, v2, v0
1318 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v4
1319 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v2, v3, s[4:5]
1320 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v2
1321 ; SDAG-IEEE-NEXT:    v_fma_f32 v2, -v4, v2, v0
1322 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v2
1323 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v4, s[4:5]
1324 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
1325 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
1326 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x4f800000, v1
1327 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v1
1328 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
1329 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v4, v1
1330 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v3, 0x260
1331 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v3
1332 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v0, s[4:5]
1333 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v4
1334 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, v1
1335 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
1336 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v4, v2, s[4:5]
1337 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], 1, v4
1338 ; SDAG-IEEE-NEXT:    v_fma_f32 v4, -v5, v4, v1
1339 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v4
1340 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[4:5]
1341 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v2
1342 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
1343 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v3
1344 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
1345 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1347 ; GISEL-IEEE-LABEL: v_sqrt_v2f32:
1348 ; GISEL-IEEE:       ; %bb.0:
1349 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1350 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
1351 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1352 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1353 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1354 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v2, v0
1355 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0xf800000
1356 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], -1, v2
1357 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v2, v0
1358 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v2
1359 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v2, v0
1360 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
1361 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v4, s[4:5]
1362 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v7
1363 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
1364 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v2
1365 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
1366 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v5, 0x4f800000, v1
1367 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v1
1368 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
1369 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v1
1370 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
1371 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v4
1372 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v0, s[4:5]
1373 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v3
1374 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v2, v3, v1
1375 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v3
1376 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v3, v1
1377 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
1378 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[4:5]
1379 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v7
1380 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
1381 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
1382 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
1383 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v4
1384 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
1385 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1387 ; SDAG-DAZ-LABEL: v_sqrt_v2f32:
1388 ; SDAG-DAZ:       ; %bb.0:
1389 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1390 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
1391 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1392 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1393 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1394 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v2, v0
1395 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, v0, v2
1396 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0.5, v2
1397 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v3, 0.5
1398 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v4, v3
1399 ; SDAG-DAZ-NEXT:    v_fma_f32 v5, -v3, v3, v0
1400 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v4, v2
1401 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v5, v2, v3
1402 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
1403 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
1404 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v1
1405 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v1
1406 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
1407 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v3, v1
1408 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v4, 0x260
1409 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v4
1410 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v0, v2, v0, s[4:5]
1411 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v1, v3
1412 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
1413 ; SDAG-DAZ-NEXT:    v_fma_f32 v5, -v3, v2, 0.5
1414 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v5, v2
1415 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v2, v2, v1
1416 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
1417 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v6, v3, v2
1418 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
1419 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
1420 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v1, v4
1421 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
1422 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
1424 ; GISEL-DAZ-LABEL: v_sqrt_v2f32:
1425 ; GISEL-DAZ:       ; %bb.0:
1426 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1427 ; GISEL-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
1428 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1429 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1430 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1431 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v2, v0
1432 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0xf800000
1433 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, v0, v2
1434 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0.5, v2
1435 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v2, v4, 0.5
1436 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, v4, v5, v4
1437 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v5, v2
1438 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v4, v4, v0
1439 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v5, v2, v4
1440 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v2
1441 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
1442 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0x4f800000, v1
1443 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v1
1444 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
1445 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v3, v1
1446 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0x260
1447 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v4
1448 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v0, v2, v0, s[4:5]
1449 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v1, v3
1450 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
1451 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v3, v2, 0.5
1452 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v5, v2
1453 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
1454 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v2, v2, v1
1455 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v5, v3, v2
1456 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
1457 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
1458 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v1, v4
1459 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
1460 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
1461   %result = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x)
1462   ret <2 x float> %result
1465 define <3 x float> @v_sqrt_v3f32(<3 x float> %x) {
1466 ; SDAG-IEEE-LABEL: v_sqrt_v3f32:
1467 ; SDAG-IEEE:       ; %bb.0:
1468 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1469 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, 0xf800000
1470 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v0
1471 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v0
1472 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
1473 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v3, v0
1474 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], -1, v3
1475 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v4, v3, v0
1476 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
1477 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, v3, v4, s[4:5]
1478 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], 1, v3
1479 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v5, v3, v0
1480 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v3
1481 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v4, v5, s[4:5]
1482 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1483 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1484 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v5, 0x4f800000, v1
1485 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v1
1486 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
1487 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v5, v1
1488 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
1489 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v4
1490 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v3, v0, s[4:5]
1491 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v5
1492 ; SDAG-IEEE-NEXT:    v_fma_f32 v6, -v3, v5, v1
1493 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v6
1494 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v5, v3, s[4:5]
1495 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v5
1496 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v6, v5, v1
1497 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
1498 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[4:5]
1499 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
1500 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
1501 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v5, 0x4f800000, v2
1502 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v2
1503 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v5, vcc
1504 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v5, v2
1505 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v1, v4
1506 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v3, v1, s[4:5]
1507 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v5
1508 ; SDAG-IEEE-NEXT:    v_fma_f32 v6, -v3, v5, v2
1509 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v6
1510 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v5, v3, s[4:5]
1511 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v5
1512 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v6, v5, v2
1513 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
1514 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[4:5]
1515 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
1516 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
1517 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v2, v4
1518 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
1519 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1521 ; GISEL-IEEE-LABEL: v_sqrt_v3f32:
1522 ; GISEL-IEEE:       ; %bb.0:
1523 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1524 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
1525 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v0
1526 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1527 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
1528 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v0
1529 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0xf800000
1530 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], -1, v3
1531 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v5, v3, v0
1532 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v7, s[4:5], 1, v3
1533 ; GISEL-IEEE-NEXT:    v_fma_f32 v8, -v7, v3, v0
1534 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v6
1535 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v5, s[4:5]
1536 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v8
1537 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[4:5]
1538 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
1539 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
1540 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v6, 0x4f800000, v1
1541 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v4, v1
1542 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
1543 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v6, v1
1544 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v5, 0x260
1545 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v5
1546 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, v3, v0, s[4:5]
1547 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v6
1548 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v3, v6, v1
1549 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v8, s[4:5], 1, v6
1550 ; GISEL-IEEE-NEXT:    v_fma_f32 v9, -v8, v6, v1
1551 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v7
1552 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v6, v3, s[4:5]
1553 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v9
1554 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v8, s[4:5]
1555 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v6, 0x37800000, v3
1556 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v6, vcc
1557 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v6, 0x4f800000, v2
1558 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v4, v2
1559 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc
1560 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v4, v2
1561 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v1, v5
1562 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v3, v1, s[4:5]
1563 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v4
1564 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v3, v4, v2
1565 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v7, s[4:5], 1, v4
1566 ; GISEL-IEEE-NEXT:    v_fma_f32 v8, -v7, v4, v2
1567 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v6
1568 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v4, v3, s[4:5]
1569 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v8
1570 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[4:5]
1571 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1572 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1573 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v2, v5
1574 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
1575 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1577 ; SDAG-DAZ-LABEL: v_sqrt_v3f32:
1578 ; SDAG-DAZ:       ; %bb.0:
1579 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1580 ; SDAG-DAZ-NEXT:    s_mov_b32 s6, 0xf800000
1581 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v0
1582 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v0
1583 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
1584 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v3, v0
1585 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, v0, v3
1586 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
1587 ; SDAG-DAZ-NEXT:    v_fma_f32 v5, -v3, v4, 0.5
1588 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, v4, v5, v4
1589 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v4, v4, v0
1590 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
1591 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v4
1592 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1593 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1594 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x4f800000, v1
1595 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v1
1596 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
1597 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v4, v1
1598 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v5, 0x260
1599 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v5
1600 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v0, v3, v0, s[4:5]
1601 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, v1, v4
1602 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0.5, v4
1603 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v4, v3, 0.5
1604 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v6, v3
1605 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, v4, v6, v4
1606 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v6, 0x4f800000, v2
1607 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e64 s[4:5], s6, v2
1608 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
1609 ; SDAG-DAZ-NEXT:    v_fma_f32 v7, -v3, v3, v1
1610 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v6, v2
1611 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v7, v4, v3
1612 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1613 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1614 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v1, v5
1615 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1616 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, v2, v6
1617 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0.5, v6
1618 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v4, v3, 0.5
1619 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v6, v3
1620 ; SDAG-DAZ-NEXT:    v_fma_f32 v7, -v3, v3, v2
1621 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, v4, v6, v4
1622 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v7, v4, v3
1623 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1624 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[4:5]
1625 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v2, v5
1626 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
1627 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
1629 ; GISEL-DAZ-LABEL: v_sqrt_v3f32:
1630 ; GISEL-DAZ:       ; %bb.0:
1631 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1632 ; GISEL-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
1633 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v0
1634 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1635 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
1636 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v3, v0
1637 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0xf800000
1638 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, v0, v3
1639 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
1640 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v3, v5, 0.5
1641 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, v5, v6, v5
1642 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v6, v3
1643 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v5, v5, v0
1644 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v5
1645 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
1646 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
1647 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0x4f800000, v1
1648 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v4, v1
1649 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
1650 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v5, v1
1651 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v6, 0x260
1652 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v6
1653 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v0, v3, v0, s[4:5]
1654 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, v1, v5
1655 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0.5, v5
1656 ; GISEL-DAZ-NEXT:    v_fma_f32 v7, -v5, v3, 0.5
1657 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v7, v3
1658 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, v5, v7, v5
1659 ; GISEL-DAZ-NEXT:    v_fma_f32 v7, -v3, v3, v1
1660 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v7, v5, v3
1661 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v7, 0x4f800000, v2
1662 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 s[4:5], v4, v2
1663 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v2, v2, v7, s[4:5]
1664 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v4, v2
1665 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
1666 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
1667 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v1, v6
1668 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1669 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, v2, v4
1670 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0.5, v4
1671 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v4, v3, 0.5
1672 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
1673 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, v4, v5, v4
1674 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v3, v3, v2
1675 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v5, v4, v3
1676 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1677 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[4:5]
1678 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v2, v6
1679 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
1680 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
1681   %result = call <3 x float> @llvm.sqrt.v3f32(<3 x float> %x)
1682   ret <3 x float> %result
1685 ; fpmath should be ignored
1686 define float @v_sqrt_f32_ulp05(float %x) {
1687 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp05:
1688 ; SDAG-IEEE:       ; %bb.0:
1689 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1690 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
1691 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
1692 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1693 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1694 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1695 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1696 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1697 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1698 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
1699 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
1700 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
1701 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
1702 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
1703 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1704 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1705 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1706 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1707 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1708 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1710 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp05:
1711 ; GISEL-IEEE:       ; %bb.0:
1712 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1713 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
1714 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1715 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
1716 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1717 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1718 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1719 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1720 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
1721 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
1722 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1723 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
1724 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
1725 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
1726 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1727 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1728 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1729 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1730 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1731 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1733 ; SDAG-DAZ-LABEL: v_sqrt_f32_ulp05:
1734 ; SDAG-DAZ:       ; %bb.0:
1735 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1736 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
1737 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
1738 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1739 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1740 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
1741 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
1742 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
1743 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
1744 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
1745 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
1746 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
1747 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
1748 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1749 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1750 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
1751 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1752 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1753 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
1755 ; GISEL-DAZ-LABEL: v_sqrt_f32_ulp05:
1756 ; GISEL-DAZ:       ; %bb.0:
1757 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1758 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
1759 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1760 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
1761 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1762 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
1763 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
1764 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
1765 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
1766 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
1767 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
1768 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
1769 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
1770 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1771 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1772 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
1773 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1774 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1775 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
1776   %result = call float @llvm.sqrt.f32(float %x), !fpmath !0
1777   ret float %result
1780 ; fpmath should be used with DAZ only
1781 define float @v_sqrt_f32_ulp1(float %x) {
1782 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp1:
1783 ; SDAG-IEEE:       ; %bb.0:
1784 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1785 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
1786 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
1787 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1788 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1789 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1790 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1791 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1792 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1793 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
1794 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
1795 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
1796 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
1797 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
1798 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1799 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1800 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1801 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1802 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1803 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1805 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp1:
1806 ; GISEL-IEEE:       ; %bb.0:
1807 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1808 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
1809 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1810 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
1811 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1812 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1813 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1814 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1815 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
1816 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
1817 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1818 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
1819 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
1820 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
1821 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1822 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1823 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1824 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1825 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1826 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1828 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp1:
1829 ; GCN-DAZ:       ; %bb.0:
1830 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1831 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
1832 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
1833   %result = call float @llvm.sqrt.f32(float %x), !fpmath !1
1834   ret float %result
1837 ; fpmath should always be used
1838 define float @v_sqrt_f32_ulp2(float %x) {
1839 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2:
1840 ; SDAG-IEEE:       ; %bb.0:
1841 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1842 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
1843 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1844 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1845 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1846 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1847 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1848 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1849 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1850 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1852 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2:
1853 ; GISEL-IEEE:       ; %bb.0:
1854 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1855 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
1856 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1857 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
1858 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1859 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1860 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1861 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1862 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1864 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp2:
1865 ; GCN-DAZ:       ; %bb.0:
1866 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1867 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
1868 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
1869   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
1870   ret float %result
1873 ; fpmath should always be used
1874 define float @v_sqrt_f32_ulp25(float %x) {
1875 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp25:
1876 ; SDAG-IEEE:       ; %bb.0:
1877 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1878 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
1879 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1880 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1881 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1882 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1883 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1884 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1885 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1886 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1888 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp25:
1889 ; GISEL-IEEE:       ; %bb.0:
1890 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1891 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
1892 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1893 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
1894 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1895 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1896 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1897 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1898 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1900 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp25:
1901 ; GCN-DAZ:       ; %bb.0:
1902 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1903 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
1904 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
1905   %result = call float @llvm.sqrt.f32(float %x), !fpmath !3
1906   ret float %result
1909 ; fpmath should always be used
1910 define float @v_sqrt_f32_ulp3(float %x) {
1911 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp3:
1912 ; SDAG-IEEE:       ; %bb.0:
1913 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1914 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
1915 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1916 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1917 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1918 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1919 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1920 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1921 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1922 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1924 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp3:
1925 ; GISEL-IEEE:       ; %bb.0:
1926 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1927 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
1928 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1929 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
1930 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1931 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1932 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1933 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1934 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1936 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp3:
1937 ; GCN-DAZ:       ; %bb.0:
1938 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1939 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
1940 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
1941   %result = call float @llvm.sqrt.f32(float %x), !fpmath !4
1942   ret float %result
1945 define float @v_sqrt_f32_ulp2_fabs(float %x) {
1946 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_fabs:
1947 ; SDAG-IEEE:       ; %bb.0:
1948 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1949 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
1950 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
1951 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, s[4:5]
1952 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1953 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e64 v0, |v0|, v1
1954 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1955 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, s[4:5]
1956 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1957 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1959 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_fabs:
1960 ; GISEL-IEEE:       ; %bb.0:
1961 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1962 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
1963 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v1
1964 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, s[4:5]
1965 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e64 v0, |v0|, v1
1966 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1967 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, s[4:5]
1968 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1969 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1971 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp2_fabs:
1972 ; GCN-DAZ:       ; %bb.0:
1973 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1974 ; GCN-DAZ-NEXT:    v_sqrt_f32_e64 v0, |v0|
1975 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
1976   %x.fabs = call float @llvm.fabs.f32(float %x)
1977   %result = call float @llvm.sqrt.f32(float %x.fabs), !fpmath !2
1978   ret float %result
1981 define <2 x float> @v_sqrt_v2f32_ulp1(<2 x float> %x) {
1982 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp1:
1983 ; SDAG-IEEE:       ; %bb.0:
1984 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1985 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, 0xf800000
1986 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1987 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v0
1988 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1989 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v2, v0
1990 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v2
1991 ; SDAG-IEEE-NEXT:    v_fma_f32 v4, -v3, v2, v0
1992 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v4
1993 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v2, v3, s[4:5]
1994 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v2
1995 ; SDAG-IEEE-NEXT:    v_fma_f32 v2, -v4, v2, v0
1996 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v2
1997 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v4, s[4:5]
1998 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
1999 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
2000 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x4f800000, v1
2001 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v1
2002 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
2003 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v4, v1
2004 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v3, 0x260
2005 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v3
2006 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v0, s[4:5]
2007 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v4
2008 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, v1
2009 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
2010 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v4, v2, s[4:5]
2011 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], 1, v4
2012 ; SDAG-IEEE-NEXT:    v_fma_f32 v4, -v5, v4, v1
2013 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v4
2014 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[4:5]
2015 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v2
2016 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
2017 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v3
2018 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
2019 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2021 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp1:
2022 ; GISEL-IEEE:       ; %bb.0:
2023 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2024 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
2025 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
2026 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2027 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
2028 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v2, v0
2029 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0xf800000
2030 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], -1, v2
2031 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v2, v0
2032 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v2
2033 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v2, v0
2034 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
2035 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v4, s[4:5]
2036 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v7
2037 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
2038 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v2
2039 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
2040 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v5, 0x4f800000, v1
2041 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v1
2042 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
2043 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v1
2044 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
2045 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v4
2046 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v0, s[4:5]
2047 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v3
2048 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v2, v3, v1
2049 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v3
2050 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v3, v1
2051 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
2052 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[4:5]
2053 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v7
2054 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
2055 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
2056 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
2057 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v4
2058 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
2059 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2061 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp1:
2062 ; GCN-DAZ:       ; %bb.0:
2063 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2064 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2065 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2066 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2067   %result = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !1
2068   ret <2 x float> %result
2071 ; fpmath should always be used
2072 define <2 x float> @v_sqrt_v2f32_ulp2(<2 x float> %x) {
2073 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2:
2074 ; SDAG-IEEE:       ; %bb.0:
2075 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2076 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2077 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2078 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2079 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2080 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2081 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2082 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[4:5]
2083 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2084 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2085 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2086 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2087 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2088 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2089 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2090 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2091 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2093 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2:
2094 ; GISEL-IEEE:       ; %bb.0:
2095 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2096 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2097 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2098 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 32, vcc
2099 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2100 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2101 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 32, s[4:5]
2102 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2103 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2104 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2105 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2106 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2107 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2108 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2109 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2111 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2:
2112 ; GCN-DAZ:       ; %bb.0:
2113 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2114 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2115 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2116 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2117   %result = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !2
2118   ret <2 x float> %result
2121 define <2 x float> @v_sqrt_v2f32_ulp1_fabs(<2 x float> %x) {
2122 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp1_fabs:
2123 ; SDAG-IEEE:       ; %bb.0:
2124 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2125 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, 0xf800000
2126 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0x4f800000
2127 ; SDAG-IEEE-NEXT:    v_mul_f32_e64 v2, |v0|, s7
2128 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
2129 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, |v0|, v2, vcc
2130 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v2, v0
2131 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v2
2132 ; SDAG-IEEE-NEXT:    v_fma_f32 v4, -v3, v2, v0
2133 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v4
2134 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v2, v3, s[4:5]
2135 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v2
2136 ; SDAG-IEEE-NEXT:    v_fma_f32 v2, -v4, v2, v0
2137 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v2
2138 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v4, s[4:5]
2139 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
2140 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
2141 ; SDAG-IEEE-NEXT:    v_mul_f32_e64 v4, |v1|, s7
2142 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s6
2143 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, |v1|, v4, vcc
2144 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v4, v1
2145 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v3, 0x260
2146 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v3
2147 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v0, s[4:5]
2148 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v4
2149 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, v1
2150 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
2151 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v4, v2, s[4:5]
2152 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], 1, v4
2153 ; SDAG-IEEE-NEXT:    v_fma_f32 v4, -v5, v4, v1
2154 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v4
2155 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[4:5]
2156 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v2
2157 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
2158 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v3
2159 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
2160 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2162 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp1_fabs:
2163 ; GISEL-IEEE:       ; %bb.0:
2164 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2165 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
2166 ; GISEL-IEEE-NEXT:    s_mov_b32 s5, 0x4f800000
2167 ; GISEL-IEEE-NEXT:    v_mul_f32_e64 v2, |v0|, s5
2168 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 vcc, s4, |v0|
2169 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, |v0|, v2, vcc
2170 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v2, v0
2171 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0xf800000
2172 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x4f800000
2173 ; GISEL-IEEE-NEXT:    v_mul_f32_e64 v4, |v1|, v4
2174 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], -1, v2
2175 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v5, v2, v0
2176 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v7, s[4:5], 1, v2
2177 ; GISEL-IEEE-NEXT:    v_fma_f32 v8, -v7, v2, v0
2178 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v6
2179 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[4:5]
2180 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v8
2181 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v7, s[4:5]
2182 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v5, 0x37800000, v2
2183 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v5, vcc
2184 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 vcc, v3, |v1|
2185 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, |v1|, v4, vcc
2186 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v1
2187 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v5, 0x260
2188 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v5
2189 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v0, s[4:5]
2190 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v3
2191 ; GISEL-IEEE-NEXT:    v_fma_f32 v4, -v2, v3, v1
2192 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v3
2193 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v3, v1
2194 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v4
2195 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[4:5]
2196 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v7
2197 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
2198 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
2199 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
2200 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v5
2201 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
2202 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2204 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp1_fabs:
2205 ; GCN-DAZ:       ; %bb.0:
2206 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2207 ; GCN-DAZ-NEXT:    v_sqrt_f32_e64 v0, |v0|
2208 ; GCN-DAZ-NEXT:    v_sqrt_f32_e64 v1, |v1|
2209 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2210   %x.fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %x)
2211   %result = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x.fabs), !fpmath !1
2212   ret <2 x float> %result
2215 ; fpmath should always be used
2216 define <2 x float> @v_sqrt_v2f32_ulp2_fabs(<2 x float> %x) {
2217 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2_fabs:
2218 ; SDAG-IEEE:       ; %bb.0:
2219 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2220 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, 0x800000
2221 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s6
2222 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[4:5]
2223 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2224 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[6:7], |v1|, s6
2225 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e64 v0, |v0|, v2
2226 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[6:7]
2227 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2228 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2229 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e64 v1, |v1|, v2
2230 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2231 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2232 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2233 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[6:7]
2234 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2235 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2237 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2_fabs:
2238 ; GISEL-IEEE:       ; %bb.0:
2239 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2240 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, 0x800000
2241 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s6
2242 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 32, s[4:5]
2243 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[6:7], |v1|, s6
2244 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e64 v0, |v0|, v2
2245 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 32, s[6:7]
2246 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2247 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e64 v1, |v1|, v2
2248 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2249 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2250 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2251 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[6:7]
2252 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2253 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2255 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2_fabs:
2256 ; GCN-DAZ:       ; %bb.0:
2257 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2258 ; GCN-DAZ-NEXT:    v_sqrt_f32_e64 v0, |v0|
2259 ; GCN-DAZ-NEXT:    v_sqrt_f32_e64 v1, |v1|
2260 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2261   %x.fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %x)
2262   %result = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x.fabs), !fpmath !2
2263   ret <2 x float> %result
2266 ; afn is stronger than the fpmath
2267 define float @v_sqrt_f32_afn_ulp1(float %x) {
2268 ; GCN-LABEL: v_sqrt_f32_afn_ulp1:
2269 ; GCN:       ; %bb.0:
2270 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2271 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
2272 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2273   %result = call afn float @llvm.sqrt.f32(float %x), !fpmath !1
2274   ret float %result
2277 ; afn is stronger than the fpmath
2278 define float @v_sqrt_f32_afn_ulp2(float %x) {
2279 ; GCN-LABEL: v_sqrt_f32_afn_ulp2:
2280 ; GCN:       ; %bb.0:
2281 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2282 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
2283 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2284   %result = call afn float @llvm.sqrt.f32(float %x), !fpmath !2
2285   ret float %result
2288 define <2 x float> @v_sqrt_v2f32_afn_ulp1(<2 x float> %x) {
2289 ; GCN-LABEL: v_sqrt_v2f32_afn_ulp1:
2290 ; GCN:       ; %bb.0:
2291 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2292 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
2293 ; GCN-NEXT:    v_sqrt_f32_e32 v1, v1
2294 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2295   %result = call afn <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !1
2296   ret <2 x float> %result
2299 ; fpmath should always be used
2300 define <2 x float> @v_sqrt_v2f32_afn_ulp2(<2 x float> %x) {
2301 ; GCN-LABEL: v_sqrt_v2f32_afn_ulp2:
2302 ; GCN:       ; %bb.0:
2303 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2304 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
2305 ; GCN-NEXT:    v_sqrt_f32_e32 v1, v1
2306 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2307   %result = call afn <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !2
2308   ret <2 x float> %result
2311 define float @v_sqrt_f32_ulp2_noncontractable_rcp(float %x) {
2312 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_noncontractable_rcp:
2313 ; SDAG-IEEE:       ; %bb.0:
2314 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2315 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2316 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2317 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
2318 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
2319 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2320 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2321 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
2322 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2323 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2324 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v1, v0
2325 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2326 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v0, v1, vcc
2327 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v1, v1
2328 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2329 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2330 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v1, v0
2331 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2333 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_noncontractable_rcp:
2334 ; GISEL-IEEE:       ; %bb.0:
2335 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2336 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
2337 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2338 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
2339 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2340 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2341 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
2342 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2343 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2344 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v1, v0
2345 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
2346 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v0, v1, vcc
2347 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v1, v1
2348 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2349 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2350 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v1, v0
2351 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2353 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp2_noncontractable_rcp:
2354 ; GCN-DAZ:       ; %bb.0:
2355 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2356 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2357 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2358 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2359   %sqrt = call contract float @llvm.sqrt.f32(float %x), !fpmath !4
2360   %result = fdiv float 1.0, %sqrt, !fpmath !3
2361   ret float %result
2364 define float @v_sqrt_f32_ulp2_contractable_rcp(float %x) {
2365 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_rcp:
2366 ; SDAG-IEEE:       ; %bb.0:
2367 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2368 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2369 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4b800000
2370 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2371 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2372 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
2373 ; SDAG-IEEE-NEXT:    v_rsq_f32_e32 v0, v0
2374 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x45800000
2375 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2376 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
2377 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2379 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_rcp:
2380 ; GISEL-IEEE:       ; %bb.0:
2381 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2382 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
2383 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x4b800000
2384 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2385 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2386 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
2387 ; GISEL-IEEE-NEXT:    v_rsq_f32_e32 v0, v0
2388 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x45800000
2389 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2390 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
2391 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2393 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp2_contractable_rcp:
2394 ; GCN-DAZ:       ; %bb.0:
2395 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2396 ; GCN-DAZ-NEXT:    v_rsq_f32_e32 v0, v0
2397 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2398   %sqrt = call contract float @llvm.sqrt.f32(float %x), !fpmath !4
2399   %result = fdiv contract float 1.0, %sqrt, !fpmath !3
2400   ret float %result
2403 define float @v_sqrt_f32_ulp2_noncontractable_fdiv(float %x, float %y) {
2404 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_noncontractable_fdiv:
2405 ; SDAG-IEEE:       ; %bb.0:
2406 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2407 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2408 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2409 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2410 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2411 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2412 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2413 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2414 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2415 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v1
2416 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2417 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2418 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2419 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2420 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2421 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2422 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2423 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v1, v3, vcc
2424 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2425 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
2426 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v1, v0
2427 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2428 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2430 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_noncontractable_fdiv:
2431 ; GISEL-IEEE:       ; %bb.0:
2432 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2433 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x800000
2434 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v2
2435 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 32, vcc
2436 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2437 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2438 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2439 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2440 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v1
2441 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2442 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2443 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2444 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2445 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2446 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2447 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2448 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v1, v3, vcc
2449 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2450 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
2451 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v1, v0
2452 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2453 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2455 ; SDAG-DAZ-LABEL: v_sqrt_f32_ulp2_noncontractable_fdiv:
2456 ; SDAG-DAZ:       ; %bb.0:
2457 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2458 ; SDAG-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2459 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0x6f800000
2460 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x2f800000
2461 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
2462 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2463 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v2
2464 ; SDAG-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2465 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v1, v0
2466 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2467 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
2469 ; GISEL-DAZ-LABEL: v_sqrt_f32_ulp2_noncontractable_fdiv:
2470 ; GISEL-DAZ:       ; %bb.0:
2471 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2472 ; GISEL-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2473 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x6f800000
2474 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0x2f800000
2475 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, v2
2476 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, 1.0, v3, vcc
2477 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v2
2478 ; GISEL-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2479 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v1, v0
2480 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2481 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
2482   %sqrt = call contract float @llvm.sqrt.f32(float %x), !fpmath !4
2483   %result = fdiv float %y, %sqrt, !fpmath !3
2484   ret float %result
2487 define float @v_sqrt_f32_ulp2_contractable_fdiv(float %x, float %y) {
2488 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_fdiv:
2489 ; SDAG-IEEE:       ; %bb.0:
2490 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2491 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2492 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2493 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2494 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2495 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2496 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2497 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2498 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2499 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v1
2500 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2501 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2502 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2503 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2504 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2505 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2506 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2507 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v1, v3, vcc
2508 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2509 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
2510 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v1, v0
2511 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2512 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2514 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_fdiv:
2515 ; GISEL-IEEE:       ; %bb.0:
2516 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2517 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x800000
2518 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v2
2519 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 32, vcc
2520 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2521 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2522 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2523 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2524 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v1
2525 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2526 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2527 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2528 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2529 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2530 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2531 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2532 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v1, v3, vcc
2533 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2534 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
2535 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v1, v0
2536 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2537 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2539 ; SDAG-DAZ-LABEL: v_sqrt_f32_ulp2_contractable_fdiv:
2540 ; SDAG-DAZ:       ; %bb.0:
2541 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2542 ; SDAG-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2543 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0x6f800000
2544 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x2f800000
2545 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
2546 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2547 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v2
2548 ; SDAG-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2549 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v1, v0
2550 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2551 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
2553 ; GISEL-DAZ-LABEL: v_sqrt_f32_ulp2_contractable_fdiv:
2554 ; GISEL-DAZ:       ; %bb.0:
2555 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2556 ; GISEL-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2557 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x6f800000
2558 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0x2f800000
2559 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, v2
2560 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, 1.0, v3, vcc
2561 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v2
2562 ; GISEL-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2563 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v1, v0
2564 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2565 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
2566   %sqrt = call contract float @llvm.sqrt.f32(float %x), !fpmath !4
2567   %result = fdiv contract float %y, %sqrt, !fpmath !3
2568   ret float %result
2571 define float @v_sqrt_f32_ulp2_contractable_fdiv_arcp(float %x, float %y) {
2572 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_fdiv_arcp:
2573 ; SDAG-IEEE:       ; %bb.0:
2574 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2575 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2576 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2577 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2578 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2579 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2580 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2581 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2582 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2583 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2584 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2585 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2586 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2587 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2588 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2589 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2590 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2591 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v0, v1, v0
2592 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2594 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_fdiv_arcp:
2595 ; GISEL-IEEE:       ; %bb.0:
2596 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2597 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x800000
2598 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v2
2599 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 32, vcc
2600 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2601 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2602 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2603 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
2604 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2605 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2606 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
2607 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2608 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2609 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2610 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2611 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2612 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, v1, v0
2613 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2615 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp2_contractable_fdiv_arcp:
2616 ; GCN-DAZ:       ; %bb.0:
2617 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2618 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2619 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2620 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v0, v1, v0
2621 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2622   %sqrt = call contract float @llvm.sqrt.f32(float %x), !fpmath !4
2623   %result = fdiv arcp contract float %y, %sqrt, !fpmath !3
2624   ret float %result
2627 define <2 x float> @v_sqrt_v2f32_ulp2_noncontractable_rcp(<2 x float> %x) {
2628 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2_noncontractable_rcp:
2629 ; SDAG-IEEE:       ; %bb.0:
2630 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2631 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2632 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2633 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2634 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2635 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2636 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2637 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[4:5]
2638 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2639 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2640 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2641 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2642 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2643 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2644 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2645 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2646 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2647 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2648 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2649 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2650 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2651 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2652 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2653 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2654 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2655 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2656 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2657 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2658 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2659 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, 0, v1
2660 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2661 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2663 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2_noncontractable_rcp:
2664 ; GISEL-IEEE:       ; %bb.0:
2665 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2666 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2667 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2668 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 32, vcc
2669 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2670 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2671 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 32, s[4:5]
2672 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2673 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2674 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2675 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2676 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2677 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2678 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2679 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2680 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2681 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2682 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2683 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2684 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2685 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2686 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2687 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2688 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2689 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2690 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2691 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2692 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, 0, v1
2693 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2694 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2696 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2_noncontractable_rcp:
2697 ; GCN-DAZ:       ; %bb.0:
2698 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2699 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2700 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2701 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2702 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v1, v1
2703 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2704   %sqrt = call contract <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !4
2705   %result = fdiv <2 x float> <float 1.0, float 1.0>, %sqrt, !fpmath !3
2706   ret <2 x float> %result
2709 define <2 x float> @v_sqrt_v2f32_ulp2_contractable_rcp(<2 x float> %x) {
2710 ; GCN-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_rcp:
2711 ; GCN-IEEE:       ; %bb.0:
2712 ; GCN-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2713 ; GCN-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2714 ; GCN-IEEE-NEXT:    v_mov_b32_e32 v2, 0x4b800000
2715 ; GCN-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2716 ; GCN-IEEE-NEXT:    v_cndmask_b32_e32 v3, 1.0, v2, vcc
2717 ; GCN-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2718 ; GCN-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v3
2719 ; GCN-IEEE-NEXT:    v_cndmask_b32_e64 v2, 1.0, v2, s[4:5]
2720 ; GCN-IEEE-NEXT:    v_rsq_f32_e32 v0, v0
2721 ; GCN-IEEE-NEXT:    v_mul_f32_e32 v1, v1, v2
2722 ; GCN-IEEE-NEXT:    v_rsq_f32_e32 v1, v1
2723 ; GCN-IEEE-NEXT:    v_mov_b32_e32 v3, 0x45800000
2724 ; GCN-IEEE-NEXT:    v_cndmask_b32_e32 v2, 1.0, v3, vcc
2725 ; GCN-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v2
2726 ; GCN-IEEE-NEXT:    v_cndmask_b32_e64 v2, 1.0, v3, s[4:5]
2727 ; GCN-IEEE-NEXT:    v_mul_f32_e32 v1, v1, v2
2728 ; GCN-IEEE-NEXT:    s_setpc_b64 s[30:31]
2730 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2_contractable_rcp:
2731 ; GCN-DAZ:       ; %bb.0:
2732 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2733 ; GCN-DAZ-NEXT:    v_rsq_f32_e32 v0, v0
2734 ; GCN-DAZ-NEXT:    v_rsq_f32_e32 v1, v1
2735 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2736   %sqrt = call contract <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !4
2737   %result = fdiv contract <2 x float> <float 1.0, float 1.0>, %sqrt, !fpmath !3
2738   ret <2 x float> %result
2741 define <2 x float> @v_sqrt_v2f32_ulp2_contractable_fdiv(<2 x float> %x, <2 x float> %y) {
2742 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv:
2743 ; SDAG-IEEE:       ; %bb.0:
2744 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2745 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2746 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2747 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2748 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v4, 5, v4
2749 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2750 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2751 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2752 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v4, 5, v4
2753 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2754 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2755 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2756 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, vcc
2757 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2758 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, s[4:5]
2759 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2760 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2761 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
2762 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2763 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v4, v0, v4, vcc
2764 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v5, v2
2765 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v2|, s4
2766 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2767 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v5, v2, v5, vcc
2768 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2
2769 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2770 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v2, v0
2771 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2772 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2773 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2774 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2775 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, v5, v4
2776 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v4, v0
2777 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v3
2778 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v3|, s4
2779 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2780 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v4, v3, v4, vcc
2781 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3
2782 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, v4, v2
2783 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, v3, v1
2784 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2785 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2787 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv:
2788 ; GISEL-IEEE:       ; %bb.0:
2789 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2790 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2791 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2792 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 32, vcc
2793 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2794 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2795 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 32, s[4:5]
2796 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2797 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2798 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2799 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, vcc
2800 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2801 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, s[4:5]
2802 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2803 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2804 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
2805 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2806 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v4, v0, v4, vcc
2807 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v5, v2
2808 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v2|, s4
2809 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2810 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v5, v2, v5, vcc
2811 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2
2812 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2813 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v2, v0
2814 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2815 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2816 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2817 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2818 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, v5, v4
2819 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v4, v0
2820 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v3
2821 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v3|, s4
2822 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2823 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v4, v3, v4, vcc
2824 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3
2825 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, v4, v2
2826 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, v3, v1
2827 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2828 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2830 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv:
2831 ; GCN-DAZ:       ; %bb.0:
2832 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2833 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2834 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2835 ; GCN-DAZ-NEXT:    s_mov_b32 s4, 0x6f800000
2836 ; GCN-DAZ-NEXT:    v_mov_b32_e32 v4, 0x2f800000
2837 ; GCN-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
2838 ; GCN-DAZ-NEXT:    v_cndmask_b32_e32 v5, 1.0, v4, vcc
2839 ; GCN-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v1|, s4
2840 ; GCN-DAZ-NEXT:    v_cndmask_b32_e32 v4, 1.0, v4, vcc
2841 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v5
2842 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v1, v1, v4
2843 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2844 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v1, v1
2845 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2846 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v1, v3, v1
2847 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v0, v5, v0
2848 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v1, v4, v1
2849 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2850   %sqrt = call contract <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !4
2851   %result = fdiv contract <2 x float> %y, %sqrt, !fpmath !3
2852   ret <2 x float> %result
2855 define <2 x float> @v_sqrt_v2f32_ulp2_contractable_fdiv_arcp(<2 x float> %x, <2 x float> %y) {
2856 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv_arcp:
2857 ; SDAG-IEEE:       ; %bb.0:
2858 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2859 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2860 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2861 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2862 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v4, 5, v4
2863 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2864 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2865 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2866 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v4, 5, v4
2867 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2868 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2869 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2870 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, vcc
2871 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2872 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, s[4:5]
2873 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2874 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2875 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
2876 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2877 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v4, v0, v4, vcc
2878 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2879 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2880 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2881 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v4, v0
2882 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v0, v2, v0
2883 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2884 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2885 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2886 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2887 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2888 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, 0, v1
2889 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2890 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, v3, v1
2891 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2893 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv_arcp:
2894 ; GISEL-IEEE:       ; %bb.0:
2895 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2896 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2897 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2898 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 32, vcc
2899 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2900 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2901 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 32, s[4:5]
2902 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2903 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2904 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2905 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, vcc
2906 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2907 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, s[4:5]
2908 ; GISEL-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2909 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2910 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
2911 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2912 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v4, v0, v4, vcc
2913 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2914 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2915 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2916 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v4, v0
2917 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, v2, v0
2918 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2919 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2920 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2921 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2922 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2923 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, 0, v1
2924 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2925 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, v3, v1
2926 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2928 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv_arcp:
2929 ; GCN-DAZ:       ; %bb.0:
2930 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2931 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2932 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2933 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2934 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v1, v1
2935 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2936 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v1, v3, v1
2937 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2938   %sqrt = call contract <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !4
2939   %result = fdiv arcp contract <2 x float> %y, %sqrt, !fpmath !3
2940   ret <2 x float> %result
2943 define amdgpu_ps i32 @s_sqrt_f32_ulp1(float inreg %x) {
2944 ; GCN-LABEL: s_sqrt_f32_ulp1:
2945 ; GCN:       ; %bb.0:
2946 ; GCN-NEXT:    v_sqrt_f32_e32 v0, s0
2947 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
2948 ; GCN-NEXT:    ; return to shader part epilog
2949   %result = call afn float @llvm.sqrt.f32(float %x), !fpmath !1
2950   %cast = bitcast float %result to i32
2951   %firstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
2952   ret i32 %firstlane
2955 define amdgpu_ps i32 @s_sqrt_f32_ulp2(float inreg %x) {
2956 ; GCN-LABEL: s_sqrt_f32_ulp2:
2957 ; GCN:       ; %bb.0:
2958 ; GCN-NEXT:    v_sqrt_f32_e32 v0, s0
2959 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
2960 ; GCN-NEXT:    ; return to shader part epilog
2961   %result = call afn float @llvm.sqrt.f32(float %x), !fpmath !2
2962   %cast = bitcast float %result to i32
2963   %firstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
2964   ret i32 %firstlane
2967 define amdgpu_ps i32 @s_sqrt_f32_ulp3(float inreg %x) {
2968 ; GCN-LABEL: s_sqrt_f32_ulp3:
2969 ; GCN:       ; %bb.0:
2970 ; GCN-NEXT:    v_sqrt_f32_e32 v0, s0
2971 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
2972 ; GCN-NEXT:    ; return to shader part epilog
2973   %result = call afn float @llvm.sqrt.f32(float %x), !fpmath !4
2974   %cast = bitcast float %result to i32
2975   %firstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
2976   ret i32 %firstlane
2979 define float @v_sqrt_f32_known_never_posdenormal_ulp2(float nofpclass(psub) %x) {
2980 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_posdenormal_ulp2:
2981 ; SDAG-IEEE:       ; %bb.0:
2982 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2983 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2984 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2985 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
2986 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
2987 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2988 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2989 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
2990 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2991 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2993 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_posdenormal_ulp2:
2994 ; GISEL-IEEE:       ; %bb.0:
2995 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2996 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
2997 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2998 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
2999 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3000 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3001 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3002 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3003 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3005 ; GCN-DAZ-LABEL: v_sqrt_f32_known_never_posdenormal_ulp2:
3006 ; GCN-DAZ:       ; %bb.0:
3007 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3008 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3009 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3010   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
3011   ret float %result
3014 define float @v_sqrt_f32_nsz_known_never_posdenormal_ulp2(float nofpclass(psub) %x) {
3015 ; SDAG-IEEE-LABEL: v_sqrt_f32_nsz_known_never_posdenormal_ulp2:
3016 ; SDAG-IEEE:       ; %bb.0:
3017 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3018 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3019 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3020 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3021 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3022 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3023 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3024 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3025 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3026 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3028 ; GISEL-IEEE-LABEL: v_sqrt_f32_nsz_known_never_posdenormal_ulp2:
3029 ; GISEL-IEEE:       ; %bb.0:
3030 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3031 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3032 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3033 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
3034 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3035 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3036 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3037 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3038 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3040 ; GCN-DAZ-LABEL: v_sqrt_f32_nsz_known_never_posdenormal_ulp2:
3041 ; GCN-DAZ:       ; %bb.0:
3042 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3043 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3044 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3045   %result = call nsz float @llvm.sqrt.f32(float %x), !fpmath !2
3046   ret float %result
3049 define float @v_sqrt_f32_known_never_negdenormal(float nofpclass(nsub) %x) {
3050 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_negdenormal:
3051 ; SDAG-IEEE:       ; %bb.0:
3052 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3053 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3054 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3055 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3056 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3057 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3058 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3059 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3060 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3061 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3063 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_negdenormal:
3064 ; GISEL-IEEE:       ; %bb.0:
3065 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3066 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3067 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3068 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
3069 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3070 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3071 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3072 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3073 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3075 ; GCN-DAZ-LABEL: v_sqrt_f32_known_never_negdenormal:
3076 ; GCN-DAZ:       ; %bb.0:
3077 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3078 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3079 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3080   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
3081   ret float %result
3084 define float @v_sqrt_f32_known_never_denormal(float nofpclass(sub) %x) {
3085 ; GCN-LABEL: v_sqrt_f32_known_never_denormal:
3086 ; GCN:       ; %bb.0:
3087 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3088 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
3089 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3090   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
3091   ret float %result
3094 define float @v_sqrt_f32_ninf_known_never_zero(float nofpclass(zero) %x) {
3095 ; SDAG-IEEE-LABEL: v_sqrt_f32_ninf_known_never_zero:
3096 ; SDAG-IEEE:       ; %bb.0:
3097 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3098 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3099 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3100 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3101 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3102 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3103 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3104 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3105 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3106 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3107 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3108 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3109 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3110 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3111 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3112 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3113 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3114 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3115 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3116 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3118 ; GISEL-IEEE-LABEL: v_sqrt_f32_ninf_known_never_zero:
3119 ; GISEL-IEEE:       ; %bb.0:
3120 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3121 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3122 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3123 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3124 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3125 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3126 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3127 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3128 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
3129 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3130 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3131 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
3132 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
3133 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
3134 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3135 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3136 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3137 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3138 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3139 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3141 ; SDAG-DAZ-LABEL: v_sqrt_f32_ninf_known_never_zero:
3142 ; SDAG-DAZ:       ; %bb.0:
3143 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3144 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3145 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3146 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3147 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3148 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3149 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3150 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3151 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3152 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3153 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3154 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3155 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3156 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3157 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3158 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3159 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3160 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3161 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3163 ; GISEL-DAZ-LABEL: v_sqrt_f32_ninf_known_never_zero:
3164 ; GISEL-DAZ:       ; %bb.0:
3165 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3166 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3167 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3168 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3169 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3170 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3171 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3172 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3173 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3174 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3175 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3176 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
3177 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
3178 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3179 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3180 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3181 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3182 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3183 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3184   %result = call ninf float @llvm.sqrt.f32(float %x)
3185   ret float %result
3188 define float @v_sqrt_f32_known_never_zero(float nofpclass(zero) %x) {
3189 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_zero:
3190 ; SDAG-IEEE:       ; %bb.0:
3191 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3192 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3193 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3194 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3195 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3196 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3197 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3198 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3199 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3200 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3201 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3202 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3203 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3204 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3205 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3206 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3207 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3208 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3209 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3210 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3212 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_zero:
3213 ; GISEL-IEEE:       ; %bb.0:
3214 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3215 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3216 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3217 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3218 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3219 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3220 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3221 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3222 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
3223 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3224 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3225 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
3226 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
3227 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
3228 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3229 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3230 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3231 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3232 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3233 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3235 ; SDAG-DAZ-LABEL: v_sqrt_f32_known_never_zero:
3236 ; SDAG-DAZ:       ; %bb.0:
3237 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3238 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3239 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3240 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3241 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3242 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3243 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3244 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3245 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3246 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3247 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3248 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3249 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3250 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3251 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3252 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3253 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3254 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3255 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3257 ; GISEL-DAZ-LABEL: v_sqrt_f32_known_never_zero:
3258 ; GISEL-DAZ:       ; %bb.0:
3259 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3260 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3261 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3262 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3263 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3264 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3265 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3266 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3267 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3268 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3269 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3270 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
3271 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
3272 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3273 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3274 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3275 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3276 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3277 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3278   %result = call float @llvm.sqrt.f32(float %x)
3279   ret float %result
3282 define float @v_sqrt_f32_known_never_zero_never_inf(float nofpclass(zero inf) %x) {
3283 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_inf:
3284 ; SDAG-IEEE:       ; %bb.0:
3285 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3286 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3287 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3288 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3289 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3290 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3291 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3292 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3293 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3294 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3295 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3296 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3297 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3298 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3299 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3300 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3301 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3302 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3303 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3304 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3306 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_inf:
3307 ; GISEL-IEEE:       ; %bb.0:
3308 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3309 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3310 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3311 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3312 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3313 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3314 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3315 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3316 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
3317 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3318 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3319 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
3320 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
3321 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
3322 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3323 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3324 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3325 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3326 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3327 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3329 ; SDAG-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_inf:
3330 ; SDAG-DAZ:       ; %bb.0:
3331 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3332 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3333 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3334 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3335 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3336 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3337 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3338 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3339 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3340 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3341 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3342 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3343 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3344 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3345 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3346 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3347 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3348 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3349 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3351 ; GISEL-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_inf:
3352 ; GISEL-DAZ:       ; %bb.0:
3353 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3354 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3355 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3356 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3357 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3358 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3359 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3360 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3361 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3362 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3363 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3364 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
3365 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
3366 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3367 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3368 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3369 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3370 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3371 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3372   %result = call float @llvm.sqrt.f32(float %x)
3373   ret float %result
3376 define float @v_sqrt_f32_known_never_zero_never_ninf(float nofpclass(zero ninf) %x) {
3377 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_ninf:
3378 ; SDAG-IEEE:       ; %bb.0:
3379 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3380 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3381 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3382 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3383 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3384 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3385 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3386 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3387 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3388 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3389 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3390 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3391 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3392 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3393 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3394 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3395 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3396 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3397 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3398 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3400 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_ninf:
3401 ; GISEL-IEEE:       ; %bb.0:
3402 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3403 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3404 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3405 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3406 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3407 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3408 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3409 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3410 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
3411 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3412 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3413 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
3414 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
3415 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
3416 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3417 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3418 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3419 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3420 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3421 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3423 ; SDAG-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_ninf:
3424 ; SDAG-DAZ:       ; %bb.0:
3425 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3426 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3427 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3428 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3429 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3430 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3431 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3432 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3433 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3434 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3435 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3436 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3437 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3438 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3439 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3440 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3441 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3442 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3443 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3445 ; GISEL-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_ninf:
3446 ; GISEL-DAZ:       ; %bb.0:
3447 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3448 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3449 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3450 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3451 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3452 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3453 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3454 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3455 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3456 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3457 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3458 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
3459 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
3460 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3461 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3462 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3463 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3464 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3465 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3466   %result = call float @llvm.sqrt.f32(float %x)
3467   ret float %result
3470 define float @v_sqrt_f32_known_never_zero_never_pinf(float nofpclass(zero pinf) %x) {
3471 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_pinf:
3472 ; SDAG-IEEE:       ; %bb.0:
3473 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3474 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3475 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3476 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3477 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3478 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3479 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3480 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3481 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3482 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3483 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3484 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3485 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3486 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3487 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3488 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3489 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3490 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3491 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3492 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3494 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_pinf:
3495 ; GISEL-IEEE:       ; %bb.0:
3496 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3497 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3498 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3499 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3500 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3501 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3502 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3503 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3504 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
3505 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3506 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3507 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
3508 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
3509 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
3510 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3511 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3512 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3513 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3514 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3515 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3517 ; SDAG-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_pinf:
3518 ; SDAG-DAZ:       ; %bb.0:
3519 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3520 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3521 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3522 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3523 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3524 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3525 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3526 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3527 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3528 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3529 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3530 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3531 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3532 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3533 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3534 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3535 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3536 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3537 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3539 ; GISEL-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_pinf:
3540 ; GISEL-DAZ:       ; %bb.0:
3541 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3542 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3543 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3544 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3545 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3546 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3547 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3548 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3549 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3550 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3551 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3552 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
3553 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
3554 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3555 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3556 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3557 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3558 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3559 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3560   %result = call float @llvm.sqrt.f32(float %x)
3561   ret float %result
3564 define float @v_sqrt_f32_frexp_src(float %x) {
3565 ; SDAG-LABEL: v_sqrt_f32_frexp_src:
3566 ; SDAG:       ; %bb.0:
3567 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3568 ; SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
3569 ; SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v0
3570 ; SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
3571 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3572 ; SDAG-NEXT:    s_mov_b32 s4, 0xf800000
3573 ; SDAG-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3574 ; SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3575 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3576 ; SDAG-NEXT:    v_rsq_f32_e32 v1, v0
3577 ; SDAG-NEXT:    v_mul_f32_e32 v2, v0, v1
3578 ; SDAG-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3579 ; SDAG-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3580 ; SDAG-NEXT:    v_fma_f32 v2, v2, v3, v2
3581 ; SDAG-NEXT:    v_fma_f32 v4, -v2, v2, v0
3582 ; SDAG-NEXT:    v_fma_f32 v1, v1, v3, v1
3583 ; SDAG-NEXT:    v_fma_f32 v1, v4, v1, v2
3584 ; SDAG-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3585 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3586 ; SDAG-NEXT:    v_mov_b32_e32 v2, 0x260
3587 ; SDAG-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3588 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3589 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3591 ; GISEL-LABEL: v_sqrt_f32_frexp_src:
3592 ; GISEL:       ; %bb.0:
3593 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3594 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
3595 ; GISEL-NEXT:    v_frexp_mant_f32_e32 v1, v0
3596 ; GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
3597 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3598 ; GISEL-NEXT:    v_mov_b32_e32 v1, 0xf800000
3599 ; GISEL-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3600 ; GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3601 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3602 ; GISEL-NEXT:    v_rsq_f32_e32 v1, v0
3603 ; GISEL-NEXT:    v_mul_f32_e32 v2, v0, v1
3604 ; GISEL-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3605 ; GISEL-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3606 ; GISEL-NEXT:    v_fma_f32 v2, v2, v3, v2
3607 ; GISEL-NEXT:    v_fma_f32 v1, v1, v3, v1
3608 ; GISEL-NEXT:    v_fma_f32 v3, -v2, v2, v0
3609 ; GISEL-NEXT:    v_fma_f32 v1, v3, v1, v2
3610 ; GISEL-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3611 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3612 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0x260
3613 ; GISEL-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3614 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3615 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3616   %frexp = call { float, i32 } @llvm.frexp.f32.i32(float %x)
3617   %frexp.mant = extractvalue { float, i32 } %frexp, 0
3618   %result = call float @llvm.sqrt.f32(float %frexp.mant)
3619   ret float %result
3622 define float @v_sqrt_f32_ulp3_frexp_src(float %x) {
3623 ; SDAG-LABEL: v_sqrt_f32_ulp3_frexp_src:
3624 ; SDAG:       ; %bb.0:
3625 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3626 ; SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
3627 ; SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v0
3628 ; SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
3629 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3630 ; SDAG-NEXT:    v_sqrt_f32_e32 v0, v0
3631 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3633 ; GISEL-LABEL: v_sqrt_f32_ulp3_frexp_src:
3634 ; GISEL:       ; %bb.0:
3635 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3636 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
3637 ; GISEL-NEXT:    v_frexp_mant_f32_e32 v1, v0
3638 ; GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
3639 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3640 ; GISEL-NEXT:    v_sqrt_f32_e32 v0, v0
3641 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3642   %frexp = call { float, i32 } @llvm.frexp.f32.i32(float %x)
3643   %frexp.mant = extractvalue { float, i32 } %frexp, 0
3644   %result = call float @llvm.sqrt.f32(float %frexp.mant), !fpmath !4
3645   ret float %result
3648 define float @v_sqrt_f32_known_never_zero_never_ninf_ulp2(float nofpclass(zero ninf) %x) {
3649 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_ninf_ulp2:
3650 ; SDAG-IEEE:       ; %bb.0:
3651 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3652 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3653 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3654 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3655 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3656 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3657 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3658 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3659 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3660 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3662 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_ninf_ulp2:
3663 ; GISEL-IEEE:       ; %bb.0:
3664 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3665 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3666 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3667 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
3668 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3669 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3670 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3671 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3672 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3674 ; GCN-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_ninf_ulp2:
3675 ; GCN-DAZ:       ; %bb.0:
3676 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3677 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3678 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3679   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
3680   ret float %result
3683 define float @v_sqrt_f32_known_never_ninf_ulp2(float nofpclass(ninf) %x) {
3684 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_ninf_ulp2:
3685 ; SDAG-IEEE:       ; %bb.0:
3686 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3687 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3688 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3689 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3690 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3691 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3692 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3693 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3694 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3695 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3697 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_ninf_ulp2:
3698 ; GISEL-IEEE:       ; %bb.0:
3699 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3700 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3701 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3702 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
3703 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3704 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3705 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3706 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3707 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3709 ; GCN-DAZ-LABEL: v_sqrt_f32_known_never_ninf_ulp2:
3710 ; GCN-DAZ:       ; %bb.0:
3711 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3712 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3713 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3714   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
3715   ret float %result
3718 define float @v_sqrt_f32_nsz_known_never_ninf_ulp2(float nofpclass(ninf) %x) {
3719 ; SDAG-IEEE-LABEL: v_sqrt_f32_nsz_known_never_ninf_ulp2:
3720 ; SDAG-IEEE:       ; %bb.0:
3721 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3722 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3723 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3724 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3725 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3726 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3727 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3728 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3729 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3730 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3732 ; GISEL-IEEE-LABEL: v_sqrt_f32_nsz_known_never_ninf_ulp2:
3733 ; GISEL-IEEE:       ; %bb.0:
3734 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3735 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3736 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3737 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
3738 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3739 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3740 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3741 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3742 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3744 ; GCN-DAZ-LABEL: v_sqrt_f32_nsz_known_never_ninf_ulp2:
3745 ; GCN-DAZ:       ; %bb.0:
3746 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3747 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3748 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3749   %result = call nsz float @llvm.sqrt.f32(float %x), !fpmath !2
3750   ret float %result
3753 define float @v_elim_redun_check_ult_sqrt(float %in) {
3754 ; SDAG-IEEE-LABEL: v_elim_redun_check_ult_sqrt:
3755 ; SDAG-IEEE:       ; %bb.0:
3756 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3757 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3758 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3759 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3760 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3761 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3762 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3763 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3764 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3765 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3766 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3767 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3768 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3769 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3770 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3771 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3772 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3773 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3774 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3775 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3777 ; GISEL-IEEE-LABEL: v_elim_redun_check_ult_sqrt:
3778 ; GISEL-IEEE:       ; %bb.0:
3779 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3780 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3781 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3782 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3783 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v0, v2, vcc
3784 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v2, v1
3785 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v2
3786 ; GISEL-IEEE-NEXT:    v_fma_f32 v4, -v3, v2, v1
3787 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], 1, v2
3788 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v5, v2, v1
3789 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v4
3790 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[4:5]
3791 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v6
3792 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[4:5]
3793 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
3794 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
3795 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x260
3796 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v3
3797 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
3798 ; GISEL-IEEE-NEXT:    v_bfrev_b32_e32 v2, 1
3799 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7fc00000
3800 ; GISEL-IEEE-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v2
3801 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
3802 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3804 ; SDAG-DAZ-LABEL: v_elim_redun_check_ult_sqrt:
3805 ; SDAG-DAZ:       ; %bb.0:
3806 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3807 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3808 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3809 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3810 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3811 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3812 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3813 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3814 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3815 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3816 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3817 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3818 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3819 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3820 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3821 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3822 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3823 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3824 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3826 ; GISEL-DAZ-LABEL: v_elim_redun_check_ult_sqrt:
3827 ; GISEL-DAZ:       ; %bb.0:
3828 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3829 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3830 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3831 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3832 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v0, v2, vcc
3833 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v2, v1
3834 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, v1, v2
3835 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0.5, v2
3836 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, -v2, v3, 0.5
3837 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v4, v3
3838 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v4, v2
3839 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, -v3, v3, v1
3840 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v4, v2, v3
3841 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
3842 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
3843 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0x260
3844 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v1, v3
3845 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
3846 ; GISEL-DAZ-NEXT:    v_bfrev_b32_e32 v2, 1
3847 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0x7fc00000
3848 ; GISEL-DAZ-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v2
3849 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
3850 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3851   %sqrt = call float @llvm.sqrt.f32(float %in)
3852   %cmp = fcmp ult float %in, -0.000000e+00
3853   %res = select i1 %cmp, float 0x7FF8000000000000, float %sqrt
3854   ret float %res
3857 define float @v_elim_redun_check_ult_sqrt_ulp3(float %in) {
3858 ; SDAG-IEEE-LABEL: v_elim_redun_check_ult_sqrt_ulp3:
3859 ; SDAG-IEEE:       ; %bb.0:
3860 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3861 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3862 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3863 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3864 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3865 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v0, v1
3866 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
3867 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
3868 ; SDAG-IEEE-NEXT:    s_brev_b32 s4, 1
3869 ; SDAG-IEEE-NEXT:    v_cmp_le_f32_e32 vcc, s4, v0
3870 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
3871 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
3872 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
3873 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3875 ; GISEL-IEEE-LABEL: v_elim_redun_check_ult_sqrt_ulp3:
3876 ; GISEL-IEEE:       ; %bb.0:
3877 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3878 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3879 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3880 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 32, vcc
3881 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v0, v1
3882 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
3883 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
3884 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7fc00000
3885 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
3886 ; GISEL-IEEE-NEXT:    v_bfrev_b32_e32 v2, 1
3887 ; GISEL-IEEE-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v2
3888 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
3889 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3891 ; SDAG-DAZ-LABEL: v_elim_redun_check_ult_sqrt_ulp3:
3892 ; SDAG-DAZ:       ; %bb.0:
3893 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3894 ; SDAG-DAZ-NEXT:    v_sqrt_f32_e32 v1, v0
3895 ; SDAG-DAZ-NEXT:    s_brev_b32 s4, 1
3896 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
3897 ; SDAG-DAZ-NEXT:    v_cmp_le_f32_e32 vcc, s4, v0
3898 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
3899 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3901 ; GISEL-DAZ-LABEL: v_elim_redun_check_ult_sqrt_ulp3:
3902 ; GISEL-DAZ:       ; %bb.0:
3903 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3904 ; GISEL-DAZ-NEXT:    v_sqrt_f32_e32 v1, v0
3905 ; GISEL-DAZ-NEXT:    v_bfrev_b32_e32 v2, 1
3906 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0x7fc00000
3907 ; GISEL-DAZ-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v2
3908 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
3909 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3910   %sqrt = call float @llvm.sqrt.f32(float %in), !fpmath !4
3911   %cmp = fcmp ult float %in, -0.000000e+00
3912   %res = select i1 %cmp, float 0x7FF8000000000000, float %sqrt
3913   ret float %res
3916 define amdgpu_kernel void @elim_redun_check_neg0(ptr addrspace(1) %out, float %in) {
3917 ; SDAG-IEEE-LABEL: elim_redun_check_neg0:
3918 ; SDAG-IEEE:       ; %bb.0: ; %entry
3919 ; SDAG-IEEE-NEXT:    s_load_dword s2, s[0:1], 0xb
3920 ; SDAG-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
3921 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
3922 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
3923 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0xf000
3924 ; SDAG-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
3925 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s2, v1
3926 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, s2
3927 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s2, v0
3928 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v1, s[0:1]
3929 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3930 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, -1
3931 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v1
3932 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3933 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
3934 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
3935 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v1
3936 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3937 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
3938 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
3939 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3940 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
3941 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3942 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3943 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3944 ; SDAG-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
3945 ; SDAG-IEEE-NEXT:    s_endpgm
3947 ; GISEL-IEEE-LABEL: elim_redun_check_neg0:
3948 ; GISEL-IEEE:       ; %bb.0: ; %entry
3949 ; GISEL-IEEE-NEXT:    s_load_dword s2, s[0:1], 0xb
3950 ; GISEL-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
3951 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
3952 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
3953 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, -1
3954 ; GISEL-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
3955 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, s2
3956 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, s2, v1
3957 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
3958 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
3959 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3960 ; GISEL-IEEE-NEXT:    s_mov_b32 s7, 0xf000
3961 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[0:1], -1, v1
3962 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3963 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[0:1], 1, v1
3964 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3965 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v3
3966 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
3967 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v5
3968 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[0:1]
3969 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3970 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3971 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3972 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3973 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3974 ; GISEL-IEEE-NEXT:    v_bfrev_b32_e32 v1, 1
3975 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
3976 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v1
3977 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3978 ; GISEL-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
3979 ; GISEL-IEEE-NEXT:    s_endpgm
3981 ; SDAG-DAZ-LABEL: elim_redun_check_neg0:
3982 ; SDAG-DAZ:       ; %bb.0: ; %entry
3983 ; SDAG-DAZ-NEXT:    s_load_dword s2, s[0:1], 0xb
3984 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
3985 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
3986 ; SDAG-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
3987 ; SDAG-DAZ-NEXT:    s_mov_b32 s3, 0xf000
3988 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
3989 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s2, v1
3990 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, s2
3991 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
3992 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
3993 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3994 ; SDAG-DAZ-NEXT:    s_mov_b32 s2, -1
3995 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3996 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3997 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3998 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3999 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
4000 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4001 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
4002 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4003 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4004 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4005 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4006 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4007 ; SDAG-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4008 ; SDAG-DAZ-NEXT:    s_endpgm
4010 ; GISEL-DAZ-LABEL: elim_redun_check_neg0:
4011 ; GISEL-DAZ:       ; %bb.0: ; %entry
4012 ; GISEL-DAZ-NEXT:    s_load_dword s2, s[0:1], 0xb
4013 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4014 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4015 ; GISEL-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
4016 ; GISEL-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4017 ; GISEL-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4018 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, s2
4019 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, s2, v1
4020 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4021 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4022 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4023 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4024 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4025 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4026 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4027 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4028 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
4029 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
4030 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4031 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4032 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4033 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4034 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4035 ; GISEL-DAZ-NEXT:    v_bfrev_b32_e32 v1, 1
4036 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
4037 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v1
4038 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
4039 ; GISEL-DAZ-NEXT:    s_mov_b32 s2, -1
4040 ; GISEL-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4041 ; GISEL-DAZ-NEXT:    s_endpgm
4042 entry:
4043   %sqrt = call float @llvm.sqrt.f32(float %in)
4044   %cmp = fcmp olt float %in, -0.000000e+00
4045   %res = select i1 %cmp, float 0x7FF8000000000000, float %sqrt
4046   store float %res, ptr addrspace(1) %out
4047   ret void
4050 define amdgpu_kernel void @elim_redun_check_pos0(ptr addrspace(1) %out, float %in) {
4051 ; SDAG-IEEE-LABEL: elim_redun_check_pos0:
4052 ; SDAG-IEEE:       ; %bb.0: ; %entry
4053 ; SDAG-IEEE-NEXT:    s_load_dword s2, s[0:1], 0xb
4054 ; SDAG-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
4055 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4056 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4057 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4058 ; SDAG-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4059 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s2, v1
4060 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, s2
4061 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s2, v0
4062 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v1, s[0:1]
4063 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4064 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, -1
4065 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v1
4066 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
4067 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
4068 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4069 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v1
4070 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
4071 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
4072 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
4073 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4074 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
4075 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
4076 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4077 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4078 ; SDAG-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
4079 ; SDAG-IEEE-NEXT:    s_endpgm
4081 ; GISEL-IEEE-LABEL: elim_redun_check_pos0:
4082 ; GISEL-IEEE:       ; %bb.0: ; %entry
4083 ; GISEL-IEEE-NEXT:    s_load_dword s2, s[0:1], 0xb
4084 ; GISEL-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
4085 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4086 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4087 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, -1
4088 ; GISEL-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4089 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, s2
4090 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, s2, v1
4091 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4092 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4093 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4094 ; GISEL-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4095 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[0:1], -1, v1
4096 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
4097 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[0:1], 1, v1
4098 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
4099 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v3
4100 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
4101 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v5
4102 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[0:1]
4103 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4104 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4105 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
4106 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4107 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4108 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x7fc00000
4109 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, s2, 0
4110 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4111 ; GISEL-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
4112 ; GISEL-IEEE-NEXT:    s_endpgm
4114 ; SDAG-DAZ-LABEL: elim_redun_check_pos0:
4115 ; SDAG-DAZ:       ; %bb.0: ; %entry
4116 ; SDAG-DAZ-NEXT:    s_load_dword s2, s[0:1], 0xb
4117 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4118 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4119 ; SDAG-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
4120 ; SDAG-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4121 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4122 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s2, v1
4123 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, s2
4124 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4125 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4126 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4127 ; SDAG-DAZ-NEXT:    s_mov_b32 s2, -1
4128 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4129 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4130 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4131 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4132 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
4133 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4134 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
4135 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4136 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4137 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4138 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4139 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4140 ; SDAG-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4141 ; SDAG-DAZ-NEXT:    s_endpgm
4143 ; GISEL-DAZ-LABEL: elim_redun_check_pos0:
4144 ; GISEL-DAZ:       ; %bb.0: ; %entry
4145 ; GISEL-DAZ-NEXT:    s_load_dword s2, s[0:1], 0xb
4146 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4147 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4148 ; GISEL-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
4149 ; GISEL-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4150 ; GISEL-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4151 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, s2
4152 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, s2, v1
4153 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4154 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4155 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4156 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4157 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4158 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4159 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4160 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4161 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
4162 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
4163 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4164 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4165 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4166 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4167 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4168 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0x7fc00000
4169 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e64 vcc, s2, 0
4170 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4171 ; GISEL-DAZ-NEXT:    s_mov_b32 s2, -1
4172 ; GISEL-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4173 ; GISEL-DAZ-NEXT:    s_endpgm
4174 entry:
4175   %sqrt = call float @llvm.sqrt.f32(float %in)
4176   %cmp = fcmp olt float %in, 0.000000e+00
4177   %res = select i1 %cmp, float 0x7FF8000000000000, float %sqrt
4178   store float %res, ptr addrspace(1) %out
4179   ret void
4182 define amdgpu_kernel void @elim_redun_check_ult(ptr addrspace(1) %out, float %in) {
4183 ; SDAG-IEEE-LABEL: elim_redun_check_ult:
4184 ; SDAG-IEEE:       ; %bb.0: ; %entry
4185 ; SDAG-IEEE-NEXT:    s_load_dword s2, s[0:1], 0xb
4186 ; SDAG-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
4187 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4188 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4189 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4190 ; SDAG-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4191 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s2, v1
4192 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, s2
4193 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s2, v0
4194 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v1, s[0:1]
4195 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4196 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, -1
4197 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v1
4198 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
4199 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
4200 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4201 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v1
4202 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
4203 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
4204 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
4205 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4206 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
4207 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
4208 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4209 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4210 ; SDAG-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
4211 ; SDAG-IEEE-NEXT:    s_endpgm
4213 ; GISEL-IEEE-LABEL: elim_redun_check_ult:
4214 ; GISEL-IEEE:       ; %bb.0: ; %entry
4215 ; GISEL-IEEE-NEXT:    s_load_dword s2, s[0:1], 0xb
4216 ; GISEL-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
4217 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4218 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4219 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, -1
4220 ; GISEL-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4221 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, s2
4222 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, s2, v1
4223 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4224 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4225 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4226 ; GISEL-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4227 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[0:1], -1, v1
4228 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
4229 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[0:1], 1, v1
4230 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
4231 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v3
4232 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
4233 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v5
4234 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[0:1]
4235 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4236 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4237 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
4238 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4239 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4240 ; GISEL-IEEE-NEXT:    v_bfrev_b32_e32 v1, 1
4241 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
4242 ; GISEL-IEEE-NEXT:    v_cmp_nge_f32_e32 vcc, s2, v1
4243 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
4244 ; GISEL-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
4245 ; GISEL-IEEE-NEXT:    s_endpgm
4247 ; SDAG-DAZ-LABEL: elim_redun_check_ult:
4248 ; SDAG-DAZ:       ; %bb.0: ; %entry
4249 ; SDAG-DAZ-NEXT:    s_load_dword s2, s[0:1], 0xb
4250 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4251 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4252 ; SDAG-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
4253 ; SDAG-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4254 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4255 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s2, v1
4256 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, s2
4257 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4258 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4259 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4260 ; SDAG-DAZ-NEXT:    s_mov_b32 s2, -1
4261 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4262 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4263 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4264 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4265 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
4266 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4267 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
4268 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4269 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4270 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4271 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4272 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4273 ; SDAG-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4274 ; SDAG-DAZ-NEXT:    s_endpgm
4276 ; GISEL-DAZ-LABEL: elim_redun_check_ult:
4277 ; GISEL-DAZ:       ; %bb.0: ; %entry
4278 ; GISEL-DAZ-NEXT:    s_load_dword s2, s[0:1], 0xb
4279 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4280 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4281 ; GISEL-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
4282 ; GISEL-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4283 ; GISEL-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4284 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, s2
4285 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, s2, v1
4286 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4287 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4288 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4289 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4290 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4291 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4292 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4293 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4294 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
4295 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
4296 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4297 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4298 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4299 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4300 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4301 ; GISEL-DAZ-NEXT:    v_bfrev_b32_e32 v1, 1
4302 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
4303 ; GISEL-DAZ-NEXT:    v_cmp_nge_f32_e32 vcc, s2, v1
4304 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
4305 ; GISEL-DAZ-NEXT:    s_mov_b32 s2, -1
4306 ; GISEL-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4307 ; GISEL-DAZ-NEXT:    s_endpgm
4308 entry:
4309   %sqrt = call float @llvm.sqrt.f32(float %in)
4310   %cmp = fcmp ult float %in, -0.000000e+00
4311   %res = select i1 %cmp, float 0x7FF8000000000000, float %sqrt
4312   store float %res, ptr addrspace(1) %out
4313   ret void
4316 define amdgpu_kernel void @elim_redun_check_v2(ptr addrspace(1) %out, <2 x float> %in) {
4317 ; SDAG-IEEE-LABEL: elim_redun_check_v2:
4318 ; SDAG-IEEE:       ; %bb.0: ; %entry
4319 ; SDAG-IEEE-NEXT:    s_load_dwordx4 s[8:11], s[0:1], 0x9
4320 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4321 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4322 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4323 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, -1
4324 ; SDAG-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4325 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, s11, v1
4326 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v3, s11
4327 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s11, v0
4328 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4329 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v3, v2
4330 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s10, v1
4331 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, s8
4332 ; SDAG-IEEE-NEXT:    s_mov_b32 s5, s9
4333 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v4, vcc, -1, v3
4334 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v4, v3, v2
4335 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v5
4336 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v4, v3, v4, vcc
4337 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v5, vcc, 1, v3
4338 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v5, v3, v2
4339 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v3
4340 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
4341 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4342 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[0:1]
4343 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v5, s10
4344 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s10, v0
4345 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v5, v1, s[0:1]
4346 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v5, v0
4347 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
4348 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v2, v4
4349 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v3, v2, vcc
4350 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v5
4351 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v5, v0
4352 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
4353 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v5, v2, vcc
4354 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v5
4355 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v3, v5, v0
4356 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v5
4357 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4358 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
4359 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
4360 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v4
4361 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4362 ; SDAG-IEEE-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4363 ; SDAG-IEEE-NEXT:    s_endpgm
4365 ; GISEL-IEEE-LABEL: elim_redun_check_v2:
4366 ; GISEL-IEEE:       ; %bb.0: ; %entry
4367 ; GISEL-IEEE-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
4368 ; GISEL-IEEE-NEXT:    s_mov_b32 s0, 0xf800000
4369 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0x4f800000
4370 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0xf800000
4371 ; GISEL-IEEE-NEXT:    s_mov_b32 s2, 0x80000000
4372 ; GISEL-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4373 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, s6
4374 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, s6, v0
4375 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v1
4376 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4377 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v2
4378 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, s7, v0
4379 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, -1
4380 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v5, s[0:1], -1, v3
4381 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v5, v3, v2
4382 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v7, s[0:1], 1, v3
4383 ; GISEL-IEEE-NEXT:    v_fma_f32 v8, -v7, v3, v2
4384 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v6
4385 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v5, s[0:1]
4386 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v8
4387 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[0:1]
4388 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
4389 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
4390 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v6, s7
4391 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v4
4392 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v6, v0, vcc
4393 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v4, v0
4394 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v5, 0x260
4395 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v5
4396 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4397 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[0:1], -1, v4
4398 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v3, v4, v0
4399 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v8, s[0:1], 1, v4
4400 ; GISEL-IEEE-NEXT:    v_fma_f32 v9, -v8, v4, v0
4401 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v7
4402 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v4, v3, s[0:1]
4403 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v9
4404 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v8, s[0:1]
4405 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4406 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
4407 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v5
4408 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v0, vcc
4409 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x7fc00000
4410 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s2, v1
4411 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
4412 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s2, v6
4413 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
4414 ; GISEL-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4415 ; GISEL-IEEE-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4416 ; GISEL-IEEE-NEXT:    s_endpgm
4418 ; SDAG-DAZ-LABEL: elim_redun_check_v2:
4419 ; SDAG-DAZ:       ; %bb.0: ; %entry
4420 ; SDAG-DAZ-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
4421 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4422 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4423 ; SDAG-DAZ-NEXT:    s_mov_b32 s7, 0xf000
4424 ; SDAG-DAZ-NEXT:    s_mov_b32 s6, -1
4425 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4426 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, s3, v1
4427 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v3, s3
4428 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s3, v0
4429 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
4430 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v3, v2
4431 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s2, v1
4432 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, s0
4433 ; SDAG-DAZ-NEXT:    s_mov_b32 s5, s1
4434 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, v2, v3
4435 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
4436 ; SDAG-DAZ-NEXT:    v_fma_f32 v5, -v3, v4, 0.5
4437 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, v4, v5, v4
4438 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v4, v4, v2
4439 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
4440 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v4
4441 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4442 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
4443 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v4, s2
4444 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4445 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v4, v1, vcc
4446 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v4, v0
4447 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v5, 0x260
4448 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v5
4449 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v1, v3, v2, s[0:1]
4450 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v4
4451 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v4
4452 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v3, v2, 0.5
4453 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v4, v2
4454 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v2, v2, v0
4455 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v4, v3
4456 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v6, v3, v2
4457 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
4458 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4459 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v5
4460 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4461 ; SDAG-DAZ-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4462 ; SDAG-DAZ-NEXT:    s_endpgm
4464 ; GISEL-DAZ-LABEL: elim_redun_check_v2:
4465 ; GISEL-DAZ:       ; %bb.0: ; %entry
4466 ; GISEL-DAZ-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
4467 ; GISEL-DAZ-NEXT:    s_mov_b32 s0, 0xf800000
4468 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0x4f800000
4469 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0xf800000
4470 ; GISEL-DAZ-NEXT:    s_mov_b32 s2, 0x80000000
4471 ; GISEL-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4472 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, s6
4473 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, s6, v0
4474 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v1
4475 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4476 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v3, v2
4477 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, s7, v0
4478 ; GISEL-DAZ-NEXT:    s_mov_b32 s6, -1
4479 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, v2, v3
4480 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
4481 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v3, v5, 0.5
4482 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, v5, v6, v5
4483 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v6, v3
4484 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v5, v5, v2
4485 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v5
4486 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
4487 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
4488 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v5, s7
4489 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v4
4490 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v5, v0, vcc
4491 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v4, v0
4492 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v6, 0x260
4493 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v6
4494 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4495 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, v0, v4
4496 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0.5, v4
4497 ; GISEL-DAZ-NEXT:    v_fma_f32 v7, -v4, v3, 0.5
4498 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v7, v3
4499 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, v4, v7, v4
4500 ; GISEL-DAZ-NEXT:    v_fma_f32 v7, -v3, v3, v0
4501 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v7, v4, v3
4502 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4503 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
4504 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v6
4505 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v0, vcc
4506 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0x7fc00000
4507 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s2, v1
4508 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
4509 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s2, v5
4510 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
4511 ; GISEL-DAZ-NEXT:    s_mov_b32 s7, 0xf000
4512 ; GISEL-DAZ-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4513 ; GISEL-DAZ-NEXT:    s_endpgm
4514 entry:
4515   %sqrt = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %in)
4516   %cmp = fcmp olt <2 x float> %in, <float -0.000000e+00, float -0.000000e+00>
4517   %res = select <2 x i1> %cmp, <2 x float> <float 0x7FF8000000000000, float 0x7FF8000000000000>, <2 x float> %sqrt
4518   store <2 x float> %res, ptr addrspace(1) %out
4519   ret void
4522 define amdgpu_kernel void @elim_redun_check_v2_ult(ptr addrspace(1) %out, <2 x float> %in) {
4523 ; SDAG-IEEE-LABEL: elim_redun_check_v2_ult:
4524 ; SDAG-IEEE:       ; %bb.0: ; %entry
4525 ; SDAG-IEEE-NEXT:    s_load_dwordx4 s[8:11], s[0:1], 0x9
4526 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4527 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4528 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4529 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, -1
4530 ; SDAG-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4531 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, s11, v1
4532 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v3, s11
4533 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s11, v0
4534 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4535 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v3, v2
4536 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s10, v1
4537 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, s8
4538 ; SDAG-IEEE-NEXT:    s_mov_b32 s5, s9
4539 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v4, vcc, -1, v3
4540 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v4, v3, v2
4541 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v5
4542 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v4, v3, v4, vcc
4543 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v5, vcc, 1, v3
4544 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v5, v3, v2
4545 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v3
4546 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
4547 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4548 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[0:1]
4549 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v5, s10
4550 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s10, v0
4551 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v5, v1, s[0:1]
4552 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v5, v0
4553 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
4554 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v2, v4
4555 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v3, v2, vcc
4556 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v5
4557 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v5, v0
4558 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
4559 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v5, v2, vcc
4560 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v5
4561 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v3, v5, v0
4562 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v5
4563 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4564 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
4565 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
4566 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v4
4567 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4568 ; SDAG-IEEE-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4569 ; SDAG-IEEE-NEXT:    s_endpgm
4571 ; GISEL-IEEE-LABEL: elim_redun_check_v2_ult:
4572 ; GISEL-IEEE:       ; %bb.0: ; %entry
4573 ; GISEL-IEEE-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
4574 ; GISEL-IEEE-NEXT:    s_mov_b32 s0, 0xf800000
4575 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0x4f800000
4576 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0xf800000
4577 ; GISEL-IEEE-NEXT:    s_mov_b32 s2, 0x80000000
4578 ; GISEL-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4579 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, s6
4580 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, s6, v0
4581 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v1
4582 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4583 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v2
4584 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, s7, v0
4585 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, -1
4586 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v5, s[0:1], -1, v3
4587 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v5, v3, v2
4588 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v7, s[0:1], 1, v3
4589 ; GISEL-IEEE-NEXT:    v_fma_f32 v8, -v7, v3, v2
4590 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v6
4591 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v5, s[0:1]
4592 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v8
4593 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[0:1]
4594 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
4595 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
4596 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v6, s7
4597 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v4
4598 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v6, v0, vcc
4599 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v4, v0
4600 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v5, 0x260
4601 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v5
4602 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4603 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[0:1], -1, v4
4604 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v3, v4, v0
4605 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v8, s[0:1], 1, v4
4606 ; GISEL-IEEE-NEXT:    v_fma_f32 v9, -v8, v4, v0
4607 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v7
4608 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v4, v3, s[0:1]
4609 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v9
4610 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v8, s[0:1]
4611 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4612 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
4613 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v5
4614 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v0, vcc
4615 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x7fc00000
4616 ; GISEL-IEEE-NEXT:    v_cmp_nle_f32_e32 vcc, s2, v1
4617 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
4618 ; GISEL-IEEE-NEXT:    v_cmp_nle_f32_e32 vcc, s2, v6
4619 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
4620 ; GISEL-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4621 ; GISEL-IEEE-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4622 ; GISEL-IEEE-NEXT:    s_endpgm
4624 ; SDAG-DAZ-LABEL: elim_redun_check_v2_ult:
4625 ; SDAG-DAZ:       ; %bb.0: ; %entry
4626 ; SDAG-DAZ-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
4627 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4628 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4629 ; SDAG-DAZ-NEXT:    s_mov_b32 s7, 0xf000
4630 ; SDAG-DAZ-NEXT:    s_mov_b32 s6, -1
4631 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4632 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, s3, v1
4633 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v3, s3
4634 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s3, v0
4635 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
4636 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v3, v2
4637 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s2, v1
4638 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, s0
4639 ; SDAG-DAZ-NEXT:    s_mov_b32 s5, s1
4640 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, v2, v3
4641 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
4642 ; SDAG-DAZ-NEXT:    v_fma_f32 v5, -v3, v4, 0.5
4643 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, v4, v5, v4
4644 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v4, v4, v2
4645 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
4646 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v4
4647 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4648 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
4649 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v4, s2
4650 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4651 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v4, v1, vcc
4652 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v4, v0
4653 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v5, 0x260
4654 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v5
4655 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v1, v3, v2, s[0:1]
4656 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v4
4657 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v4
4658 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v3, v2, 0.5
4659 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v4, v2
4660 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v2, v2, v0
4661 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v4, v3
4662 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v6, v3, v2
4663 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
4664 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4665 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v5
4666 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4667 ; SDAG-DAZ-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4668 ; SDAG-DAZ-NEXT:    s_endpgm
4670 ; GISEL-DAZ-LABEL: elim_redun_check_v2_ult:
4671 ; GISEL-DAZ:       ; %bb.0: ; %entry
4672 ; GISEL-DAZ-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
4673 ; GISEL-DAZ-NEXT:    s_mov_b32 s0, 0xf800000
4674 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0x4f800000
4675 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0xf800000
4676 ; GISEL-DAZ-NEXT:    s_mov_b32 s2, 0x80000000
4677 ; GISEL-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4678 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, s6
4679 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, s6, v0
4680 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v1
4681 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4682 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v3, v2
4683 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, s7, v0
4684 ; GISEL-DAZ-NEXT:    s_mov_b32 s6, -1
4685 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, v2, v3
4686 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
4687 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v3, v5, 0.5
4688 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, v5, v6, v5
4689 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v6, v3
4690 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v5, v5, v2
4691 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v5
4692 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
4693 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
4694 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v5, s7
4695 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v4
4696 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v5, v0, vcc
4697 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v4, v0
4698 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v6, 0x260
4699 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v6
4700 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4701 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, v0, v4
4702 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0.5, v4
4703 ; GISEL-DAZ-NEXT:    v_fma_f32 v7, -v4, v3, 0.5
4704 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v7, v3
4705 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, v4, v7, v4
4706 ; GISEL-DAZ-NEXT:    v_fma_f32 v7, -v3, v3, v0
4707 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v7, v4, v3
4708 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4709 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
4710 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v6
4711 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v0, vcc
4712 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0x7fc00000
4713 ; GISEL-DAZ-NEXT:    v_cmp_nle_f32_e32 vcc, s2, v1
4714 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
4715 ; GISEL-DAZ-NEXT:    v_cmp_nle_f32_e32 vcc, s2, v5
4716 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
4717 ; GISEL-DAZ-NEXT:    s_mov_b32 s7, 0xf000
4718 ; GISEL-DAZ-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4719 ; GISEL-DAZ-NEXT:    s_endpgm
4720 entry:
4721   %sqrt = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %in)
4722   %cmp = fcmp ult <2 x float> %in, <float -0.000000e+00, float -0.000000e+00>
4723   %res = select <2 x i1> %cmp, <2 x float> <float 0x7FF8000000000000, float 0x7FF8000000000000>, <2 x float> %sqrt
4724   store <2 x float> %res, ptr addrspace(1) %out
4725   ret void
4728 declare float @llvm.fabs.f32(float) #0
4729 declare float @llvm.sqrt.f32(float) #0
4730 declare <2 x float> @llvm.fabs.v2f32(<2 x float>) #0
4731 declare <2 x float> @llvm.sqrt.v2f32(<2 x float>) #0
4732 declare <3 x float> @llvm.sqrt.v3f32(<3 x float>) #0
4733 declare i32 @llvm.amdgcn.readfirstlane(i32) #1
4735 declare { float, i32 } @llvm.frexp.f32.i32(float) #0
4737 attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
4738 attributes #1 = { convergent nounwind willreturn memory(none) }
4739 attributes #2 = { "approx-func-fp-math"="true" }
4740 attributes #3 = { "approx-func-fp-math"="true" "no-nans-fp-math"="true" "no-infs-fp-math"="true" }
4741 attributes #4 = { "unsafe-fp-math"="true" }
4742 attributes #5 = { "no-infs-fp-math"="true" }
4744 !0 = !{float 0.5}
4745 !1 = !{float 1.0}
4746 !2 = !{float 2.0}
4747 !3 = !{float 2.5}
4748 !4 = !{float 3.0}