Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / fsqrt.f32.ll
blob8fd201038ad160d52a4229122eb6a8840f5e2501
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,SDAG,GCN-IEEE,SDAG-IEEE %s
3 ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GISEL,GCN-IEEE,GISEL-IEEE %s
5 ; RUN: llc -global-isel=0 -mtriple=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 -mtriple=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:    v_mov_b32_e32 v2, 0xf800000
1351 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v0
1352 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v2, v0
1353 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
1354 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v0
1355 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], -1, v3
1356 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v3, v0
1357 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v3
1358 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v3, v0
1359 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
1360 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[4:5]
1361 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v7
1362 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[4:5]
1363 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1364 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1365 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v5, 0x4f800000, v1
1366 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v2, v1
1367 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
1368 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v2, v1
1369 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
1370 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v4
1371 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, v3, v0, s[4:5]
1372 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v2
1373 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v3, v2, v1
1374 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v2
1375 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v2, v1
1376 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
1377 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[4:5]
1378 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v7
1379 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
1380 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
1381 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
1382 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v4
1383 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
1384 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1386 ; SDAG-DAZ-LABEL: v_sqrt_v2f32:
1387 ; SDAG-DAZ:       ; %bb.0:
1388 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1389 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
1390 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1391 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1392 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1393 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v2, v0
1394 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, v0, v2
1395 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0.5, v2
1396 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v3, 0.5
1397 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v4, v3
1398 ; SDAG-DAZ-NEXT:    v_fma_f32 v5, -v3, v3, v0
1399 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v4, v2
1400 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v5, v2, v3
1401 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
1402 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
1403 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v1
1404 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v1
1405 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
1406 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v3, v1
1407 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v4, 0x260
1408 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v4
1409 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v0, v2, v0, s[4:5]
1410 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v1, v3
1411 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
1412 ; SDAG-DAZ-NEXT:    v_fma_f32 v5, -v3, v2, 0.5
1413 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v5, v2
1414 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v2, v2, v1
1415 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
1416 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v6, v3, v2
1417 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
1418 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
1419 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v1, v4
1420 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
1421 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
1423 ; GISEL-DAZ-LABEL: v_sqrt_v2f32:
1424 ; GISEL-DAZ:       ; %bb.0:
1425 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1426 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0xf800000
1427 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v0
1428 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v2, v0
1429 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
1430 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v3, v0
1431 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, v0, v3
1432 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
1433 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v3, v4, 0.5
1434 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, v4, v5, v4
1435 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
1436 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v4, v4, v0
1437 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v5, v3, v4
1438 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1439 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1440 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0x4f800000, v1
1441 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v2, v1
1442 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
1443 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v2, v1
1444 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0x260
1445 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v4
1446 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v0, v3, v0, s[4:5]
1447 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, v1, v2
1448 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0.5, v2
1449 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v2, v3, 0.5
1450 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
1451 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v5, v2
1452 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v3, v3, v1
1453 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v5, v2, v3
1454 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
1455 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
1456 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v1, v4
1457 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
1458 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
1459   %result = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x)
1460   ret <2 x float> %result
1463 define <3 x float> @v_sqrt_v3f32(<3 x float> %x) {
1464 ; SDAG-IEEE-LABEL: v_sqrt_v3f32:
1465 ; SDAG-IEEE:       ; %bb.0:
1466 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1467 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, 0xf800000
1468 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v0
1469 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v0
1470 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
1471 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v3, v0
1472 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], -1, v3
1473 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v4, v3, v0
1474 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
1475 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, v3, v4, s[4:5]
1476 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], 1, v3
1477 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v5, v3, v0
1478 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v3
1479 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v4, v5, s[4:5]
1480 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1481 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1482 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v5, 0x4f800000, v1
1483 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v1
1484 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
1485 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v5, v1
1486 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
1487 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v4
1488 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v3, v0, s[4:5]
1489 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v5
1490 ; SDAG-IEEE-NEXT:    v_fma_f32 v6, -v3, v5, v1
1491 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v6
1492 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v5, v3, s[4:5]
1493 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v5
1494 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v6, v5, v1
1495 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
1496 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[4:5]
1497 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
1498 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
1499 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v5, 0x4f800000, v2
1500 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v2
1501 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v5, vcc
1502 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v5, v2
1503 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v1, v4
1504 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v3, v1, s[4:5]
1505 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v5
1506 ; SDAG-IEEE-NEXT:    v_fma_f32 v6, -v3, v5, v2
1507 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v6
1508 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v5, v3, s[4:5]
1509 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v5
1510 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v6, v5, v2
1511 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
1512 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[4:5]
1513 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
1514 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
1515 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v2, v4
1516 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
1517 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1519 ; GISEL-IEEE-LABEL: v_sqrt_v3f32:
1520 ; GISEL-IEEE:       ; %bb.0:
1521 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1522 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0xf800000
1523 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x4f800000, v0
1524 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v0
1525 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc
1526 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v4, v0
1527 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], -1, v4
1528 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v5, v4, v0
1529 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v7, s[4:5], 1, v4
1530 ; GISEL-IEEE-NEXT:    v_fma_f32 v8, -v7, v4, v0
1531 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v6
1532 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, v4, v5, s[4:5]
1533 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v8
1534 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, v4, v7, s[4:5]
1535 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v5, 0x37800000, v4
1536 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v4, v4, v5, vcc
1537 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v6, 0x4f800000, v1
1538 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v1
1539 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
1540 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v6, v1
1541 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v5, 0x260
1542 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v5
1543 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, v4, v0, s[4:5]
1544 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], -1, v6
1545 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v4, v6, v1
1546 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v8, s[4:5], 1, v6
1547 ; GISEL-IEEE-NEXT:    v_fma_f32 v9, -v8, v6, v1
1548 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v7
1549 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, v6, v4, s[4:5]
1550 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v9
1551 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, v4, v8, s[4:5]
1552 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v6, 0x37800000, v4
1553 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v4, v4, v6, vcc
1554 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v6, 0x4f800000, v2
1555 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v2
1556 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc
1557 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v2
1558 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v1, v5
1559 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v4, v1, s[4:5]
1560 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], -1, v3
1561 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v4, v3, v2
1562 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v7, s[4:5], 1, v3
1563 ; GISEL-IEEE-NEXT:    v_fma_f32 v8, -v7, v3, v2
1564 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v6
1565 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[4:5]
1566 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v8
1567 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[4:5]
1568 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1569 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1570 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v2, v5
1571 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
1572 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1574 ; SDAG-DAZ-LABEL: v_sqrt_v3f32:
1575 ; SDAG-DAZ:       ; %bb.0:
1576 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1577 ; SDAG-DAZ-NEXT:    s_mov_b32 s6, 0xf800000
1578 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v0
1579 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v0
1580 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
1581 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v3, v0
1582 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, v0, v3
1583 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
1584 ; SDAG-DAZ-NEXT:    v_fma_f32 v5, -v3, v4, 0.5
1585 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, v4, v5, v4
1586 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v4, v4, v0
1587 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
1588 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v4
1589 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1590 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1591 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x4f800000, v1
1592 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s6, v1
1593 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
1594 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v4, v1
1595 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v5, 0x260
1596 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v5
1597 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v0, v3, v0, s[4:5]
1598 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, v1, v4
1599 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0.5, v4
1600 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v4, v3, 0.5
1601 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v6, v3
1602 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, v4, v6, v4
1603 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v6, 0x4f800000, v2
1604 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e64 s[4:5], s6, v2
1605 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
1606 ; SDAG-DAZ-NEXT:    v_fma_f32 v7, -v3, v3, v1
1607 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v6, v2
1608 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v7, v4, v3
1609 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1610 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1611 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v1, v5
1612 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1613 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, v2, v6
1614 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0.5, v6
1615 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v4, v3, 0.5
1616 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v6, v3
1617 ; SDAG-DAZ-NEXT:    v_fma_f32 v7, -v3, v3, v2
1618 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, v4, v6, v4
1619 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v7, v4, v3
1620 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1621 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[4:5]
1622 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v2, v5
1623 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
1624 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
1626 ; GISEL-DAZ-LABEL: v_sqrt_v3f32:
1627 ; GISEL-DAZ:       ; %bb.0:
1628 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1629 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0xf800000
1630 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0x4f800000, v0
1631 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v0
1632 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc
1633 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v4, v0
1634 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, v0, v4
1635 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0.5, v4
1636 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v4, v5, 0.5
1637 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, v5, v6, v5
1638 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, v4, v6, v4
1639 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v5, v5, v0
1640 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, v6, v4, v5
1641 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0x37800000, v4
1642 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v4, v4, v5, vcc
1643 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0x4f800000, v1
1644 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v1
1645 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
1646 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v5, v1
1647 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v6, 0x260
1648 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v6
1649 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v0, v4, v0, s[4:5]
1650 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, v1, v5
1651 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0.5, v5
1652 ; GISEL-DAZ-NEXT:    v_fma_f32 v7, -v5, v4, 0.5
1653 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, v4, v7, v4
1654 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, v5, v7, v5
1655 ; GISEL-DAZ-NEXT:    v_fma_f32 v7, -v4, v4, v1
1656 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, v7, v5, v4
1657 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v7, 0x4f800000, v2
1658 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 s[4:5], v3, v2
1659 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v2, v2, v7, s[4:5]
1660 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v3, v2
1661 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0x37800000, v4
1662 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v4, v4, v5, vcc
1663 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v1, v6
1664 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v4, v1, vcc
1665 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, v2, v3
1666 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
1667 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v3, v4, 0.5
1668 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, v4, v5, v4
1669 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
1670 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v4, v4, v2
1671 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v5, v3, v4
1672 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
1673 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[4:5]
1674 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v2, v6
1675 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
1676 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
1677   %result = call <3 x float> @llvm.sqrt.v3f32(<3 x float> %x)
1678   ret <3 x float> %result
1681 ; fpmath should be ignored
1682 define float @v_sqrt_f32_ulp05(float %x) {
1683 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp05:
1684 ; SDAG-IEEE:       ; %bb.0:
1685 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1686 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
1687 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
1688 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1689 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1690 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1691 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1692 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1693 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1694 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
1695 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
1696 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
1697 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
1698 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
1699 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1700 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1701 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1702 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1703 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1704 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1706 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp05:
1707 ; GISEL-IEEE:       ; %bb.0:
1708 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1709 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
1710 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1711 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
1712 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1713 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1714 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1715 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1716 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
1717 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
1718 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1719 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
1720 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
1721 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
1722 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1723 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1724 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1725 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1726 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1727 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1729 ; SDAG-DAZ-LABEL: v_sqrt_f32_ulp05:
1730 ; SDAG-DAZ:       ; %bb.0:
1731 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1732 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
1733 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
1734 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1735 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1736 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
1737 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
1738 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
1739 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
1740 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
1741 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
1742 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
1743 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
1744 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1745 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1746 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
1747 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1748 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1749 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
1751 ; GISEL-DAZ-LABEL: v_sqrt_f32_ulp05:
1752 ; GISEL-DAZ:       ; %bb.0:
1753 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1754 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
1755 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1756 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
1757 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1758 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
1759 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
1760 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
1761 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
1762 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
1763 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
1764 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
1765 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
1766 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1767 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1768 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
1769 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1770 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1771 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
1772   %result = call float @llvm.sqrt.f32(float %x), !fpmath !0
1773   ret float %result
1776 ; fpmath should be used with DAZ only
1777 define float @v_sqrt_f32_ulp1(float %x) {
1778 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp1:
1779 ; SDAG-IEEE:       ; %bb.0:
1780 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1781 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
1782 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
1783 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1784 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1785 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1786 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1787 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1788 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1789 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
1790 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
1791 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
1792 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
1793 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
1794 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1795 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1796 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1797 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1798 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1799 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1801 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp1:
1802 ; GISEL-IEEE:       ; %bb.0:
1803 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1804 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
1805 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
1806 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
1807 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1808 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
1809 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
1810 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
1811 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
1812 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
1813 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
1814 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
1815 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
1816 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
1817 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
1818 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1819 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
1820 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
1821 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
1822 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1824 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp1:
1825 ; GCN-DAZ:       ; %bb.0:
1826 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1827 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
1828 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
1829   %result = call float @llvm.sqrt.f32(float %x), !fpmath !1
1830   ret float %result
1833 ; fpmath should always be used
1834 define float @v_sqrt_f32_ulp2(float %x) {
1835 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2:
1836 ; SDAG-IEEE:       ; %bb.0:
1837 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1838 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
1839 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1840 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1841 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1842 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1843 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1844 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1845 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1846 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1848 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2:
1849 ; GISEL-IEEE:       ; %bb.0:
1850 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1851 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
1852 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1853 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1854 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1855 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1856 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1857 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1858 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1859 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1861 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp2:
1862 ; GCN-DAZ:       ; %bb.0:
1863 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1864 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
1865 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
1866   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
1867   ret float %result
1870 ; fpmath should always be used
1871 define float @v_sqrt_f32_ulp25(float %x) {
1872 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp25:
1873 ; SDAG-IEEE:       ; %bb.0:
1874 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1875 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
1876 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1877 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1878 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1879 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1880 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1881 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1882 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1883 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1885 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp25:
1886 ; GISEL-IEEE:       ; %bb.0:
1887 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1888 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
1889 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1890 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1891 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1892 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1893 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1894 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1895 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1896 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1898 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp25:
1899 ; GCN-DAZ:       ; %bb.0:
1900 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1901 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
1902 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
1903   %result = call float @llvm.sqrt.f32(float %x), !fpmath !3
1904   ret float %result
1907 ; fpmath should always be used
1908 define float @v_sqrt_f32_ulp3(float %x) {
1909 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp3:
1910 ; SDAG-IEEE:       ; %bb.0:
1911 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1912 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
1913 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1914 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1915 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1916 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1917 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1918 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1919 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1920 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1922 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp3:
1923 ; GISEL-IEEE:       ; %bb.0:
1924 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1925 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
1926 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1927 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1928 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1929 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1930 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1931 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
1932 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1933 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
1935 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp3:
1936 ; GCN-DAZ:       ; %bb.0:
1937 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1938 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
1939 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
1940   %result = call float @llvm.sqrt.f32(float %x), !fpmath !4
1941   ret float %result
1944 define float @v_sqrt_f32_ulp2_fabs(float %x) {
1945 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_fabs:
1946 ; SDAG-IEEE:       ; %bb.0:
1947 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1948 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
1949 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
1950 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, s[4:5]
1951 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1952 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e64 v0, |v0|, v1
1953 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
1954 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, s[4:5]
1955 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
1956 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
1958 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_fabs:
1959 ; GISEL-IEEE:       ; %bb.0:
1960 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1961 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
1962 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v1
1963 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, s[4:5]
1964 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
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:    v_mov_b32_e32 v2, 0xf800000
2025 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x4f800000, v0
2026 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v2, v0
2027 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
2028 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v0
2029 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], -1, v3
2030 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v3, v0
2031 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v3
2032 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v3, v0
2033 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
2034 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[4:5]
2035 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v7
2036 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[4:5]
2037 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
2038 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
2039 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v5, 0x4f800000, v1
2040 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v2, v1
2041 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
2042 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v2, v1
2043 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
2044 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v4
2045 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, v3, v0, s[4:5]
2046 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v2
2047 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v3, v2, v1
2048 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v2
2049 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v2, v1
2050 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
2051 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[4:5]
2052 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v7
2053 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
2054 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
2055 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
2056 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v4
2057 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
2058 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2060 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp1:
2061 ; GCN-DAZ:       ; %bb.0:
2062 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2063 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2064 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2065 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2066   %result = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !1
2067   ret <2 x float> %result
2070 ; fpmath should always be used
2071 define <2 x float> @v_sqrt_v2f32_ulp2(<2 x float> %x) {
2072 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2:
2073 ; SDAG-IEEE:       ; %bb.0:
2074 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2075 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2076 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2077 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2078 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2079 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2080 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2081 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[4:5]
2082 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2083 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2084 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2085 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2086 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2087 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2088 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2089 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2090 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2092 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2:
2093 ; GISEL-IEEE:       ; %bb.0:
2094 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2095 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x800000
2096 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v2
2097 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
2098 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], v1, v2
2099 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v3, 5, v3
2100 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[4:5]
2101 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v3
2102 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2103 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2104 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2105 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2106 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2107 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2108 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2109 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2110 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2112 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2:
2113 ; GCN-DAZ:       ; %bb.0:
2114 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2115 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2116 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2117 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2118   %result = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !2
2119   ret <2 x float> %result
2122 define <2 x float> @v_sqrt_v2f32_ulp1_fabs(<2 x float> %x) {
2123 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp1_fabs:
2124 ; SDAG-IEEE:       ; %bb.0:
2125 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2126 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, 0xf800000
2127 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0x4f800000
2128 ; SDAG-IEEE-NEXT:    v_mul_f32_e64 v2, |v0|, s7
2129 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
2130 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, |v0|, v2, vcc
2131 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v2, v0
2132 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v2
2133 ; SDAG-IEEE-NEXT:    v_fma_f32 v4, -v3, v2, v0
2134 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v4
2135 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v2, v3, s[4:5]
2136 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v2
2137 ; SDAG-IEEE-NEXT:    v_fma_f32 v2, -v4, v2, v0
2138 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v2
2139 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v4, s[4:5]
2140 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
2141 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
2142 ; SDAG-IEEE-NEXT:    v_mul_f32_e64 v4, |v1|, s7
2143 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s6
2144 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, |v1|, v4, vcc
2145 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v4, v1
2146 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v3, 0x260
2147 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v3
2148 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v0, s[4:5]
2149 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v4
2150 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, v1
2151 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
2152 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v4, v2, s[4:5]
2153 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], 1, v4
2154 ; SDAG-IEEE-NEXT:    v_fma_f32 v4, -v5, v4, v1
2155 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v4
2156 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[4:5]
2157 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v2
2158 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
2159 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v3
2160 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
2161 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2163 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp1_fabs:
2164 ; GISEL-IEEE:       ; %bb.0:
2165 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2166 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0xf800000
2167 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x4f800000
2168 ; GISEL-IEEE-NEXT:    v_mul_f32_e64 v4, |v0|, v3
2169 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 vcc, v2, |v0|
2170 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, |v0|, v4, vcc
2171 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v4, v0
2172 ; GISEL-IEEE-NEXT:    v_mul_f32_e64 v3, |v1|, v3
2173 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], -1, v4
2174 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v5, v4, v0
2175 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v7, s[4:5], 1, v4
2176 ; GISEL-IEEE-NEXT:    v_fma_f32 v8, -v7, v4, v0
2177 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v6
2178 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, v4, v5, s[4:5]
2179 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v8
2180 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, v4, v7, s[4:5]
2181 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v5, 0x37800000, v4
2182 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v4, v4, v5, vcc
2183 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e64 vcc, v2, |v1|
2184 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, |v1|, v3, vcc
2185 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v2, v1
2186 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v5, 0x260
2187 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[4:5], v0, v5
2188 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v0, v4, v0, s[4:5]
2189 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v2
2190 ; GISEL-IEEE-NEXT:    v_fma_f32 v4, -v3, v2, v1
2191 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[4:5], 1, v2
2192 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v2, v1
2193 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v4
2194 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[4:5]
2195 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v7
2196 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
2197 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
2198 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
2199 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v5
2200 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
2201 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2203 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp1_fabs:
2204 ; GCN-DAZ:       ; %bb.0:
2205 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2206 ; GCN-DAZ-NEXT:    v_sqrt_f32_e64 v0, |v0|
2207 ; GCN-DAZ-NEXT:    v_sqrt_f32_e64 v1, |v1|
2208 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2209   %x.fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %x)
2210   %result = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x.fabs), !fpmath !1
2211   ret <2 x float> %result
2214 ; fpmath should always be used
2215 define <2 x float> @v_sqrt_v2f32_ulp2_fabs(<2 x float> %x) {
2216 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2_fabs:
2217 ; SDAG-IEEE:       ; %bb.0:
2218 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2219 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, 0x800000
2220 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s6
2221 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[4:5]
2222 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2223 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[6:7], |v1|, s6
2224 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e64 v0, |v0|, v2
2225 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[6:7]
2226 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2227 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2228 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e64 v1, |v1|, v2
2229 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2230 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2231 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2232 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[6:7]
2233 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2234 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2236 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2_fabs:
2237 ; GISEL-IEEE:       ; %bb.0:
2238 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2239 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x800000
2240 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2241 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, 0, 1, s[4:5]
2242 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[6:7], |v1|, v2
2243 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v3, 5, v3
2244 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[6:7]
2245 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e64 v0, |v0|, v3
2246 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2247 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2248 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e64 v1, |v1|, v2
2249 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2250 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2251 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2252 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[6:7]
2253 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2254 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2256 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2_fabs:
2257 ; GCN-DAZ:       ; %bb.0:
2258 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2259 ; GCN-DAZ-NEXT:    v_sqrt_f32_e64 v0, |v0|
2260 ; GCN-DAZ-NEXT:    v_sqrt_f32_e64 v1, |v1|
2261 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2262   %x.fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %x)
2263   %result = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x.fabs), !fpmath !2
2264   ret <2 x float> %result
2267 ; afn is stronger than the fpmath
2268 define float @v_sqrt_f32_afn_ulp1(float %x) {
2269 ; GCN-LABEL: v_sqrt_f32_afn_ulp1:
2270 ; GCN:       ; %bb.0:
2271 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2272 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
2273 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2274   %result = call afn float @llvm.sqrt.f32(float %x), !fpmath !1
2275   ret float %result
2278 ; afn is stronger than the fpmath
2279 define float @v_sqrt_f32_afn_ulp2(float %x) {
2280 ; GCN-LABEL: v_sqrt_f32_afn_ulp2:
2281 ; GCN:       ; %bb.0:
2282 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2283 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
2284 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2285   %result = call afn float @llvm.sqrt.f32(float %x), !fpmath !2
2286   ret float %result
2289 define <2 x float> @v_sqrt_v2f32_afn_ulp1(<2 x float> %x) {
2290 ; GCN-LABEL: v_sqrt_v2f32_afn_ulp1:
2291 ; GCN:       ; %bb.0:
2292 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2293 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
2294 ; GCN-NEXT:    v_sqrt_f32_e32 v1, v1
2295 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2296   %result = call afn <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !1
2297   ret <2 x float> %result
2300 ; fpmath should always be used
2301 define <2 x float> @v_sqrt_v2f32_afn_ulp2(<2 x float> %x) {
2302 ; GCN-LABEL: v_sqrt_v2f32_afn_ulp2:
2303 ; GCN:       ; %bb.0:
2304 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2305 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
2306 ; GCN-NEXT:    v_sqrt_f32_e32 v1, v1
2307 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2308   %result = call afn <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !2
2309   ret <2 x float> %result
2312 define float @v_sqrt_f32_ulp2_noncontractable_rcp(float %x) {
2313 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_noncontractable_rcp:
2314 ; SDAG-IEEE:       ; %bb.0:
2315 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2316 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2317 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2318 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
2319 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
2320 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2321 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2322 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
2323 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2324 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2325 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v1, v0
2326 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2327 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v0, v1, vcc
2328 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v1, v1
2329 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2330 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2331 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v1, v0
2332 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2334 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_noncontractable_rcp:
2335 ; GISEL-IEEE:       ; %bb.0:
2336 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2337 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
2338 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2339 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
2340 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
2341 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2342 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2343 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
2344 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2345 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2346 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v1, v0
2347 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
2348 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v0, v1, vcc
2349 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v1, v1
2350 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2351 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2352 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v1, v0
2353 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2355 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp2_noncontractable_rcp:
2356 ; GCN-DAZ:       ; %bb.0:
2357 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2358 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2359 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2360 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2361   %sqrt = call contract float @llvm.sqrt.f32(float %x), !fpmath !4
2362   %result = fdiv float 1.0, %sqrt, !fpmath !3
2363   ret float %result
2366 define float @v_sqrt_f32_ulp2_contractable_rcp(float %x) {
2367 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_rcp:
2368 ; SDAG-IEEE:       ; %bb.0:
2369 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2370 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2371 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4b800000
2372 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2373 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2374 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
2375 ; SDAG-IEEE-NEXT:    v_rsq_f32_e32 v0, v0
2376 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x45800000
2377 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2378 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
2379 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2381 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_rcp:
2382 ; GISEL-IEEE:       ; %bb.0:
2383 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2384 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
2385 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x4b800000
2386 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2387 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2388 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
2389 ; GISEL-IEEE-NEXT:    v_rsq_f32_e32 v0, v0
2390 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x45800000
2391 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2392 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
2393 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2395 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp2_contractable_rcp:
2396 ; GCN-DAZ:       ; %bb.0:
2397 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2398 ; GCN-DAZ-NEXT:    v_rsq_f32_e32 v0, v0
2399 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2400   %sqrt = call contract float @llvm.sqrt.f32(float %x), !fpmath !4
2401   %result = fdiv contract float 1.0, %sqrt, !fpmath !3
2402   ret float %result
2405 define float @v_sqrt_f32_ulp2_noncontractable_fdiv(float %x, float %y) {
2406 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_noncontractable_fdiv:
2407 ; SDAG-IEEE:       ; %bb.0:
2408 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2409 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2410 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2411 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2412 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2413 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2414 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2415 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2416 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2417 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v1
2418 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2419 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2420 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2421 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2422 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2423 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2424 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2425 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v1, v3, vcc
2426 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2427 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
2428 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v1, v0
2429 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2430 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2432 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_noncontractable_fdiv:
2433 ; GISEL-IEEE:       ; %bb.0:
2434 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2435 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x800000
2436 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v2
2437 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2438 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2439 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2440 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2441 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2442 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
2443 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v1
2444 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2445 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2446 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
2447 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2448 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2449 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
2450 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2451 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v1, v4, vcc
2452 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2453 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
2454 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v1, v0
2455 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2456 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2458 ; SDAG-DAZ-LABEL: v_sqrt_f32_ulp2_noncontractable_fdiv:
2459 ; SDAG-DAZ:       ; %bb.0:
2460 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2461 ; SDAG-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2462 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0x6f800000
2463 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x2f800000
2464 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
2465 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2466 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v2
2467 ; SDAG-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2468 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v1, v0
2469 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2470 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
2472 ; GISEL-DAZ-LABEL: v_sqrt_f32_ulp2_noncontractable_fdiv:
2473 ; GISEL-DAZ:       ; %bb.0:
2474 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2475 ; GISEL-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2476 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x6f800000
2477 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0x2f800000
2478 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, v2
2479 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, 1.0, v3, vcc
2480 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v2
2481 ; GISEL-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2482 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v1, v0
2483 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2484 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
2485   %sqrt = call contract float @llvm.sqrt.f32(float %x), !fpmath !4
2486   %result = fdiv float %y, %sqrt, !fpmath !3
2487   ret float %result
2490 define float @v_sqrt_f32_ulp2_contractable_fdiv(float %x, float %y) {
2491 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_fdiv:
2492 ; SDAG-IEEE:       ; %bb.0:
2493 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2494 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2495 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2496 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2497 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2498 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2499 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2500 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2501 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2502 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v1
2503 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2504 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2505 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2506 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2507 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2508 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2509 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2510 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v1, v3, vcc
2511 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2512 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
2513 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v1, v0
2514 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2515 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2517 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_fdiv:
2518 ; GISEL-IEEE:       ; %bb.0:
2519 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2520 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x800000
2521 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v2
2522 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2523 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2524 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2525 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2526 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2527 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
2528 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v1
2529 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2530 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2531 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
2532 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2533 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2534 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
2535 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2536 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v1, v4, vcc
2537 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2538 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
2539 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v1, v0
2540 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2541 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2543 ; SDAG-DAZ-LABEL: v_sqrt_f32_ulp2_contractable_fdiv:
2544 ; SDAG-DAZ:       ; %bb.0:
2545 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2546 ; SDAG-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2547 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0x6f800000
2548 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x2f800000
2549 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
2550 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2551 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v2
2552 ; SDAG-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2553 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v1, v0
2554 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2555 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
2557 ; GISEL-DAZ-LABEL: v_sqrt_f32_ulp2_contractable_fdiv:
2558 ; GISEL-DAZ:       ; %bb.0:
2559 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2560 ; GISEL-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2561 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x6f800000
2562 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0x2f800000
2563 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, v2
2564 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, 1.0, v3, vcc
2565 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v2
2566 ; GISEL-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2567 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v1, v0
2568 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2569 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
2570   %sqrt = call contract float @llvm.sqrt.f32(float %x), !fpmath !4
2571   %result = fdiv contract float %y, %sqrt, !fpmath !3
2572   ret float %result
2575 define float @v_sqrt_f32_ulp2_contractable_fdiv_arcp(float %x, float %y) {
2576 ; SDAG-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_fdiv_arcp:
2577 ; SDAG-IEEE:       ; %bb.0:
2578 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2579 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2580 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2581 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2582 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2583 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2584 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2585 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2586 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2587 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2588 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2589 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2590 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2591 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2592 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2593 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2594 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2595 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v0, v1, v0
2596 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2598 ; GISEL-IEEE-LABEL: v_sqrt_f32_ulp2_contractable_fdiv_arcp:
2599 ; GISEL-IEEE:       ; %bb.0:
2600 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2601 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x800000
2602 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v2
2603 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2604 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2605 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2606 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2607 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2608 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
2609 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2610 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2611 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
2612 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2613 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2614 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2615 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2616 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2617 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, v1, v0
2618 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2620 ; GCN-DAZ-LABEL: v_sqrt_f32_ulp2_contractable_fdiv_arcp:
2621 ; GCN-DAZ:       ; %bb.0:
2622 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2623 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2624 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2625 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v0, v1, v0
2626 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2627   %sqrt = call contract float @llvm.sqrt.f32(float %x), !fpmath !4
2628   %result = fdiv arcp contract float %y, %sqrt, !fpmath !3
2629   ret float %result
2632 define <2 x float> @v_sqrt_v2f32_ulp2_noncontractable_rcp(<2 x float> %x) {
2633 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2_noncontractable_rcp:
2634 ; SDAG-IEEE:       ; %bb.0:
2635 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2636 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2637 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2638 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2639 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2640 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2641 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2642 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[4:5]
2643 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2644 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2645 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2646 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2647 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2648 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2649 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2650 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2651 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2652 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2653 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2654 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2655 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2656 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2657 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2658 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2659 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2660 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2661 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2662 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2663 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2664 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, 0, v1
2665 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2666 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2668 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2_noncontractable_rcp:
2669 ; GISEL-IEEE:       ; %bb.0:
2670 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2671 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x800000
2672 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v2
2673 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
2674 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], v1, v2
2675 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v3, 5, v3
2676 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, 1, s[4:5]
2677 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v3
2678 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v2, 5, v2
2679 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2680 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2681 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2682 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
2683 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v2
2684 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, s[4:5]
2685 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
2686 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
2687 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2688 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
2689 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2690 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2691 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2692 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2693 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2694 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2695 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
2696 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2697 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2698 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2699 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, 0, v1
2700 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2701 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2703 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2_noncontractable_rcp:
2704 ; GCN-DAZ:       ; %bb.0:
2705 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2706 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2707 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2708 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2709 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v1, v1
2710 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2711   %sqrt = call contract <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !4
2712   %result = fdiv <2 x float> <float 1.0, float 1.0>, %sqrt, !fpmath !3
2713   ret <2 x float> %result
2716 define <2 x float> @v_sqrt_v2f32_ulp2_contractable_rcp(<2 x float> %x) {
2717 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_rcp:
2718 ; SDAG-IEEE:       ; %bb.0:
2719 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2720 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2721 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x4b800000
2722 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2723 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, 1.0, v2, vcc
2724 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2725 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v3
2726 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 1.0, v2, s[4:5]
2727 ; SDAG-IEEE-NEXT:    v_rsq_f32_e32 v0, v0
2728 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, v1, v2
2729 ; SDAG-IEEE-NEXT:    v_rsq_f32_e32 v1, v1
2730 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v3, 0x45800000
2731 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, 1.0, v3, vcc
2732 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v2
2733 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 1.0, v3, s[4:5]
2734 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, v1, v2
2735 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2737 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_rcp:
2738 ; GISEL-IEEE:       ; %bb.0:
2739 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2740 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x800000
2741 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x4b800000
2742 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v2
2743 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v4, 1.0, v3, vcc
2744 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], v1, v2
2745 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v4
2746 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 1.0, v3, s[4:5]
2747 ; GISEL-IEEE-NEXT:    v_rsq_f32_e32 v0, v0
2748 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, v1, v2
2749 ; GISEL-IEEE-NEXT:    v_rsq_f32_e32 v1, v1
2750 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x45800000
2751 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, 1.0, v4, vcc
2752 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v2
2753 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 1.0, v4, s[4:5]
2754 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, v1, v2
2755 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2757 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2_contractable_rcp:
2758 ; GCN-DAZ:       ; %bb.0:
2759 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2760 ; GCN-DAZ-NEXT:    v_rsq_f32_e32 v0, v0
2761 ; GCN-DAZ-NEXT:    v_rsq_f32_e32 v1, v1
2762 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2763   %sqrt = call contract <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !4
2764   %result = fdiv contract <2 x float> <float 1.0, float 1.0>, %sqrt, !fpmath !3
2765   ret <2 x float> %result
2768 define <2 x float> @v_sqrt_v2f32_ulp2_contractable_fdiv(<2 x float> %x, <2 x float> %y) {
2769 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv:
2770 ; SDAG-IEEE:       ; %bb.0:
2771 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2772 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2773 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2774 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2775 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v4, 5, v4
2776 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2777 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2778 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2779 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v4, 5, v4
2780 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2781 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2782 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2783 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, vcc
2784 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2785 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, s[4:5]
2786 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2787 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2788 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
2789 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2790 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v4, v0, v4, vcc
2791 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v5, v2
2792 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v2|, s4
2793 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2794 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v5, v2, v5, vcc
2795 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2
2796 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2797 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v2, v0
2798 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2799 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2800 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2801 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2802 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, v5, v4
2803 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v4, v0
2804 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v3
2805 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v3|, s4
2806 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2807 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v4, v3, v4, vcc
2808 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3
2809 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, v4, v2
2810 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, v3, v1
2811 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2812 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2814 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv:
2815 ; GISEL-IEEE:       ; %bb.0:
2816 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2817 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x800000
2818 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v4
2819 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
2820 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], v1, v4
2821 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v5, 5, v5
2822 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2823 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v5
2824 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v4, 5, v4
2825 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2826 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2827 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2828 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, vcc
2829 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2830 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, s[4:5]
2831 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v5, 0x7f800000
2832 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2833 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
2834 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v5
2835 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v4, v0, v4, vcc
2836 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v6, v2
2837 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v2|, v5
2838 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2839 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v6, v2, v6, vcc
2840 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2
2841 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2842 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v2, v0
2843 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2844 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v5
2845 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2846 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2847 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, v6, v4
2848 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v4, v0
2849 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v3
2850 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v3|, v5
2851 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2852 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v4, v3, v4, vcc
2853 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3
2854 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, v4, v2
2855 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, v3, v1
2856 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2857 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2859 ; SDAG-DAZ-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv:
2860 ; SDAG-DAZ:       ; %bb.0:
2861 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2862 ; SDAG-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2863 ; SDAG-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2864 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0x6f800000
2865 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v4, 0x2f800000
2866 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
2867 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v5, 1.0, v4, vcc
2868 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v1|, s4
2869 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v4, 1.0, v4, vcc
2870 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v5
2871 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, v1, v4
2872 ; SDAG-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2873 ; SDAG-DAZ-NEXT:    v_rcp_f32_e32 v1, v1
2874 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2875 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, v3, v1
2876 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v0, v5, v0
2877 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, v4, v1
2878 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
2880 ; GISEL-DAZ-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv:
2881 ; GISEL-DAZ:       ; %bb.0:
2882 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2883 ; GISEL-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2884 ; GISEL-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2885 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0x6f800000
2886 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v5, 0x2f800000
2887 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, v4
2888 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v6, 1.0, v5, vcc
2889 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e64 vcc, |v1|, v4
2890 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v4, 1.0, v5, vcc
2891 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v0, v6
2892 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, v1, v4
2893 ; GISEL-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2894 ; GISEL-DAZ-NEXT:    v_rcp_f32_e32 v1, v1
2895 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2896 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, v3, v1
2897 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v0, v6, v0
2898 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, v4, v1
2899 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
2900   %sqrt = call contract <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !4
2901   %result = fdiv contract <2 x float> %y, %sqrt, !fpmath !3
2902   ret <2 x float> %result
2905 define <2 x float> @v_sqrt_v2f32_ulp2_contractable_fdiv_arcp(<2 x float> %x, <2 x float> %y) {
2906 ; SDAG-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv_arcp:
2907 ; SDAG-IEEE:       ; %bb.0:
2908 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2909 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
2910 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2911 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2912 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v4, 5, v4
2913 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e64 s[4:5], s4, v1
2914 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2915 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2916 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v4, 5, v4
2917 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2918 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2919 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2920 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, vcc
2921 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2922 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, s[4:5]
2923 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x7f800000
2924 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2925 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
2926 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2927 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v4, v0, v4, vcc
2928 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2929 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2930 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2931 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v4, v0
2932 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v0, v2, v0
2933 ; SDAG-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2934 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2935 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2936 ; SDAG-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2937 ; SDAG-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2938 ; SDAG-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, 0, v1
2939 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2940 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, v3, v1
2941 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
2943 ; GISEL-IEEE-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv_arcp:
2944 ; GISEL-IEEE:       ; %bb.0:
2945 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2946 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x800000
2947 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v4
2948 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
2949 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], v1, v4
2950 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v5, 5, v5
2951 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2952 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v5
2953 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v4, 5, v4
2954 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
2955 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2956 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
2957 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, vcc
2958 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v4
2959 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v4, 0, -16, s[4:5]
2960 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v5, 0x7f800000
2961 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v4
2962 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
2963 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v5
2964 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v4, v0, v4, vcc
2965 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2966 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2967 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2968 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v4, v0
2969 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v0, v2, v0
2970 ; GISEL-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2971 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v5
2972 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2973 ; GISEL-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2974 ; GISEL-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2975 ; GISEL-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, 0, v1
2976 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2977 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, v3, v1
2978 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
2980 ; GCN-DAZ-LABEL: v_sqrt_v2f32_ulp2_contractable_fdiv_arcp:
2981 ; GCN-DAZ:       ; %bb.0:
2982 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2983 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
2984 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v1, v1
2985 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v0, v0
2986 ; GCN-DAZ-NEXT:    v_rcp_f32_e32 v1, v1
2987 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v0, v2, v0
2988 ; GCN-DAZ-NEXT:    v_mul_f32_e32 v1, v3, v1
2989 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
2990   %sqrt = call contract <2 x float> @llvm.sqrt.v2f32(<2 x float> %x), !fpmath !4
2991   %result = fdiv arcp contract <2 x float> %y, %sqrt, !fpmath !3
2992   ret <2 x float> %result
2995 define amdgpu_ps i32 @s_sqrt_f32_ulp1(float inreg %x) {
2996 ; GCN-LABEL: s_sqrt_f32_ulp1:
2997 ; GCN:       ; %bb.0:
2998 ; GCN-NEXT:    v_sqrt_f32_e32 v0, s0
2999 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
3000 ; GCN-NEXT:    ; return to shader part epilog
3001   %result = call afn float @llvm.sqrt.f32(float %x), !fpmath !1
3002   %cast = bitcast float %result to i32
3003   %firstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
3004   ret i32 %firstlane
3007 define amdgpu_ps i32 @s_sqrt_f32_ulp2(float inreg %x) {
3008 ; GCN-LABEL: s_sqrt_f32_ulp2:
3009 ; GCN:       ; %bb.0:
3010 ; GCN-NEXT:    v_sqrt_f32_e32 v0, s0
3011 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
3012 ; GCN-NEXT:    ; return to shader part epilog
3013   %result = call afn float @llvm.sqrt.f32(float %x), !fpmath !2
3014   %cast = bitcast float %result to i32
3015   %firstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
3016   ret i32 %firstlane
3019 define amdgpu_ps i32 @s_sqrt_f32_ulp3(float inreg %x) {
3020 ; GCN-LABEL: s_sqrt_f32_ulp3:
3021 ; GCN:       ; %bb.0:
3022 ; GCN-NEXT:    v_sqrt_f32_e32 v0, s0
3023 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
3024 ; GCN-NEXT:    ; return to shader part epilog
3025   %result = call afn float @llvm.sqrt.f32(float %x), !fpmath !4
3026   %cast = bitcast float %result to i32
3027   %firstlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
3028   ret i32 %firstlane
3031 define float @v_sqrt_f32_known_never_posdenormal_ulp2(float nofpclass(psub) %x) {
3032 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_posdenormal_ulp2:
3033 ; SDAG-IEEE:       ; %bb.0:
3034 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3035 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3036 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3037 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3038 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3039 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3040 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3041 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3042 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3043 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3045 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_posdenormal_ulp2:
3046 ; GISEL-IEEE:       ; %bb.0:
3047 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3048 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3049 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3050 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3051 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3052 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3053 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3054 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3055 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3056 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3058 ; GCN-DAZ-LABEL: v_sqrt_f32_known_never_posdenormal_ulp2:
3059 ; GCN-DAZ:       ; %bb.0:
3060 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3061 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3062 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3063   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
3064   ret float %result
3067 define float @v_sqrt_f32_nsz_known_never_posdenormal_ulp2(float nofpclass(psub) %x) {
3068 ; SDAG-IEEE-LABEL: v_sqrt_f32_nsz_known_never_posdenormal_ulp2:
3069 ; SDAG-IEEE:       ; %bb.0:
3070 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3071 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3072 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3073 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3074 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3075 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3076 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3077 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3078 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3079 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3081 ; GISEL-IEEE-LABEL: v_sqrt_f32_nsz_known_never_posdenormal_ulp2:
3082 ; GISEL-IEEE:       ; %bb.0:
3083 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3084 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3085 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3086 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3087 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3088 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3089 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3090 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3091 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3092 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3094 ; GCN-DAZ-LABEL: v_sqrt_f32_nsz_known_never_posdenormal_ulp2:
3095 ; GCN-DAZ:       ; %bb.0:
3096 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3097 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3098 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3099   %result = call nsz float @llvm.sqrt.f32(float %x), !fpmath !2
3100   ret float %result
3103 define float @v_sqrt_f32_known_never_negdenormal(float nofpclass(nsub) %x) {
3104 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_negdenormal:
3105 ; SDAG-IEEE:       ; %bb.0:
3106 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3107 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3108 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3109 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3110 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3111 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3112 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3113 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3114 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3115 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3117 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_negdenormal:
3118 ; GISEL-IEEE:       ; %bb.0:
3119 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3120 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3121 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3122 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3123 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3124 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3125 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3126 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3127 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3128 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3130 ; GCN-DAZ-LABEL: v_sqrt_f32_known_never_negdenormal:
3131 ; GCN-DAZ:       ; %bb.0:
3132 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3133 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3134 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3135   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
3136   ret float %result
3139 define float @v_sqrt_f32_known_never_denormal(float nofpclass(sub) %x) {
3140 ; GCN-LABEL: v_sqrt_f32_known_never_denormal:
3141 ; GCN:       ; %bb.0:
3142 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3143 ; GCN-NEXT:    v_sqrt_f32_e32 v0, v0
3144 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3145   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
3146   ret float %result
3149 define float @v_sqrt_f32_ninf_known_never_zero(float nofpclass(zero) %x) {
3150 ; SDAG-IEEE-LABEL: v_sqrt_f32_ninf_known_never_zero:
3151 ; SDAG-IEEE:       ; %bb.0:
3152 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3153 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3154 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3155 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3156 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3157 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3158 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3159 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3160 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3161 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3162 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3163 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3164 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3165 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3166 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3167 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3168 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3169 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3170 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3171 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3173 ; GISEL-IEEE-LABEL: v_sqrt_f32_ninf_known_never_zero:
3174 ; GISEL-IEEE:       ; %bb.0:
3175 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3176 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3177 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3178 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3179 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3180 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3181 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3182 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3183 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
3184 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3185 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3186 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
3187 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
3188 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
3189 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3190 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3191 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3192 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3193 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3194 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3196 ; SDAG-DAZ-LABEL: v_sqrt_f32_ninf_known_never_zero:
3197 ; SDAG-DAZ:       ; %bb.0:
3198 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3199 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3200 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3201 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3202 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3203 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3204 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3205 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3206 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3207 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3208 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3209 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3210 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3211 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3212 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3213 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3214 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3215 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3216 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3218 ; GISEL-DAZ-LABEL: v_sqrt_f32_ninf_known_never_zero:
3219 ; GISEL-DAZ:       ; %bb.0:
3220 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3221 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3222 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3223 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3224 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3225 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3226 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3227 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3228 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3229 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3230 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3231 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
3232 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
3233 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3234 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3235 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3236 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3237 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3238 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3239   %result = call ninf float @llvm.sqrt.f32(float %x)
3240   ret float %result
3243 define float @v_sqrt_f32_known_never_zero(float nofpclass(zero) %x) {
3244 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_zero:
3245 ; SDAG-IEEE:       ; %bb.0:
3246 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3247 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3248 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3249 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3250 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3251 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3252 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3253 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3254 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3255 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3256 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3257 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3258 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3259 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3260 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3261 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3262 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3263 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3264 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3265 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3267 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_zero:
3268 ; GISEL-IEEE:       ; %bb.0:
3269 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3270 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3271 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3272 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3273 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3274 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3275 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3276 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3277 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
3278 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3279 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3280 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
3281 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
3282 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
3283 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3284 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3285 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3286 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3287 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3288 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3290 ; SDAG-DAZ-LABEL: v_sqrt_f32_known_never_zero:
3291 ; SDAG-DAZ:       ; %bb.0:
3292 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3293 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3294 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3295 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3296 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3297 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3298 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3299 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3300 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3301 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3302 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3303 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3304 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3305 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3306 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3307 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3308 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3309 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3310 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3312 ; GISEL-DAZ-LABEL: v_sqrt_f32_known_never_zero:
3313 ; GISEL-DAZ:       ; %bb.0:
3314 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3315 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3316 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3317 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3318 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3319 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3320 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3321 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3322 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3323 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3324 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3325 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
3326 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
3327 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3328 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3329 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3330 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3331 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3332 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3333   %result = call float @llvm.sqrt.f32(float %x)
3334   ret float %result
3337 define float @v_sqrt_f32_known_never_zero_never_inf(float nofpclass(zero inf) %x) {
3338 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_inf:
3339 ; SDAG-IEEE:       ; %bb.0:
3340 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3341 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3342 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3343 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3344 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3345 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3346 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3347 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3348 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3349 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3350 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3351 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3352 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3353 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3354 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3355 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3356 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3357 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3358 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3359 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3361 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_inf:
3362 ; GISEL-IEEE:       ; %bb.0:
3363 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3364 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3365 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3366 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3367 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3368 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3369 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3370 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3371 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
3372 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3373 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3374 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
3375 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
3376 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
3377 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3378 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3379 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3380 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3381 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3382 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3384 ; SDAG-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_inf:
3385 ; SDAG-DAZ:       ; %bb.0:
3386 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3387 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3388 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3389 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3390 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3391 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3392 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3393 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3394 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3395 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3396 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3397 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3398 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3399 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3400 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3401 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3402 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3403 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3404 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3406 ; GISEL-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_inf:
3407 ; GISEL-DAZ:       ; %bb.0:
3408 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3409 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3410 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3411 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3412 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3413 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3414 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3415 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3416 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3417 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3418 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3419 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
3420 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
3421 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3422 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3423 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3424 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3425 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3426 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3427   %result = call float @llvm.sqrt.f32(float %x)
3428   ret float %result
3431 define float @v_sqrt_f32_known_never_zero_never_ninf(float nofpclass(zero ninf) %x) {
3432 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_ninf:
3433 ; SDAG-IEEE:       ; %bb.0:
3434 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3435 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3436 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3437 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3438 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3439 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3440 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3441 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3442 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3443 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3444 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3445 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3446 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3447 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3448 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3449 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3450 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3451 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3452 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3453 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3455 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_ninf:
3456 ; GISEL-IEEE:       ; %bb.0:
3457 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3458 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3459 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3460 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3461 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3462 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3463 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3464 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3465 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
3466 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3467 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3468 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
3469 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
3470 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
3471 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3472 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3473 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3474 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3475 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3476 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3478 ; SDAG-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_ninf:
3479 ; SDAG-DAZ:       ; %bb.0:
3480 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3481 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3482 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3483 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3484 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3485 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3486 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3487 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3488 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3489 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3490 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3491 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3492 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3493 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3494 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3495 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3496 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3497 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3498 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3500 ; GISEL-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_ninf:
3501 ; GISEL-DAZ:       ; %bb.0:
3502 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3503 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3504 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3505 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3506 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3507 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3508 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3509 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3510 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3511 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3512 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3513 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
3514 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
3515 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3516 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3517 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3518 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3519 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3520 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3521   %result = call float @llvm.sqrt.f32(float %x)
3522   ret float %result
3525 define float @v_sqrt_f32_known_never_zero_never_pinf(float nofpclass(zero pinf) %x) {
3526 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_pinf:
3527 ; SDAG-IEEE:       ; %bb.0:
3528 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3529 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3530 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3531 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3532 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3533 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3534 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3535 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3536 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3537 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3538 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3539 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3540 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3541 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3542 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3543 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3544 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3545 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3546 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3547 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3549 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_pinf:
3550 ; GISEL-IEEE:       ; %bb.0:
3551 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3552 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3553 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3554 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3555 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3556 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3557 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3558 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3559 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v1
3560 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
3561 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3562 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[4:5]
3563 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v5
3564 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[4:5]
3565 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3566 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3567 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3568 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3569 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3570 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3572 ; SDAG-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_pinf:
3573 ; SDAG-DAZ:       ; %bb.0:
3574 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3575 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3576 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3577 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3578 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3579 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3580 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3581 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3582 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3583 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3584 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3585 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3586 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3587 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3588 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3589 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3590 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3591 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3592 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3594 ; GISEL-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_pinf:
3595 ; GISEL-DAZ:       ; %bb.0:
3596 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3597 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3598 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3599 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3600 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3601 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3602 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3603 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3604 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3605 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3606 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3607 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
3608 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
3609 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3610 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3611 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3612 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3613 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3614 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3615   %result = call float @llvm.sqrt.f32(float %x)
3616   ret float %result
3619 define float @v_sqrt_f32_frexp_src(float %x) {
3620 ; SDAG-LABEL: v_sqrt_f32_frexp_src:
3621 ; SDAG:       ; %bb.0:
3622 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3623 ; SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
3624 ; SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v0
3625 ; SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
3626 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3627 ; SDAG-NEXT:    s_mov_b32 s4, 0xf800000
3628 ; SDAG-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3629 ; SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3630 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3631 ; SDAG-NEXT:    v_rsq_f32_e32 v1, v0
3632 ; SDAG-NEXT:    v_mul_f32_e32 v2, v0, v1
3633 ; SDAG-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3634 ; SDAG-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3635 ; SDAG-NEXT:    v_fma_f32 v2, v2, v3, v2
3636 ; SDAG-NEXT:    v_fma_f32 v4, -v2, v2, v0
3637 ; SDAG-NEXT:    v_fma_f32 v1, v1, v3, v1
3638 ; SDAG-NEXT:    v_fma_f32 v1, v4, v1, v2
3639 ; SDAG-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3640 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3641 ; SDAG-NEXT:    v_mov_b32_e32 v2, 0x260
3642 ; SDAG-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3643 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3644 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3646 ; GISEL-LABEL: v_sqrt_f32_frexp_src:
3647 ; GISEL:       ; %bb.0:
3648 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3649 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
3650 ; GISEL-NEXT:    v_frexp_mant_f32_e32 v1, v0
3651 ; GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
3652 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3653 ; GISEL-NEXT:    v_mov_b32_e32 v1, 0xf800000
3654 ; GISEL-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3655 ; GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3656 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
3657 ; GISEL-NEXT:    v_rsq_f32_e32 v1, v0
3658 ; GISEL-NEXT:    v_mul_f32_e32 v2, v0, v1
3659 ; GISEL-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3660 ; GISEL-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3661 ; GISEL-NEXT:    v_fma_f32 v2, v2, v3, v2
3662 ; GISEL-NEXT:    v_fma_f32 v1, v1, v3, v1
3663 ; GISEL-NEXT:    v_fma_f32 v3, -v2, v2, v0
3664 ; GISEL-NEXT:    v_fma_f32 v1, v3, v1, v2
3665 ; GISEL-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3666 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3667 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0x260
3668 ; GISEL-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3669 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3670 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3671   %frexp = call { float, i32 } @llvm.frexp.f32.i32(float %x)
3672   %frexp.mant = extractvalue { float, i32 } %frexp, 0
3673   %result = call float @llvm.sqrt.f32(float %frexp.mant)
3674   ret float %result
3677 define float @v_sqrt_f32_ulp3_frexp_src(float %x) {
3678 ; SDAG-LABEL: v_sqrt_f32_ulp3_frexp_src:
3679 ; SDAG:       ; %bb.0:
3680 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3681 ; SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
3682 ; SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v0
3683 ; SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
3684 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3685 ; SDAG-NEXT:    v_sqrt_f32_e32 v0, v0
3686 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3688 ; GISEL-LABEL: v_sqrt_f32_ulp3_frexp_src:
3689 ; GISEL:       ; %bb.0:
3690 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3691 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
3692 ; GISEL-NEXT:    v_frexp_mant_f32_e32 v1, v0
3693 ; GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
3694 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3695 ; GISEL-NEXT:    v_sqrt_f32_e32 v0, v0
3696 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3697   %frexp = call { float, i32 } @llvm.frexp.f32.i32(float %x)
3698   %frexp.mant = extractvalue { float, i32 } %frexp, 0
3699   %result = call float @llvm.sqrt.f32(float %frexp.mant), !fpmath !4
3700   ret float %result
3703 define float @v_sqrt_f32_known_never_zero_never_ninf_ulp2(float nofpclass(zero ninf) %x) {
3704 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_ninf_ulp2:
3705 ; SDAG-IEEE:       ; %bb.0:
3706 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3707 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3708 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3709 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3710 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3711 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3712 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3713 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3714 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3715 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3717 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_zero_never_ninf_ulp2:
3718 ; GISEL-IEEE:       ; %bb.0:
3719 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3720 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3721 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3722 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3723 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3724 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3725 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3726 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3727 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3728 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3730 ; GCN-DAZ-LABEL: v_sqrt_f32_known_never_zero_never_ninf_ulp2:
3731 ; GCN-DAZ:       ; %bb.0:
3732 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3733 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3734 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3735   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
3736   ret float %result
3739 define float @v_sqrt_f32_known_never_ninf_ulp2(float nofpclass(ninf) %x) {
3740 ; SDAG-IEEE-LABEL: v_sqrt_f32_known_never_ninf_ulp2:
3741 ; SDAG-IEEE:       ; %bb.0:
3742 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3743 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3744 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3745 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3746 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3747 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3748 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3749 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3750 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3751 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3753 ; GISEL-IEEE-LABEL: v_sqrt_f32_known_never_ninf_ulp2:
3754 ; GISEL-IEEE:       ; %bb.0:
3755 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3756 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3757 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3758 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3759 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3760 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3761 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3762 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3763 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3764 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3766 ; GCN-DAZ-LABEL: v_sqrt_f32_known_never_ninf_ulp2:
3767 ; GCN-DAZ:       ; %bb.0:
3768 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3769 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3770 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3771   %result = call float @llvm.sqrt.f32(float %x), !fpmath !2
3772   ret float %result
3775 define float @v_sqrt_f32_nsz_known_never_ninf_ulp2(float nofpclass(ninf) %x) {
3776 ; SDAG-IEEE-LABEL: v_sqrt_f32_nsz_known_never_ninf_ulp2:
3777 ; SDAG-IEEE:       ; %bb.0:
3778 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3779 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3780 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3781 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3782 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3783 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3784 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3785 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3786 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3787 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3789 ; GISEL-IEEE-LABEL: v_sqrt_f32_nsz_known_never_ninf_ulp2:
3790 ; GISEL-IEEE:       ; %bb.0:
3791 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3792 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3793 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3794 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3795 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3796 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3797 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v0, v0
3798 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, -16, vcc
3799 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3800 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3802 ; GCN-DAZ-LABEL: v_sqrt_f32_nsz_known_never_ninf_ulp2:
3803 ; GCN-DAZ:       ; %bb.0:
3804 ; GCN-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3805 ; GCN-DAZ-NEXT:    v_sqrt_f32_e32 v0, v0
3806 ; GCN-DAZ-NEXT:    s_setpc_b64 s[30:31]
3807   %result = call nsz float @llvm.sqrt.f32(float %x), !fpmath !2
3808   ret float %result
3811 define float @v_elim_redun_check_ult_sqrt(float %in) {
3812 ; SDAG-IEEE-LABEL: v_elim_redun_check_ult_sqrt:
3813 ; SDAG-IEEE:       ; %bb.0:
3814 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3815 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0xf800000
3816 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3817 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3818 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3819 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3820 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
3821 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3822 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
3823 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
3824 ; SDAG-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
3825 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3826 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
3827 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
3828 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3829 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3830 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
3831 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3832 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3833 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3835 ; GISEL-IEEE-LABEL: v_elim_redun_check_ult_sqrt:
3836 ; GISEL-IEEE:       ; %bb.0:
3837 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3838 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0xf800000
3839 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3840 ; GISEL-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3841 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v0, v2, vcc
3842 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v2, v1
3843 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v2
3844 ; GISEL-IEEE-NEXT:    v_fma_f32 v4, -v3, v2, v1
3845 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v5, s[4:5], 1, v2
3846 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v5, v2, v1
3847 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v4
3848 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[4:5]
3849 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v6
3850 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[4:5]
3851 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
3852 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
3853 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x260
3854 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v1, v3
3855 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
3856 ; GISEL-IEEE-NEXT:    v_bfrev_b32_e32 v2, 1
3857 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7fc00000
3858 ; GISEL-IEEE-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v2
3859 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
3860 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3862 ; SDAG-DAZ-LABEL: v_elim_redun_check_ult_sqrt:
3863 ; SDAG-DAZ:       ; %bb.0:
3864 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3865 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, 0xf800000
3866 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
3867 ; SDAG-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3868 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3869 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
3870 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
3871 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
3872 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
3873 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
3874 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
3875 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
3876 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
3877 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3878 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3879 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
3880 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
3881 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
3882 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3884 ; GISEL-DAZ-LABEL: v_elim_redun_check_ult_sqrt:
3885 ; GISEL-DAZ:       ; %bb.0:
3886 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3887 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0xf800000
3888 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
3889 ; GISEL-DAZ-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v0
3890 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v0, v2, vcc
3891 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v2, v1
3892 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, v1, v2
3893 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0.5, v2
3894 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, -v2, v3, 0.5
3895 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v4, v3
3896 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v4, v2
3897 ; GISEL-DAZ-NEXT:    v_fma_f32 v4, -v3, v3, v1
3898 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v4, v2, v3
3899 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
3900 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
3901 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0x260
3902 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v1, v3
3903 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
3904 ; GISEL-DAZ-NEXT:    v_bfrev_b32_e32 v2, 1
3905 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0x7fc00000
3906 ; GISEL-DAZ-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v2
3907 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
3908 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3909   %sqrt = call float @llvm.sqrt.f32(float %in)
3910   %cmp = fcmp ult float %in, -0.000000e+00
3911   %res = select i1 %cmp, float 0x7FF8000000000000, float %sqrt
3912   ret float %res
3915 define float @v_elim_redun_check_ult_sqrt_ulp3(float %in) {
3916 ; SDAG-IEEE-LABEL: v_elim_redun_check_ult_sqrt_ulp3:
3917 ; SDAG-IEEE:       ; %bb.0:
3918 ; SDAG-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3919 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, 0x800000
3920 ; SDAG-IEEE-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3921 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3922 ; SDAG-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3923 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v0, v1
3924 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
3925 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
3926 ; SDAG-IEEE-NEXT:    s_brev_b32 s4, 1
3927 ; SDAG-IEEE-NEXT:    v_cmp_le_f32_e32 vcc, s4, v0
3928 ; SDAG-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
3929 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
3930 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
3931 ; SDAG-IEEE-NEXT:    s_setpc_b64 s[30:31]
3933 ; GISEL-IEEE-LABEL: v_elim_redun_check_ult_sqrt_ulp3:
3934 ; GISEL-IEEE:       ; %bb.0:
3935 ; GISEL-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3936 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x800000
3937 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3938 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
3939 ; GISEL-IEEE-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
3940 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v0, v1
3941 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v1
3942 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, 0, -16, vcc
3943 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7fc00000
3944 ; GISEL-IEEE-NEXT:    v_ldexp_f32_e32 v1, v1, v2
3945 ; GISEL-IEEE-NEXT:    v_bfrev_b32_e32 v2, 1
3946 ; GISEL-IEEE-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v2
3947 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
3948 ; GISEL-IEEE-NEXT:    s_setpc_b64 s[30:31]
3950 ; SDAG-DAZ-LABEL: v_elim_redun_check_ult_sqrt_ulp3:
3951 ; SDAG-DAZ:       ; %bb.0:
3952 ; SDAG-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3953 ; SDAG-DAZ-NEXT:    v_sqrt_f32_e32 v1, v0
3954 ; SDAG-DAZ-NEXT:    s_brev_b32 s4, 1
3955 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
3956 ; SDAG-DAZ-NEXT:    v_cmp_le_f32_e32 vcc, s4, v0
3957 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
3958 ; SDAG-DAZ-NEXT:    s_setpc_b64 s[30:31]
3960 ; GISEL-DAZ-LABEL: v_elim_redun_check_ult_sqrt_ulp3:
3961 ; GISEL-DAZ:       ; %bb.0:
3962 ; GISEL-DAZ-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3963 ; GISEL-DAZ-NEXT:    v_sqrt_f32_e32 v1, v0
3964 ; GISEL-DAZ-NEXT:    v_bfrev_b32_e32 v2, 1
3965 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v3, 0x7fc00000
3966 ; GISEL-DAZ-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v2
3967 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
3968 ; GISEL-DAZ-NEXT:    s_setpc_b64 s[30:31]
3969   %sqrt = call float @llvm.sqrt.f32(float %in), !fpmath !4
3970   %cmp = fcmp ult float %in, -0.000000e+00
3971   %res = select i1 %cmp, float 0x7FF8000000000000, float %sqrt
3972   ret float %res
3975 define amdgpu_kernel void @elim_redun_check_neg0(ptr addrspace(1) %out, float %in) {
3976 ; SDAG-IEEE-LABEL: elim_redun_check_neg0:
3977 ; SDAG-IEEE:       ; %bb.0: ; %entry
3978 ; SDAG-IEEE-NEXT:    s_load_dword s0, s[2:3], 0xb
3979 ; SDAG-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x9
3980 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
3981 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
3982 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0xf000
3983 ; SDAG-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
3984 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s0, v1
3985 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, s0
3986 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s0, v0
3987 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v1, s[0:1]
3988 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
3989 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, -1
3990 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v1
3991 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
3992 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
3993 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
3994 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v1
3995 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
3996 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
3997 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
3998 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
3999 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
4000 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
4001 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4002 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4003 ; SDAG-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
4004 ; SDAG-IEEE-NEXT:    s_endpgm
4006 ; GISEL-IEEE-LABEL: elim_redun_check_neg0:
4007 ; GISEL-IEEE:       ; %bb.0: ; %entry
4008 ; GISEL-IEEE-NEXT:    s_load_dword s6, s[2:3], 0xb
4009 ; GISEL-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x9
4010 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4011 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4012 ; GISEL-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4013 ; GISEL-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4014 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, s6
4015 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, s6, v1
4016 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
4017 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4018 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4019 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[0:1], -1, v1
4020 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
4021 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[0:1], 1, v1
4022 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
4023 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v3
4024 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
4025 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v5
4026 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[0:1]
4027 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4028 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4029 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
4030 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4031 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4032 ; GISEL-IEEE-NEXT:    v_bfrev_b32_e32 v1, 1
4033 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
4034 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v1
4035 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
4036 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, -1
4037 ; GISEL-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
4038 ; GISEL-IEEE-NEXT:    s_endpgm
4040 ; SDAG-DAZ-LABEL: elim_redun_check_neg0:
4041 ; SDAG-DAZ:       ; %bb.0: ; %entry
4042 ; SDAG-DAZ-NEXT:    s_load_dword s0, s[2:3], 0xb
4043 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4044 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4045 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4046 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s0, v1
4047 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, s0
4048 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s0, v0
4049 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4050 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4051 ; SDAG-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x9
4052 ; SDAG-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4053 ; SDAG-DAZ-NEXT:    s_mov_b32 s2, -1
4054 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4055 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4056 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4057 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4058 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
4059 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4060 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
4061 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4062 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4063 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4064 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4065 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4066 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4067 ; SDAG-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4068 ; SDAG-DAZ-NEXT:    s_endpgm
4070 ; GISEL-DAZ-LABEL: elim_redun_check_neg0:
4071 ; GISEL-DAZ:       ; %bb.0: ; %entry
4072 ; GISEL-DAZ-NEXT:    s_load_dword s4, s[2:3], 0xb
4073 ; GISEL-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x9
4074 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4075 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4076 ; GISEL-DAZ-NEXT:    s_mov_b32 s2, -1
4077 ; GISEL-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4078 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, s4
4079 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, s4, v1
4080 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
4081 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4082 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4083 ; GISEL-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4084 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4085 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4086 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4087 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4088 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4089 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
4090 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
4091 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4092 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4093 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4094 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4095 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4096 ; GISEL-DAZ-NEXT:    v_bfrev_b32_e32 v1, 1
4097 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
4098 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v1
4099 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
4100 ; GISEL-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4101 ; GISEL-DAZ-NEXT:    s_endpgm
4102 entry:
4103   %sqrt = call float @llvm.sqrt.f32(float %in)
4104   %cmp = fcmp olt float %in, -0.000000e+00
4105   %res = select i1 %cmp, float 0x7FF8000000000000, float %sqrt
4106   store float %res, ptr addrspace(1) %out
4107   ret void
4110 define amdgpu_kernel void @elim_redun_check_pos0(ptr addrspace(1) %out, float %in) {
4111 ; SDAG-IEEE-LABEL: elim_redun_check_pos0:
4112 ; SDAG-IEEE:       ; %bb.0: ; %entry
4113 ; SDAG-IEEE-NEXT:    s_load_dword s0, s[2:3], 0xb
4114 ; SDAG-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x9
4115 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4116 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4117 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4118 ; SDAG-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4119 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s0, v1
4120 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, s0
4121 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s0, v0
4122 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v1, s[0:1]
4123 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4124 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, -1
4125 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v1
4126 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
4127 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
4128 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4129 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v1
4130 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
4131 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
4132 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
4133 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4134 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
4135 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
4136 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4137 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4138 ; SDAG-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
4139 ; SDAG-IEEE-NEXT:    s_endpgm
4141 ; GISEL-IEEE-LABEL: elim_redun_check_pos0:
4142 ; GISEL-IEEE:       ; %bb.0: ; %entry
4143 ; GISEL-IEEE-NEXT:    s_load_dword s6, s[2:3], 0xb
4144 ; GISEL-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x9
4145 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4146 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4147 ; GISEL-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4148 ; GISEL-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4149 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, s6
4150 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, s6, v1
4151 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
4152 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4153 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4154 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[0:1], -1, v1
4155 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
4156 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[0:1], 1, v1
4157 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
4158 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v3
4159 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
4160 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v5
4161 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[0:1]
4162 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4163 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4164 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
4165 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4166 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4167 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x7fc00000
4168 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, s6, 0
4169 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4170 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, -1
4171 ; GISEL-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
4172 ; GISEL-IEEE-NEXT:    s_endpgm
4174 ; SDAG-DAZ-LABEL: elim_redun_check_pos0:
4175 ; SDAG-DAZ:       ; %bb.0: ; %entry
4176 ; SDAG-DAZ-NEXT:    s_load_dword s0, s[2:3], 0xb
4177 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4178 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4179 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4180 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s0, v1
4181 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, s0
4182 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s0, v0
4183 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4184 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4185 ; SDAG-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x9
4186 ; SDAG-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4187 ; SDAG-DAZ-NEXT:    s_mov_b32 s2, -1
4188 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4189 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4190 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4191 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4192 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
4193 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4194 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
4195 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4196 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4197 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4198 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4199 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4200 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4201 ; SDAG-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4202 ; SDAG-DAZ-NEXT:    s_endpgm
4204 ; GISEL-DAZ-LABEL: elim_redun_check_pos0:
4205 ; GISEL-DAZ:       ; %bb.0: ; %entry
4206 ; GISEL-DAZ-NEXT:    s_load_dword s4, s[2:3], 0xb
4207 ; GISEL-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x9
4208 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4209 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4210 ; GISEL-DAZ-NEXT:    s_mov_b32 s2, -1
4211 ; GISEL-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4212 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, s4
4213 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, s4, v1
4214 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
4215 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4216 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4217 ; GISEL-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4218 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4219 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4220 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4221 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4222 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4223 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
4224 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
4225 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4226 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4227 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4228 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4229 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4230 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0x7fc00000
4231 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e64 vcc, s4, 0
4232 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4233 ; GISEL-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4234 ; GISEL-DAZ-NEXT:    s_endpgm
4235 entry:
4236   %sqrt = call float @llvm.sqrt.f32(float %in)
4237   %cmp = fcmp olt float %in, 0.000000e+00
4238   %res = select i1 %cmp, float 0x7FF8000000000000, float %sqrt
4239   store float %res, ptr addrspace(1) %out
4240   ret void
4243 define amdgpu_kernel void @elim_redun_check_ult(ptr addrspace(1) %out, float %in) {
4244 ; SDAG-IEEE-LABEL: elim_redun_check_ult:
4245 ; SDAG-IEEE:       ; %bb.0: ; %entry
4246 ; SDAG-IEEE-NEXT:    s_load_dword s0, s[2:3], 0xb
4247 ; SDAG-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x9
4248 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4249 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4250 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4251 ; SDAG-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4252 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s0, v1
4253 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, s0
4254 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s0, v0
4255 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v2, v1, s[0:1]
4256 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4257 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, -1
4258 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v1
4259 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
4260 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
4261 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4262 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v1
4263 ; SDAG-IEEE-NEXT:    v_fma_f32 v1, -v3, v1, v0
4264 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
4265 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
4266 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4267 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
4268 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
4269 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4270 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4271 ; SDAG-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
4272 ; SDAG-IEEE-NEXT:    s_endpgm
4274 ; GISEL-IEEE-LABEL: elim_redun_check_ult:
4275 ; GISEL-IEEE:       ; %bb.0: ; %entry
4276 ; GISEL-IEEE-NEXT:    s_load_dword s6, s[2:3], 0xb
4277 ; GISEL-IEEE-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x9
4278 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4279 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4280 ; GISEL-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4281 ; GISEL-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4282 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, s6
4283 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, s6, v1
4284 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
4285 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4286 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4287 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v2, s[0:1], -1, v1
4288 ; GISEL-IEEE-NEXT:    v_fma_f32 v3, -v2, v1, v0
4289 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[0:1], 1, v1
4290 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v4, v1, v0
4291 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v3
4292 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s[0:1]
4293 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v5
4294 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[0:1]
4295 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4296 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4297 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x260
4298 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4299 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4300 ; GISEL-IEEE-NEXT:    v_bfrev_b32_e32 v1, 1
4301 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
4302 ; GISEL-IEEE-NEXT:    v_cmp_nge_f32_e32 vcc, s6, v1
4303 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
4304 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, -1
4305 ; GISEL-IEEE-NEXT:    buffer_store_dword v0, off, s[4:7], 0
4306 ; GISEL-IEEE-NEXT:    s_endpgm
4308 ; SDAG-DAZ-LABEL: elim_redun_check_ult:
4309 ; SDAG-DAZ:       ; %bb.0: ; %entry
4310 ; SDAG-DAZ-NEXT:    s_load_dword s0, s[2:3], 0xb
4311 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4312 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4313 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4314 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s0, v1
4315 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, s0
4316 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s0, v0
4317 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4318 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4319 ; SDAG-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x9
4320 ; SDAG-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4321 ; SDAG-DAZ-NEXT:    s_mov_b32 s2, -1
4322 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4323 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4324 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4325 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4326 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v2, v2, v0
4327 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4328 ; SDAG-DAZ-NEXT:    v_fma_f32 v1, v4, v1, v2
4329 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4330 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4331 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4332 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4333 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4334 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4335 ; SDAG-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4336 ; SDAG-DAZ-NEXT:    s_endpgm
4338 ; GISEL-DAZ-LABEL: elim_redun_check_ult:
4339 ; GISEL-DAZ:       ; %bb.0: ; %entry
4340 ; GISEL-DAZ-NEXT:    s_load_dword s4, s[2:3], 0xb
4341 ; GISEL-DAZ-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x9
4342 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4343 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4344 ; GISEL-DAZ-NEXT:    s_mov_b32 s2, -1
4345 ; GISEL-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4346 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, s4
4347 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, s4, v1
4348 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
4349 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
4350 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4351 ; GISEL-DAZ-NEXT:    s_mov_b32 s3, 0xf000
4352 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v1
4353 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4354 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v1, v2, 0.5
4355 ; GISEL-DAZ-NEXT:    v_fma_f32 v2, v2, v3, v2
4356 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v3, v1
4357 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, -v2, v2, v0
4358 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v3, v1, v2
4359 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
4360 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
4361 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x260
4362 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
4363 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
4364 ; GISEL-DAZ-NEXT:    v_bfrev_b32_e32 v1, 1
4365 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, 0x7fc00000
4366 ; GISEL-DAZ-NEXT:    v_cmp_nge_f32_e32 vcc, s4, v1
4367 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
4368 ; GISEL-DAZ-NEXT:    buffer_store_dword v0, off, s[0:3], 0
4369 ; GISEL-DAZ-NEXT:    s_endpgm
4370 entry:
4371   %sqrt = call float @llvm.sqrt.f32(float %in)
4372   %cmp = fcmp ult float %in, -0.000000e+00
4373   %res = select i1 %cmp, float 0x7FF8000000000000, float %sqrt
4374   store float %res, ptr addrspace(1) %out
4375   ret void
4378 define amdgpu_kernel void @elim_redun_check_v2(ptr addrspace(1) %out, <2 x float> %in) {
4379 ; SDAG-IEEE-LABEL: elim_redun_check_v2:
4380 ; SDAG-IEEE:       ; %bb.0: ; %entry
4381 ; SDAG-IEEE-NEXT:    s_load_dwordx4 s[8:11], s[2:3], 0x9
4382 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4383 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4384 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4385 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, -1
4386 ; SDAG-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4387 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, s11, v1
4388 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v3, s11
4389 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s11, v0
4390 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4391 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v3, v2
4392 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s10, v1
4393 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, s8
4394 ; SDAG-IEEE-NEXT:    s_mov_b32 s5, s9
4395 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v4, vcc, -1, v3
4396 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v4, v3, v2
4397 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v5
4398 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v4, v3, v4, vcc
4399 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v5, vcc, 1, v3
4400 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v5, v3, v2
4401 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v3
4402 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
4403 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4404 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[0:1]
4405 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v5, s10
4406 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s10, v0
4407 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v5, v1, s[0:1]
4408 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v5, v0
4409 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
4410 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v2, v4
4411 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v3, v2, vcc
4412 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v5
4413 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v5, v0
4414 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
4415 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v5, v2, vcc
4416 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v5
4417 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v3, v5, v0
4418 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v5
4419 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4420 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
4421 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
4422 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v4
4423 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4424 ; SDAG-IEEE-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4425 ; SDAG-IEEE-NEXT:    s_endpgm
4427 ; GISEL-IEEE-LABEL: elim_redun_check_v2:
4428 ; GISEL-IEEE:       ; %bb.0: ; %entry
4429 ; GISEL-IEEE-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x9
4430 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4431 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4432 ; GISEL-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4433 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, s6
4434 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, s6, v1
4435 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
4436 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4437 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v2
4438 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, s7, v1
4439 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[0:1], -1, v3
4440 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v5, s[0:1], 1, v3
4441 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v4, v3, v2
4442 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v5, v3, v2
4443 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v6
4444 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[0:1]
4445 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v7
4446 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v5, s[0:1]
4447 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4448 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
4449 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v5, s7
4450 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v0
4451 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v5, v1, vcc
4452 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4453 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
4454 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v4
4455 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4456 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[0:1], -1, v1
4457 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v3, v1, v0
4458 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[0:1], 1, v1
4459 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v1, v0
4460 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v5
4461 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s[0:1]
4462 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v7
4463 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[0:1]
4464 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v1
4465 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
4466 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v4
4467 ; GISEL-IEEE-NEXT:    v_bfrev_b32_e32 v3, 1
4468 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc
4469 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x7fc00000
4470 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v3
4471 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
4472 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v3
4473 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
4474 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, -1
4475 ; GISEL-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4476 ; GISEL-IEEE-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4477 ; GISEL-IEEE-NEXT:    s_endpgm
4479 ; SDAG-DAZ-LABEL: elim_redun_check_v2:
4480 ; SDAG-DAZ:       ; %bb.0: ; %entry
4481 ; SDAG-DAZ-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x9
4482 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4483 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4484 ; SDAG-DAZ-NEXT:    s_mov_b32 s7, 0xf000
4485 ; SDAG-DAZ-NEXT:    s_mov_b32 s6, -1
4486 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4487 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, s3, v1
4488 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v3, s3
4489 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s3, v0
4490 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
4491 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v3, v2
4492 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s2, v1
4493 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, s0
4494 ; SDAG-DAZ-NEXT:    s_mov_b32 s5, s1
4495 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, v2, v3
4496 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
4497 ; SDAG-DAZ-NEXT:    v_fma_f32 v5, -v3, v4, 0.5
4498 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, v4, v5, v4
4499 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v4, v4, v2
4500 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
4501 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v4
4502 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4503 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
4504 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v4, s2
4505 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4506 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v4, v1, vcc
4507 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v4, v0
4508 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v5, 0x260
4509 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v5
4510 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v1, v3, v2, s[0:1]
4511 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v4
4512 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v4
4513 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v3, v2, 0.5
4514 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v4, v2
4515 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v2, v2, v0
4516 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v4, v3
4517 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v6, v3, v2
4518 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
4519 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4520 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v5
4521 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4522 ; SDAG-DAZ-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4523 ; SDAG-DAZ-NEXT:    s_endpgm
4525 ; GISEL-DAZ-LABEL: elim_redun_check_v2:
4526 ; GISEL-DAZ:       ; %bb.0: ; %entry
4527 ; GISEL-DAZ-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x9
4528 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4529 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4530 ; GISEL-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4531 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, s6
4532 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, s6, v1
4533 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
4534 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4535 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v3, v2
4536 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, s7
4537 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, s7, v1
4538 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, v2, v3
4539 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
4540 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v3, v5, 0.5
4541 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, v5, v6, v5
4542 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v6, v3
4543 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v5, v5, v2
4544 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v5
4545 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
4546 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
4547 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v0
4548 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v4, v1, vcc
4549 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4550 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0x260
4551 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v4
4552 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4553 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, v0, v1
4554 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4555 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v1, v3, 0.5
4556 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
4557 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v5, v1
4558 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v3, v3, v0
4559 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v5, v1, v3
4560 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v1
4561 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
4562 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v4
4563 ; GISEL-DAZ-NEXT:    v_bfrev_b32_e32 v3, 1
4564 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc
4565 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0x7fc00000
4566 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v3
4567 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
4568 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v3
4569 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
4570 ; GISEL-DAZ-NEXT:    s_mov_b32 s6, -1
4571 ; GISEL-DAZ-NEXT:    s_mov_b32 s7, 0xf000
4572 ; GISEL-DAZ-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4573 ; GISEL-DAZ-NEXT:    s_endpgm
4574 entry:
4575   %sqrt = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %in)
4576   %cmp = fcmp olt <2 x float> %in, <float -0.000000e+00, float -0.000000e+00>
4577   %res = select <2 x i1> %cmp, <2 x float> <float 0x7FF8000000000000, float 0x7FF8000000000000>, <2 x float> %sqrt
4578   store <2 x float> %res, ptr addrspace(1) %out
4579   ret void
4582 define amdgpu_kernel void @elim_redun_check_v2_ult(ptr addrspace(1) %out, <2 x float> %in) {
4583 ; SDAG-IEEE-LABEL: elim_redun_check_v2_ult:
4584 ; SDAG-IEEE:       ; %bb.0: ; %entry
4585 ; SDAG-IEEE-NEXT:    s_load_dwordx4 s[8:11], s[2:3], 0x9
4586 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4587 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4588 ; SDAG-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4589 ; SDAG-IEEE-NEXT:    s_mov_b32 s6, -1
4590 ; SDAG-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4591 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v2, s11, v1
4592 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v3, s11
4593 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s11, v0
4594 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4595 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v3, v2
4596 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v1, s10, v1
4597 ; SDAG-IEEE-NEXT:    s_mov_b32 s4, s8
4598 ; SDAG-IEEE-NEXT:    s_mov_b32 s5, s9
4599 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v4, vcc, -1, v3
4600 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v4, v3, v2
4601 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v5
4602 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v4, v3, v4, vcc
4603 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v5, vcc, 1, v3
4604 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v5, v3, v2
4605 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v3
4606 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
4607 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4608 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[0:1]
4609 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v5, s10
4610 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], s10, v0
4611 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v0, v5, v1, s[0:1]
4612 ; SDAG-IEEE-NEXT:    v_sqrt_f32_e32 v5, v0
4613 ; SDAG-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
4614 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v2, v4
4615 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v1, v3, v2, vcc
4616 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v2, vcc, -1, v5
4617 ; SDAG-IEEE-NEXT:    v_fma_f32 v3, -v2, v5, v0
4618 ; SDAG-IEEE-NEXT:    v_cmp_ge_f32_e32 vcc, 0, v3
4619 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v5, v2, vcc
4620 ; SDAG-IEEE-NEXT:    v_add_i32_e32 v3, vcc, 1, v5
4621 ; SDAG-IEEE-NEXT:    v_fma_f32 v5, -v3, v5, v0
4622 ; SDAG-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v5
4623 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4624 ; SDAG-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
4625 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
4626 ; SDAG-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v4
4627 ; SDAG-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4628 ; SDAG-IEEE-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4629 ; SDAG-IEEE-NEXT:    s_endpgm
4631 ; GISEL-IEEE-LABEL: elim_redun_check_v2_ult:
4632 ; GISEL-IEEE:       ; %bb.0: ; %entry
4633 ; GISEL-IEEE-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x9
4634 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v0, 0xf800000
4635 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4636 ; GISEL-IEEE-NEXT:    s_waitcnt lgkmcnt(0)
4637 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v2, s6
4638 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, s6, v1
4639 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
4640 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4641 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v3, v2
4642 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v1, s7, v1
4643 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v4, s[0:1], -1, v3
4644 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v5, s[0:1], 1, v3
4645 ; GISEL-IEEE-NEXT:    v_fma_f32 v6, -v4, v3, v2
4646 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v5, v3, v2
4647 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v6
4648 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[0:1]
4649 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v7
4650 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v3, v3, v5, s[0:1]
4651 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4652 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
4653 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v5, s7
4654 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v0
4655 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v5, v1, vcc
4656 ; GISEL-IEEE-NEXT:    v_sqrt_f32_e32 v1, v0
4657 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x260
4658 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v4
4659 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4660 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v3, s[0:1], -1, v1
4661 ; GISEL-IEEE-NEXT:    v_fma_f32 v5, -v3, v1, v0
4662 ; GISEL-IEEE-NEXT:    v_add_i32_e64 v6, s[0:1], 1, v1
4663 ; GISEL-IEEE-NEXT:    v_fma_f32 v7, -v6, v1, v0
4664 ; GISEL-IEEE-NEXT:    v_cmp_ge_f32_e64 s[0:1], 0, v5
4665 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s[0:1]
4666 ; GISEL-IEEE-NEXT:    v_cmp_lt_f32_e64 s[0:1], 0, v7
4667 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[0:1]
4668 ; GISEL-IEEE-NEXT:    v_mul_f32_e32 v3, 0x37800000, v1
4669 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
4670 ; GISEL-IEEE-NEXT:    v_cmp_class_f32_e32 vcc, v0, v4
4671 ; GISEL-IEEE-NEXT:    v_bfrev_b32_e32 v3, 1
4672 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc
4673 ; GISEL-IEEE-NEXT:    v_mov_b32_e32 v4, 0x7fc00000
4674 ; GISEL-IEEE-NEXT:    v_cmp_nge_f32_e32 vcc, s6, v3
4675 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
4676 ; GISEL-IEEE-NEXT:    v_cmp_nge_f32_e32 vcc, s7, v3
4677 ; GISEL-IEEE-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
4678 ; GISEL-IEEE-NEXT:    s_mov_b32 s6, -1
4679 ; GISEL-IEEE-NEXT:    s_mov_b32 s7, 0xf000
4680 ; GISEL-IEEE-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4681 ; GISEL-IEEE-NEXT:    s_endpgm
4683 ; SDAG-DAZ-LABEL: elim_redun_check_v2_ult:
4684 ; SDAG-DAZ:       ; %bb.0: ; %entry
4685 ; SDAG-DAZ-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x9
4686 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4687 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4688 ; SDAG-DAZ-NEXT:    s_mov_b32 s7, 0xf000
4689 ; SDAG-DAZ-NEXT:    s_mov_b32 s6, -1
4690 ; SDAG-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4691 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, s3, v1
4692 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v3, s3
4693 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s3, v0
4694 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
4695 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v3, v2
4696 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v1, s2, v1
4697 ; SDAG-DAZ-NEXT:    s_mov_b32 s4, s0
4698 ; SDAG-DAZ-NEXT:    s_mov_b32 s5, s1
4699 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, v2, v3
4700 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
4701 ; SDAG-DAZ-NEXT:    v_fma_f32 v5, -v3, v4, 0.5
4702 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, v4, v5, v4
4703 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v4, v4, v2
4704 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
4705 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v4
4706 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v4, 0x37800000, v3
4707 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
4708 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v4, s2
4709 ; SDAG-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
4710 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v4, v1, vcc
4711 ; SDAG-DAZ-NEXT:    v_rsq_f32_e32 v4, v0
4712 ; SDAG-DAZ-NEXT:    v_mov_b32_e32 v5, 0x260
4713 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v5
4714 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e64 v1, v3, v2, s[0:1]
4715 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v2, v0, v4
4716 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v4
4717 ; SDAG-DAZ-NEXT:    v_fma_f32 v4, -v3, v2, 0.5
4718 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v2, v4, v2
4719 ; SDAG-DAZ-NEXT:    v_fma_f32 v6, -v2, v2, v0
4720 ; SDAG-DAZ-NEXT:    v_fma_f32 v3, v3, v4, v3
4721 ; SDAG-DAZ-NEXT:    v_fma_f32 v2, v6, v3, v2
4722 ; SDAG-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
4723 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4724 ; SDAG-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v5
4725 ; SDAG-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4726 ; SDAG-DAZ-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4727 ; SDAG-DAZ-NEXT:    s_endpgm
4729 ; GISEL-DAZ-LABEL: elim_redun_check_v2_ult:
4730 ; GISEL-DAZ:       ; %bb.0: ; %entry
4731 ; GISEL-DAZ-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x9
4732 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v0, 0xf800000
4733 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4734 ; GISEL-DAZ-NEXT:    s_waitcnt lgkmcnt(0)
4735 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v2, s6
4736 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, s6, v1
4737 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
4738 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4739 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v3, v2
4740 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, s7
4741 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, s7, v1
4742 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, v2, v3
4743 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0.5, v3
4744 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v3, v5, 0.5
4745 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, v5, v6, v5
4746 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v6, v3
4747 ; GISEL-DAZ-NEXT:    v_fma_f32 v6, -v5, v5, v2
4748 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v6, v3, v5
4749 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v5, 0x37800000, v3
4750 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
4751 ; GISEL-DAZ-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v0
4752 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v4, v1, vcc
4753 ; GISEL-DAZ-NEXT:    v_rsq_f32_e32 v1, v0
4754 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0x260
4755 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e64 s[0:1], v2, v4
4756 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e64 v2, v3, v2, s[0:1]
4757 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, v0, v1
4758 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v1, 0.5, v1
4759 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v1, v3, 0.5
4760 ; GISEL-DAZ-NEXT:    v_fma_f32 v3, v3, v5, v3
4761 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v1, v5, v1
4762 ; GISEL-DAZ-NEXT:    v_fma_f32 v5, -v3, v3, v0
4763 ; GISEL-DAZ-NEXT:    v_fma_f32 v1, v5, v1, v3
4764 ; GISEL-DAZ-NEXT:    v_mul_f32_e32 v3, 0x37800000, v1
4765 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
4766 ; GISEL-DAZ-NEXT:    v_cmp_class_f32_e32 vcc, v0, v4
4767 ; GISEL-DAZ-NEXT:    v_bfrev_b32_e32 v3, 1
4768 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc
4769 ; GISEL-DAZ-NEXT:    v_mov_b32_e32 v4, 0x7fc00000
4770 ; GISEL-DAZ-NEXT:    v_cmp_nge_f32_e32 vcc, s6, v3
4771 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
4772 ; GISEL-DAZ-NEXT:    v_cmp_nge_f32_e32 vcc, s7, v3
4773 ; GISEL-DAZ-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
4774 ; GISEL-DAZ-NEXT:    s_mov_b32 s6, -1
4775 ; GISEL-DAZ-NEXT:    s_mov_b32 s7, 0xf000
4776 ; GISEL-DAZ-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4777 ; GISEL-DAZ-NEXT:    s_endpgm
4778 entry:
4779   %sqrt = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %in)
4780   %cmp = fcmp ult <2 x float> %in, <float -0.000000e+00, float -0.000000e+00>
4781   %res = select <2 x i1> %cmp, <2 x float> <float 0x7FF8000000000000, float 0x7FF8000000000000>, <2 x float> %sqrt
4782   store <2 x float> %res, ptr addrspace(1) %out
4783   ret void
4786 declare float @llvm.fabs.f32(float) #0
4787 declare float @llvm.sqrt.f32(float) #0
4788 declare <2 x float> @llvm.fabs.v2f32(<2 x float>) #0
4789 declare <2 x float> @llvm.sqrt.v2f32(<2 x float>) #0
4790 declare <3 x float> @llvm.sqrt.v3f32(<3 x float>) #0
4791 declare i32 @llvm.amdgcn.readfirstlane(i32) #1
4793 declare { float, i32 } @llvm.frexp.f32.i32(float) #0
4795 attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
4796 attributes #1 = { convergent nounwind willreturn memory(none) }
4797 attributes #2 = { "approx-func-fp-math"="true" }
4798 attributes #3 = { "approx-func-fp-math"="true" "no-nans-fp-math"="true" "no-infs-fp-math"="true" }
4799 attributes #4 = { "unsafe-fp-math"="true" }
4800 attributes #5 = { "no-infs-fp-math"="true" }
4802 !0 = !{float 0.5}
4803 !1 = !{float 1.0}
4804 !2 = !{float 2.0}
4805 !3 = !{float 2.5}
4806 !4 = !{float 3.0}
4807 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
4808 ; GCN-IEEE: {{.*}}