Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / fsqrt.f64.ll
blob196a3705ac8187692cc34fdab4cc650598eec572
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=pitcairn -verify-machineinstrs < %s | FileCheck -check-prefixes=SDAG %s
3 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefixes=SDAG %s
5 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=pitcairn -verify-machineinstrs < %s | FileCheck -check-prefixes=GISEL %s
6 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefixes=GISEL %s
8 define double @v_sqrt_f64(double %x) {
9 ; SDAG-LABEL: v_sqrt_f64:
10 ; SDAG:       ; %bb.0:
11 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12 ; SDAG-NEXT:    s_mov_b32 s4, 0
13 ; SDAG-NEXT:    s_brev_b32 s5, 8
14 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
15 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
16 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
17 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
18 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
19 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
20 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
21 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
22 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
23 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
24 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
25 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
26 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
27 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
28 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
29 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
30 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
31 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
32 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
33 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
34 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
35 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
37 ; GISEL-LABEL: v_sqrt_f64:
38 ; GISEL:       ; %bb.0:
39 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
41 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
42 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
43 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
44 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
45 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
46 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
47 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
48 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
49 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
50 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
51 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
52 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
53 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
54 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
55 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
56 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
57 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
58 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
59 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
60 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
61 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
62 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
63 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
64   %result = call double @llvm.sqrt.f64(double %x)
65   ret double %result
68 define double @v_sqrt_f64_fneg(double %x) {
69 ; SDAG-LABEL: v_sqrt_f64_fneg:
70 ; SDAG:       ; %bb.0:
71 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
72 ; SDAG-NEXT:    s_mov_b32 s4, 0
73 ; SDAG-NEXT:    s_brev_b32 s5, 9
74 ; SDAG-NEXT:    v_cmp_lt_f64_e32 vcc, s[4:5], v[0:1]
75 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
76 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
77 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], -v[0:1], v2
78 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
79 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
80 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
81 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
82 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
83 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
84 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
85 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
86 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
87 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
88 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
89 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
90 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
91 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
92 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
93 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
94 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
95 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
97 ; GISEL-LABEL: v_sqrt_f64_fneg:
98 ; GISEL:       ; %bb.0:
99 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
100 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
101 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
102 ; GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, -v[0:1], v[2:3]
103 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
104 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
105 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], -v[0:1], v2
106 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
107 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
108 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
109 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
110 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
111 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
112 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
113 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
114 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
115 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
116 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
117 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
118 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
119 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
120 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
121 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
122 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
123 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
124   %x.neg = fneg double %x
125   %result = call double @llvm.sqrt.f64(double %x.neg)
126   ret double %result
129 define double @v_sqrt_f64_fabs(double %x) {
130 ; SDAG-LABEL: v_sqrt_f64_fabs:
131 ; SDAG:       ; %bb.0:
132 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
133 ; SDAG-NEXT:    s_mov_b32 s4, 0
134 ; SDAG-NEXT:    s_brev_b32 s5, 8
135 ; SDAG-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]
136 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
137 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
138 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], |v[0:1]|, v2
139 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
140 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
141 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
142 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
143 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
144 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
145 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
146 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
147 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
148 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
149 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
150 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
151 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
152 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
153 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
154 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
155 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
156 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
158 ; GISEL-LABEL: v_sqrt_f64_fabs:
159 ; GISEL:       ; %bb.0:
160 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
161 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
162 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
163 ; GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[2:3]
164 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
165 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
166 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], |v[0:1]|, v2
167 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
168 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
169 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
170 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
171 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
172 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
173 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
174 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
175 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
176 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
177 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
178 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
179 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
180 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
181 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
182 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
183 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
184 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
185   %x.fabs = call double @llvm.fabs.f64(double %x)
186   %result = call double @llvm.sqrt.f64(double %x.fabs)
187   ret double %result
190 define double @v_sqrt_f64_fneg_fabs(double %x) {
191 ; SDAG-LABEL: v_sqrt_f64_fneg_fabs:
192 ; SDAG:       ; %bb.0:
193 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
194 ; SDAG-NEXT:    s_mov_b32 s4, 0
195 ; SDAG-NEXT:    s_brev_b32 s5, 9
196 ; SDAG-NEXT:    v_cmp_gt_f64_e64 vcc, |v[0:1]|, s[4:5]
197 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
198 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
199 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], -|v[0:1]|, v2
200 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
201 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
202 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
203 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
204 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
205 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
206 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
207 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
208 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
209 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
210 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
211 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
212 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
213 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
214 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
215 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
216 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
217 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
219 ; GISEL-LABEL: v_sqrt_f64_fneg_fabs:
220 ; GISEL:       ; %bb.0:
221 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
222 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
223 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
224 ; GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, -|v[0:1]|, v[2:3]
225 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
226 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
227 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], -|v[0:1]|, v2
228 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
229 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
230 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
231 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
232 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
233 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
234 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
235 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
236 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
237 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
238 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
239 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
240 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
241 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
242 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
243 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
244 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
245 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
246   %x.fabs = call double @llvm.fabs.f64(double %x)
247   %x.fabs.neg = fneg double %x.fabs
248   %result = call double @llvm.sqrt.f64(double %x.fabs.neg)
249   ret double %result
252 define double @v_sqrt_f64_ninf(double %x) {
253 ; SDAG-LABEL: v_sqrt_f64_ninf:
254 ; SDAG:       ; %bb.0:
255 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
256 ; SDAG-NEXT:    s_mov_b32 s4, 0
257 ; SDAG-NEXT:    s_brev_b32 s5, 8
258 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
259 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
260 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
261 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
262 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
263 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
264 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
265 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
266 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
267 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
268 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
269 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
270 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
271 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
272 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
273 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
274 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
275 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
276 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
277 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
278 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
279 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
281 ; GISEL-LABEL: v_sqrt_f64_ninf:
282 ; GISEL:       ; %bb.0:
283 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
284 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
285 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
286 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
287 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
288 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
289 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
290 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
291 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
292 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
293 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
294 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
295 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
296 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
297 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
298 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
299 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
300 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
301 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
302 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
303 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
304 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
305 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
306 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
307 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
308   %result = call ninf double @llvm.sqrt.f64(double %x)
309   ret double %result
312 define double @v_sqrt_f64_no_infs_attribute(double %x) "no-infs-fp-math"="true" {
313 ; SDAG-LABEL: v_sqrt_f64_no_infs_attribute:
314 ; SDAG:       ; %bb.0:
315 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
316 ; SDAG-NEXT:    s_mov_b32 s4, 0
317 ; SDAG-NEXT:    s_brev_b32 s5, 8
318 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
319 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
320 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
321 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
322 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
323 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
324 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
325 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
326 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
327 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
328 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
329 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
330 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
331 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
332 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
333 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
334 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
335 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
336 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
337 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
338 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
339 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
341 ; GISEL-LABEL: v_sqrt_f64_no_infs_attribute:
342 ; GISEL:       ; %bb.0:
343 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
344 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
345 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
346 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
347 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
348 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
349 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
350 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
351 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
352 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
353 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
354 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
355 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
356 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
357 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
358 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
359 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
360 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
361 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
362 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
363 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
364 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
365 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
366 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
367 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
368   %result = call ninf double @llvm.sqrt.f64(double %x)
369   ret double %result
372 define double @v_sqrt_f64_nnan(double %x) {
373 ; SDAG-LABEL: v_sqrt_f64_nnan:
374 ; SDAG:       ; %bb.0:
375 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
376 ; SDAG-NEXT:    s_mov_b32 s4, 0
377 ; SDAG-NEXT:    s_brev_b32 s5, 8
378 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
379 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
380 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
381 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
382 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
383 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
384 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
385 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
386 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
387 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
388 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
389 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
390 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
391 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
392 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
393 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
394 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
395 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
396 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
397 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
398 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
399 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
401 ; GISEL-LABEL: v_sqrt_f64_nnan:
402 ; GISEL:       ; %bb.0:
403 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
404 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
405 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
406 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
407 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
408 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
409 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
410 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
411 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
412 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
413 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
414 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
415 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
416 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
417 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
418 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
419 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
420 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
421 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
422 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
423 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
424 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
425 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
426 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
427 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
428   %result = call nnan double @llvm.sqrt.f64(double %x)
429   ret double %result
432 define amdgpu_ps <2 x i32> @s_sqrt_f64(double inreg %x) {
433 ; SDAG-LABEL: s_sqrt_f64:
434 ; SDAG:       ; %bb.0:
435 ; SDAG-NEXT:    v_mov_b32_e32 v0, 0
436 ; SDAG-NEXT:    v_bfrev_b32_e32 v1, 8
437 ; SDAG-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
438 ; SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
439 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
440 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
441 ; SDAG-NEXT:    s_and_b64 s[0:1], vcc, exec
442 ; SDAG-NEXT:    s_cselect_b32 s0, 0xffffff80, 0
443 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
444 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
445 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
446 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
447 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
448 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
449 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
450 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
451 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
452 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
453 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0x260
454 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v4
455 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], s0
456 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
457 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
458 ; SDAG-NEXT:    v_readfirstlane_b32 s0, v0
459 ; SDAG-NEXT:    v_readfirstlane_b32 s1, v1
460 ; SDAG-NEXT:    ; return to shader part epilog
462 ; GISEL-LABEL: s_sqrt_f64:
463 ; GISEL:       ; %bb.0:
464 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
465 ; GISEL-NEXT:    v_bfrev_b32_e32 v1, 8
466 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
467 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0x100
468 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v2, vcc
469 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
470 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
471 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
472 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
473 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
474 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
475 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
476 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
477 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
478 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
479 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
480 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
481 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
482 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
483 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
484 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
485 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
486 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
487 ; GISEL-NEXT:    v_readfirstlane_b32 s0, v0
488 ; GISEL-NEXT:    v_readfirstlane_b32 s1, v1
489 ; GISEL-NEXT:    ; return to shader part epilog
490   %result = call double @llvm.sqrt.f64(double %x)
491   %cast = bitcast double %result to <2 x i32>
492   %cast.0 = extractelement <2 x i32> %cast, i32 0
493   %cast.1 = extractelement <2 x i32> %cast, i32 1
494   %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
495   %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
496   %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
497   %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
498   ret <2 x i32> %insert.1
501 define amdgpu_ps <2 x i32> @s_sqrt_f64_ninf(double inreg %x) {
502 ; SDAG-LABEL: s_sqrt_f64_ninf:
503 ; SDAG:       ; %bb.0:
504 ; SDAG-NEXT:    v_mov_b32_e32 v0, 0
505 ; SDAG-NEXT:    v_bfrev_b32_e32 v1, 8
506 ; SDAG-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
507 ; SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
508 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
509 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
510 ; SDAG-NEXT:    s_and_b64 s[0:1], vcc, exec
511 ; SDAG-NEXT:    s_cselect_b32 s0, 0xffffff80, 0
512 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
513 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
514 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
515 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
516 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
517 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
518 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
519 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
520 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
521 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
522 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0x260
523 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v4
524 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], s0
525 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
526 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
527 ; SDAG-NEXT:    v_readfirstlane_b32 s0, v0
528 ; SDAG-NEXT:    v_readfirstlane_b32 s1, v1
529 ; SDAG-NEXT:    ; return to shader part epilog
531 ; GISEL-LABEL: s_sqrt_f64_ninf:
532 ; GISEL:       ; %bb.0:
533 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
534 ; GISEL-NEXT:    v_bfrev_b32_e32 v1, 8
535 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
536 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0x100
537 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v2, vcc
538 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
539 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
540 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
541 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
542 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
543 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
544 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
545 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
546 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
547 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
548 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
549 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
550 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
551 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
552 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
553 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
554 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
555 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
556 ; GISEL-NEXT:    v_readfirstlane_b32 s0, v0
557 ; GISEL-NEXT:    v_readfirstlane_b32 s1, v1
558 ; GISEL-NEXT:    ; return to shader part epilog
559   %result = call ninf double @llvm.sqrt.f64(double %x)
560   %cast = bitcast double %result to <2 x i32>
561   %cast.0 = extractelement <2 x i32> %cast, i32 0
562   %cast.1 = extractelement <2 x i32> %cast, i32 1
563   %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
564   %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
565   %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
566   %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
567   ret <2 x i32> %insert.1
570 define amdgpu_ps <2 x i32> @s_sqrt_f64_afn(double inreg %x) {
571 ; SDAG-LABEL: s_sqrt_f64_afn:
572 ; SDAG:       ; %bb.0:
573 ; SDAG-NEXT:    v_mov_b32_e32 v0, 0
574 ; SDAG-NEXT:    v_bfrev_b32_e32 v1, 8
575 ; SDAG-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
576 ; SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
577 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
578 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
579 ; SDAG-NEXT:    s_and_b64 s[0:1], vcc, exec
580 ; SDAG-NEXT:    s_cselect_b32 s0, 0xffffff80, 0
581 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
582 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
583 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
584 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
585 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
586 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
587 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
588 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
589 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
590 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
591 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0x260
592 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v4
593 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], s0
594 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
595 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
596 ; SDAG-NEXT:    v_readfirstlane_b32 s0, v0
597 ; SDAG-NEXT:    v_readfirstlane_b32 s1, v1
598 ; SDAG-NEXT:    ; return to shader part epilog
600 ; GISEL-LABEL: s_sqrt_f64_afn:
601 ; GISEL:       ; %bb.0:
602 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
603 ; GISEL-NEXT:    v_bfrev_b32_e32 v1, 8
604 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
605 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0x100
606 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v2, vcc
607 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
608 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
609 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
610 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
611 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
612 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
613 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
614 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
615 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
616 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
617 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
618 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
619 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
620 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
621 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
622 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
623 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
624 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
625 ; GISEL-NEXT:    v_readfirstlane_b32 s0, v0
626 ; GISEL-NEXT:    v_readfirstlane_b32 s1, v1
627 ; GISEL-NEXT:    ; return to shader part epilog
628   %result = call afn double @llvm.sqrt.f64(double %x)
629   %cast = bitcast double %result to <2 x i32>
630   %cast.0 = extractelement <2 x i32> %cast, i32 0
631   %cast.1 = extractelement <2 x i32> %cast, i32 1
632   %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
633   %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
634   %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
635   %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
636   ret <2 x i32> %insert.1
639 define amdgpu_ps <2 x i32> @s_sqrt_f64_afn_nnan_ninf(double inreg %x) {
640 ; SDAG-LABEL: s_sqrt_f64_afn_nnan_ninf:
641 ; SDAG:       ; %bb.0:
642 ; SDAG-NEXT:    v_mov_b32_e32 v0, 0
643 ; SDAG-NEXT:    v_bfrev_b32_e32 v1, 8
644 ; SDAG-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
645 ; SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
646 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
647 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
648 ; SDAG-NEXT:    s_and_b64 s[0:1], vcc, exec
649 ; SDAG-NEXT:    s_cselect_b32 s0, 0xffffff80, 0
650 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
651 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
652 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
653 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
654 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
655 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
656 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
657 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
658 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
659 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
660 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0x260
661 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v4
662 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], s0
663 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
664 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
665 ; SDAG-NEXT:    v_readfirstlane_b32 s0, v0
666 ; SDAG-NEXT:    v_readfirstlane_b32 s1, v1
667 ; SDAG-NEXT:    ; return to shader part epilog
669 ; GISEL-LABEL: s_sqrt_f64_afn_nnan_ninf:
670 ; GISEL:       ; %bb.0:
671 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
672 ; GISEL-NEXT:    v_bfrev_b32_e32 v1, 8
673 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
674 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0x100
675 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v2, vcc
676 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
677 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
678 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
679 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
680 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
681 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
682 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
683 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
684 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
685 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
686 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
687 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
688 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
689 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
690 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
691 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
692 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
693 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
694 ; GISEL-NEXT:    v_readfirstlane_b32 s0, v0
695 ; GISEL-NEXT:    v_readfirstlane_b32 s1, v1
696 ; GISEL-NEXT:    ; return to shader part epilog
697   %result = call afn nnan ninf double @llvm.sqrt.f64(double %x)
698   %cast = bitcast double %result to <2 x i32>
699   %cast.0 = extractelement <2 x i32> %cast, i32 0
700   %cast.1 = extractelement <2 x i32> %cast, i32 1
701   %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
702   %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
703   %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
704   %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
705   ret <2 x i32> %insert.1
708 define double @v_sqrt_f64_nsz(double %x) {
709 ; SDAG-LABEL: v_sqrt_f64_nsz:
710 ; SDAG:       ; %bb.0:
711 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
712 ; SDAG-NEXT:    s_mov_b32 s4, 0
713 ; SDAG-NEXT:    s_brev_b32 s5, 8
714 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
715 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
716 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
717 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
718 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
719 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
720 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
721 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
722 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
723 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
724 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
725 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
726 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
727 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
728 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
729 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
730 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
731 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
732 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
733 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
734 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
735 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
737 ; GISEL-LABEL: v_sqrt_f64_nsz:
738 ; GISEL:       ; %bb.0:
739 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
740 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
741 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
742 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
743 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
744 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
745 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
746 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
747 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
748 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
749 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
750 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
751 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
752 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
753 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
754 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
755 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
756 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
757 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
758 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
759 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
760 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
761 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
762 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
763 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
764   %result = call nsz double @llvm.sqrt.f64(double %x)
765   ret double %result
768 define double @v_sqrt_f64_nnan_ninf(double %x) {
769 ; SDAG-LABEL: v_sqrt_f64_nnan_ninf:
770 ; SDAG:       ; %bb.0:
771 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
772 ; SDAG-NEXT:    s_mov_b32 s4, 0
773 ; SDAG-NEXT:    s_brev_b32 s5, 8
774 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
775 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
776 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
777 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
778 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
779 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
780 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
781 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
782 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
783 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
784 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
785 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
786 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
787 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
788 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
789 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
790 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
791 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
792 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
793 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
794 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
795 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
797 ; GISEL-LABEL: v_sqrt_f64_nnan_ninf:
798 ; GISEL:       ; %bb.0:
799 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
800 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
801 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
802 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
803 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
804 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
805 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
806 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
807 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
808 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
809 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
810 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
811 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
812 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
813 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
814 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
815 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
816 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
817 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
818 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
819 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
820 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
821 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
822 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
823 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
824   %result = call nnan ninf double @llvm.sqrt.f64(double %x)
825   ret double %result
828 define double @v_sqrt_f64_nnan_ninf_nsz(double %x) {
829 ; SDAG-LABEL: v_sqrt_f64_nnan_ninf_nsz:
830 ; SDAG:       ; %bb.0:
831 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
832 ; SDAG-NEXT:    s_mov_b32 s4, 0
833 ; SDAG-NEXT:    s_brev_b32 s5, 8
834 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
835 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
836 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
837 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
838 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
839 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
840 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
841 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
842 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
843 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
844 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
845 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
846 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
847 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
848 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
849 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
850 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
851 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
852 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
853 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
854 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
855 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
857 ; GISEL-LABEL: v_sqrt_f64_nnan_ninf_nsz:
858 ; GISEL:       ; %bb.0:
859 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
860 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
861 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
862 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
863 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
864 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
865 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
866 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
867 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
868 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
869 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
870 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
871 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
872 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
873 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
874 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
875 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
876 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
877 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
878 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
879 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
880 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
881 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
882 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
883 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
884   %result = call nnan ninf nsz double @llvm.sqrt.f64(double %x)
885   ret double %result
888 define double @v_sqrt_f64_afn(double %x) {
889 ; SDAG-LABEL: v_sqrt_f64_afn:
890 ; SDAG:       ; %bb.0:
891 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
892 ; SDAG-NEXT:    s_mov_b32 s4, 0
893 ; SDAG-NEXT:    s_brev_b32 s5, 8
894 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
895 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
896 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
897 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
898 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
899 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
900 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
901 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
902 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
903 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
904 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
905 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
906 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
907 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
908 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
909 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
910 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
911 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
912 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
913 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
914 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
915 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
917 ; GISEL-LABEL: v_sqrt_f64_afn:
918 ; GISEL:       ; %bb.0:
919 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
920 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
921 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
922 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
923 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
924 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
925 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
926 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
927 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
928 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
929 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
930 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
931 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
932 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
933 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
934 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
935 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
936 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
937 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
938 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
939 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
940 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
941 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
942 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
943 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
944   %result = call afn double @llvm.sqrt.f64(double %x)
945   ret double %result
948 define double @v_sqrt_f64_afn_nsz(double %x) {
949 ; SDAG-LABEL: v_sqrt_f64_afn_nsz:
950 ; SDAG:       ; %bb.0:
951 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
952 ; SDAG-NEXT:    s_mov_b32 s4, 0
953 ; SDAG-NEXT:    s_brev_b32 s5, 8
954 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
955 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
956 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
957 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
958 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
959 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
960 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
961 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
962 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
963 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
964 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
965 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
966 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
967 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
968 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
969 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
970 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
971 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
972 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
973 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
974 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
975 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
977 ; GISEL-LABEL: v_sqrt_f64_afn_nsz:
978 ; GISEL:       ; %bb.0:
979 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
980 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
981 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
982 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
983 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
984 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
985 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
986 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
987 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
988 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
989 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
990 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
991 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
992 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
993 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
994 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
995 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
996 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
997 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
998 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
999 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1000 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1001 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1002 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1003 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1004   %result = call afn nsz double @llvm.sqrt.f64(double %x)
1005   ret double %result
1008 define <2 x double> @v_sqrt_v2f64_afn(<2 x double> %x) {
1009 ; SDAG-LABEL: v_sqrt_v2f64_afn:
1010 ; SDAG:       ; %bb.0:
1011 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1012 ; SDAG-NEXT:    s_mov_b32 s4, 0
1013 ; SDAG-NEXT:    s_brev_b32 s5, 8
1014 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1015 ; SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[4:5], v[2:3]
1016 ; SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1017 ; SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1018 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
1019 ; SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
1020 ; SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1021 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1022 ; SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
1023 ; SDAG-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
1024 ; SDAG-NEXT:    v_mul_f64 v[8:9], v[0:1], v[4:5]
1025 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
1026 ; SDAG-NEXT:    v_mul_f64 v[10:11], v[2:3], v[6:7]
1027 ; SDAG-NEXT:    v_mul_f64 v[6:7], v[6:7], 0.5
1028 ; SDAG-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
1029 ; SDAG-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
1030 ; SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1031 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1032 ; SDAG-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1033 ; SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1034 ; SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]
1035 ; SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]
1036 ; SDAG-NEXT:    v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
1037 ; SDAG-NEXT:    v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
1038 ; SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]
1039 ; SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]
1040 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
1041 ; SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
1042 ; SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
1043 ; SDAG-NEXT:    v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
1044 ; SDAG-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
1045 ; SDAG-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
1046 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
1047 ; SDAG-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
1048 ; SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
1049 ; SDAG-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
1050 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
1051 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
1052 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
1053 ; SDAG-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
1054 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1056 ; GISEL-LABEL: v_sqrt_v2f64_afn:
1057 ; GISEL:       ; %bb.0:
1058 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1059 ; GISEL-NEXT:    s_mov_b32 s4, 0
1060 ; GISEL-NEXT:    s_brev_b32 s5, 8
1061 ; GISEL-NEXT:    v_mov_b32_e32 v4, s4
1062 ; GISEL-NEXT:    v_mov_b32_e32 v5, s5
1063 ; GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1064 ; GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
1065 ; GISEL-NEXT:    v_mov_b32_e32 v6, 0x100
1066 ; GISEL-NEXT:    v_cndmask_b32_e32 v7, 0, v6, vcc
1067 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v6, s[4:5]
1068 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v7
1069 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1070 ; GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
1071 ; GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
1072 ; GISEL-NEXT:    v_mul_f64 v[8:9], v[4:5], 0.5
1073 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
1074 ; GISEL-NEXT:    v_mul_f64 v[10:11], v[6:7], 0.5
1075 ; GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
1076 ; GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
1077 ; GISEL-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
1078 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1079 ; GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1080 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1081 ; GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1082 ; GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
1083 ; GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
1084 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
1085 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
1086 ; GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
1087 ; GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
1088 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
1089 ; GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
1090 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
1091 ; GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
1092 ; GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
1093 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
1094 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
1095 ; GISEL-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
1096 ; GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
1097 ; GISEL-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
1098 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
1099 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
1100 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
1101 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
1102 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1103   %result = call afn <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
1104   ret <2 x double> %result
1107 define double @v_sqrt_f64_afn_nnan(double %x) {
1108 ; SDAG-LABEL: v_sqrt_f64_afn_nnan:
1109 ; SDAG:       ; %bb.0:
1110 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1111 ; SDAG-NEXT:    s_mov_b32 s4, 0
1112 ; SDAG-NEXT:    s_brev_b32 s5, 8
1113 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1114 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1115 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
1116 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1117 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1118 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
1119 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
1120 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1121 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1122 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1123 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1124 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1125 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1126 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1127 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1128 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
1129 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1130 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1131 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1132 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1133 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1134 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1136 ; GISEL-LABEL: v_sqrt_f64_afn_nnan:
1137 ; GISEL:       ; %bb.0:
1138 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1139 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
1140 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
1141 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1142 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
1143 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
1144 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1145 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1146 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
1147 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
1148 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1149 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1150 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1151 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1152 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1153 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1154 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1155 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1156 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
1157 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1158 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1159 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1160 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1161 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1162 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1163   %result = call afn nnan double @llvm.sqrt.f64(double %x)
1164   ret double %result
1167 define double @v_sqrt_f64_fabs_afn_ninf(double %x) {
1168 ; SDAG-LABEL: v_sqrt_f64_fabs_afn_ninf:
1169 ; SDAG:       ; %bb.0:
1170 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1171 ; SDAG-NEXT:    s_mov_b32 s4, 0
1172 ; SDAG-NEXT:    s_brev_b32 s5, 8
1173 ; SDAG-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]
1174 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1175 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
1176 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], |v[0:1]|, v2
1177 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1178 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
1179 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
1180 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1181 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1182 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1183 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1184 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1185 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1186 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1187 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1188 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
1189 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1190 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1191 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1192 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1193 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1194 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1196 ; GISEL-LABEL: v_sqrt_f64_fabs_afn_ninf:
1197 ; GISEL:       ; %bb.0:
1198 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1199 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
1200 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
1201 ; GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[2:3]
1202 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
1203 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
1204 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], |v[0:1]|, v2
1205 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1206 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
1207 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
1208 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1209 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1210 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1211 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1212 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1213 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1214 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1215 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1216 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
1217 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1218 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1219 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1220 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1221 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1222 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1223   %fabs = call double @llvm.fabs.f64(double %x)
1224   %result = call afn ninf double @llvm.sqrt.f64(double %fabs)
1225   ret double %result
1228 define double @v_sqrt_f64_afn_nnan_ninf(double %x) {
1229 ; SDAG-LABEL: v_sqrt_f64_afn_nnan_ninf:
1230 ; SDAG:       ; %bb.0:
1231 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1232 ; SDAG-NEXT:    s_mov_b32 s4, 0
1233 ; SDAG-NEXT:    s_brev_b32 s5, 8
1234 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1235 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1236 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
1237 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1238 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1239 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
1240 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
1241 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1242 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1243 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1244 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1245 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1246 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1247 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1248 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1249 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
1250 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1251 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1252 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1253 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1254 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1255 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1257 ; GISEL-LABEL: v_sqrt_f64_afn_nnan_ninf:
1258 ; GISEL:       ; %bb.0:
1259 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1260 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
1261 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
1262 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1263 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
1264 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
1265 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1266 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1267 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
1268 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
1269 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1270 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1271 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1272 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1273 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1274 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1275 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1276 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1277 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
1278 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1279 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1280 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1281 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1282 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1283 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1284   %result = call afn nnan ninf double @llvm.sqrt.f64(double %x)
1285   ret double %result
1288 define <2 x double> @v_sqrt_v2f64_afn_nnan_ninf(<2 x double> %x) {
1289 ; SDAG-LABEL: v_sqrt_v2f64_afn_nnan_ninf:
1290 ; SDAG:       ; %bb.0:
1291 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1292 ; SDAG-NEXT:    s_mov_b32 s4, 0
1293 ; SDAG-NEXT:    s_brev_b32 s5, 8
1294 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1295 ; SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[4:5], v[2:3]
1296 ; SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1297 ; SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1298 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
1299 ; SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
1300 ; SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1301 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1302 ; SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
1303 ; SDAG-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
1304 ; SDAG-NEXT:    v_mul_f64 v[8:9], v[0:1], v[4:5]
1305 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
1306 ; SDAG-NEXT:    v_mul_f64 v[10:11], v[2:3], v[6:7]
1307 ; SDAG-NEXT:    v_mul_f64 v[6:7], v[6:7], 0.5
1308 ; SDAG-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
1309 ; SDAG-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
1310 ; SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1311 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1312 ; SDAG-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1313 ; SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1314 ; SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]
1315 ; SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]
1316 ; SDAG-NEXT:    v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
1317 ; SDAG-NEXT:    v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
1318 ; SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]
1319 ; SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]
1320 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
1321 ; SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
1322 ; SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
1323 ; SDAG-NEXT:    v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
1324 ; SDAG-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
1325 ; SDAG-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
1326 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
1327 ; SDAG-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
1328 ; SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
1329 ; SDAG-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
1330 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
1331 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
1332 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
1333 ; SDAG-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
1334 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1336 ; GISEL-LABEL: v_sqrt_v2f64_afn_nnan_ninf:
1337 ; GISEL:       ; %bb.0:
1338 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1339 ; GISEL-NEXT:    s_mov_b32 s4, 0
1340 ; GISEL-NEXT:    s_brev_b32 s5, 8
1341 ; GISEL-NEXT:    v_mov_b32_e32 v4, s4
1342 ; GISEL-NEXT:    v_mov_b32_e32 v5, s5
1343 ; GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1344 ; GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
1345 ; GISEL-NEXT:    v_mov_b32_e32 v6, 0x100
1346 ; GISEL-NEXT:    v_cndmask_b32_e32 v7, 0, v6, vcc
1347 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v6, s[4:5]
1348 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v7
1349 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1350 ; GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
1351 ; GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
1352 ; GISEL-NEXT:    v_mul_f64 v[8:9], v[4:5], 0.5
1353 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
1354 ; GISEL-NEXT:    v_mul_f64 v[10:11], v[6:7], 0.5
1355 ; GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
1356 ; GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
1357 ; GISEL-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
1358 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1359 ; GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1360 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1361 ; GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1362 ; GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
1363 ; GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
1364 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
1365 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
1366 ; GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
1367 ; GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
1368 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
1369 ; GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
1370 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
1371 ; GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
1372 ; GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
1373 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
1374 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
1375 ; GISEL-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
1376 ; GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
1377 ; GISEL-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
1378 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
1379 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
1380 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
1381 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
1382 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1383   %result = call afn nnan ninf <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
1384   ret <2 x double> %result
1387 define double @v_sqrt_f64_afn_nnan_ninf_nsz(double %x) {
1388 ; SDAG-LABEL: v_sqrt_f64_afn_nnan_ninf_nsz:
1389 ; SDAG:       ; %bb.0:
1390 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1391 ; SDAG-NEXT:    s_mov_b32 s4, 0
1392 ; SDAG-NEXT:    s_brev_b32 s5, 8
1393 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1394 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1395 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
1396 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1397 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1398 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
1399 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
1400 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1401 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1402 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1403 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1404 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1405 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1406 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1407 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1408 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
1409 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1410 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1411 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1412 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1413 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1414 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1416 ; GISEL-LABEL: v_sqrt_f64_afn_nnan_ninf_nsz:
1417 ; GISEL:       ; %bb.0:
1418 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1419 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
1420 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
1421 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1422 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
1423 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
1424 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1425 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1426 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
1427 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
1428 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1429 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1430 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1431 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1432 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1433 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1434 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1435 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1436 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
1437 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1438 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1439 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1440 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1441 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1442 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1443   %result = call afn nnan ninf nsz double @llvm.sqrt.f64(double %x)
1444   ret double %result
1447 define double @v_sqrt_f64__approx_func_fp_math(double %x) #2 {
1448 ; SDAG-LABEL: v_sqrt_f64__approx_func_fp_math:
1449 ; SDAG:       ; %bb.0:
1450 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1451 ; SDAG-NEXT:    s_mov_b32 s4, 0
1452 ; SDAG-NEXT:    s_brev_b32 s5, 8
1453 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1454 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1455 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
1456 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1457 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1458 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
1459 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
1460 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1461 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1462 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1463 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1464 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1465 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1466 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1467 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1468 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
1469 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1470 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1471 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1472 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1473 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1474 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1476 ; GISEL-LABEL: v_sqrt_f64__approx_func_fp_math:
1477 ; GISEL:       ; %bb.0:
1478 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1479 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
1480 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
1481 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1482 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
1483 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
1484 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1485 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1486 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
1487 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
1488 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1489 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1490 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1491 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1492 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1493 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1494 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1495 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1496 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
1497 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1498 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1499 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1500 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1501 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1502 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1503   %result = call nsz double @llvm.sqrt.f64(double %x)
1504   ret double %result
1507 define double @v_sqrt_f64__enough_unsafe_attrs(double %x) #3 {
1508 ; SDAG-LABEL: v_sqrt_f64__enough_unsafe_attrs:
1509 ; SDAG:       ; %bb.0:
1510 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1511 ; SDAG-NEXT:    s_mov_b32 s4, 0
1512 ; SDAG-NEXT:    s_brev_b32 s5, 8
1513 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1514 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1515 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
1516 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1517 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1518 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
1519 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
1520 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1521 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1522 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1523 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1524 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1525 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1526 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1527 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1528 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
1529 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1530 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1531 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1532 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1533 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1534 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1536 ; GISEL-LABEL: v_sqrt_f64__enough_unsafe_attrs:
1537 ; GISEL:       ; %bb.0:
1538 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1539 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
1540 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
1541 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1542 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
1543 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
1544 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1545 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1546 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
1547 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
1548 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1549 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1550 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1551 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1552 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1553 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1554 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1555 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1556 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
1557 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1558 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1559 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1560 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1561 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1562 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1563   %result = call nsz double @llvm.sqrt.f64(double %x)
1564   ret double %result
1567 define double @v_sqrt_f64__unsafe_attr(double %x) #4 {
1568 ; SDAG-LABEL: v_sqrt_f64__unsafe_attr:
1569 ; SDAG:       ; %bb.0:
1570 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1571 ; SDAG-NEXT:    s_mov_b32 s4, 0
1572 ; SDAG-NEXT:    s_brev_b32 s5, 8
1573 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1574 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1575 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
1576 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1577 ; SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1578 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
1579 ; SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
1580 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1581 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1582 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1583 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1584 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1585 ; SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1586 ; SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1587 ; SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1588 ; SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
1589 ; SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1590 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1591 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1592 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1593 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1594 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1596 ; GISEL-LABEL: v_sqrt_f64__unsafe_attr:
1597 ; GISEL:       ; %bb.0:
1598 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1599 ; GISEL-NEXT:    v_mov_b32_e32 v2, 0
1600 ; GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
1601 ; GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1602 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0x100
1603 ; GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
1604 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1605 ; GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
1606 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
1607 ; GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
1608 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1609 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1610 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1611 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1612 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1613 ; GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1614 ; GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1615 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
1616 ; GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
1617 ; GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
1618 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
1619 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1620 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
1621 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
1622 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1623   %result = call nsz double @llvm.sqrt.f64(double %x)
1624   ret double %result
1627 define <2 x double> @v_sqrt_v2f64(<2 x double> %x) {
1628 ; SDAG-LABEL: v_sqrt_v2f64:
1629 ; SDAG:       ; %bb.0:
1630 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1631 ; SDAG-NEXT:    s_mov_b32 s4, 0
1632 ; SDAG-NEXT:    s_brev_b32 s5, 8
1633 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1634 ; SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[4:5], v[2:3]
1635 ; SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1636 ; SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1637 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
1638 ; SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
1639 ; SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1640 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1641 ; SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
1642 ; SDAG-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
1643 ; SDAG-NEXT:    v_mul_f64 v[8:9], v[0:1], v[4:5]
1644 ; SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
1645 ; SDAG-NEXT:    v_mul_f64 v[10:11], v[2:3], v[6:7]
1646 ; SDAG-NEXT:    v_mul_f64 v[6:7], v[6:7], 0.5
1647 ; SDAG-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
1648 ; SDAG-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
1649 ; SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1650 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1651 ; SDAG-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1652 ; SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1653 ; SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]
1654 ; SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]
1655 ; SDAG-NEXT:    v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
1656 ; SDAG-NEXT:    v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
1657 ; SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]
1658 ; SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]
1659 ; SDAG-NEXT:    v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
1660 ; SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
1661 ; SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
1662 ; SDAG-NEXT:    v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
1663 ; SDAG-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
1664 ; SDAG-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
1665 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
1666 ; SDAG-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
1667 ; SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
1668 ; SDAG-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
1669 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
1670 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
1671 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
1672 ; SDAG-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
1673 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1675 ; GISEL-LABEL: v_sqrt_v2f64:
1676 ; GISEL:       ; %bb.0:
1677 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1678 ; GISEL-NEXT:    s_mov_b32 s4, 0
1679 ; GISEL-NEXT:    s_brev_b32 s5, 8
1680 ; GISEL-NEXT:    v_mov_b32_e32 v4, s4
1681 ; GISEL-NEXT:    v_mov_b32_e32 v5, s5
1682 ; GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1683 ; GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
1684 ; GISEL-NEXT:    v_mov_b32_e32 v6, 0x100
1685 ; GISEL-NEXT:    v_cndmask_b32_e32 v7, 0, v6, vcc
1686 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v6, s[4:5]
1687 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v7
1688 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1689 ; GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
1690 ; GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
1691 ; GISEL-NEXT:    v_mul_f64 v[8:9], v[4:5], 0.5
1692 ; GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
1693 ; GISEL-NEXT:    v_mul_f64 v[10:11], v[6:7], 0.5
1694 ; GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
1695 ; GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
1696 ; GISEL-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
1697 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1698 ; GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1699 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1700 ; GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1701 ; GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
1702 ; GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
1703 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
1704 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
1705 ; GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
1706 ; GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
1707 ; GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
1708 ; GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
1709 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
1710 ; GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
1711 ; GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
1712 ; GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
1713 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
1714 ; GISEL-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
1715 ; GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
1716 ; GISEL-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
1717 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
1718 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
1719 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
1720 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
1721 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1722   %result = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
1723   ret <2 x double> %result
1726 define <3 x double> @v_sqrt_v3f64(<3 x double> %x) {
1727 ; SDAG-LABEL: v_sqrt_v3f64:
1728 ; SDAG:       ; %bb.0:
1729 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1730 ; SDAG-NEXT:    s_mov_b32 s6, 0
1731 ; SDAG-NEXT:    s_brev_b32 s7, 8
1732 ; SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[6:7], v[0:1]
1733 ; SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[6:7], v[2:3]
1734 ; SDAG-NEXT:    v_cmp_gt_f64_e64 s[6:7], s[6:7], v[4:5]
1735 ; SDAG-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1736 ; SDAG-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
1737 ; SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v6
1738 ; SDAG-NEXT:    v_cndmask_b32_e64 v6, 0, 1, s[4:5]
1739 ; SDAG-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
1740 ; SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v6
1741 ; SDAG-NEXT:    v_cndmask_b32_e64 v6, 0, 1, s[6:7]
1742 ; SDAG-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
1743 ; SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
1744 ; SDAG-NEXT:    v_rsq_f64_e32 v[6:7], v[0:1]
1745 ; SDAG-NEXT:    v_rsq_f64_e32 v[8:9], v[2:3]
1746 ; SDAG-NEXT:    v_rsq_f64_e32 v[10:11], v[4:5]
1747 ; SDAG-NEXT:    v_mul_f64 v[12:13], v[0:1], v[6:7]
1748 ; SDAG-NEXT:    v_mul_f64 v[6:7], v[6:7], 0.5
1749 ; SDAG-NEXT:    v_mul_f64 v[14:15], v[2:3], v[8:9]
1750 ; SDAG-NEXT:    v_mul_f64 v[8:9], v[8:9], 0.5
1751 ; SDAG-NEXT:    v_mul_f64 v[16:17], v[4:5], v[10:11]
1752 ; SDAG-NEXT:    v_mul_f64 v[10:11], v[10:11], 0.5
1753 ; SDAG-NEXT:    v_fma_f64 v[18:19], -v[6:7], v[12:13], 0.5
1754 ; SDAG-NEXT:    v_fma_f64 v[20:21], -v[8:9], v[14:15], 0.5
1755 ; SDAG-NEXT:    v_fma_f64 v[22:23], -v[10:11], v[16:17], 0.5
1756 ; SDAG-NEXT:    v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]
1757 ; SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[18:19], v[6:7]
1758 ; SDAG-NEXT:    v_fma_f64 v[14:15], v[14:15], v[20:21], v[14:15]
1759 ; SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[20:21], v[8:9]
1760 ; SDAG-NEXT:    v_fma_f64 v[16:17], v[16:17], v[22:23], v[16:17]
1761 ; SDAG-NEXT:    v_fma_f64 v[10:11], v[10:11], v[22:23], v[10:11]
1762 ; SDAG-NEXT:    v_fma_f64 v[18:19], -v[12:13], v[12:13], v[0:1]
1763 ; SDAG-NEXT:    v_fma_f64 v[20:21], -v[14:15], v[14:15], v[2:3]
1764 ; SDAG-NEXT:    v_fma_f64 v[22:23], -v[16:17], v[16:17], v[4:5]
1765 ; SDAG-NEXT:    v_fma_f64 v[12:13], v[18:19], v[6:7], v[12:13]
1766 ; SDAG-NEXT:    v_fma_f64 v[14:15], v[20:21], v[8:9], v[14:15]
1767 ; SDAG-NEXT:    v_fma_f64 v[16:17], v[22:23], v[10:11], v[16:17]
1768 ; SDAG-NEXT:    v_fma_f64 v[18:19], -v[12:13], v[12:13], v[0:1]
1769 ; SDAG-NEXT:    v_fma_f64 v[20:21], -v[14:15], v[14:15], v[2:3]
1770 ; SDAG-NEXT:    v_fma_f64 v[22:23], -v[16:17], v[16:17], v[4:5]
1771 ; SDAG-NEXT:    v_fma_f64 v[6:7], v[18:19], v[6:7], v[12:13]
1772 ; SDAG-NEXT:    v_mov_b32_e32 v12, 0xffffff80
1773 ; SDAG-NEXT:    v_mov_b32_e32 v13, 0x260
1774 ; SDAG-NEXT:    v_fma_f64 v[8:9], v[20:21], v[8:9], v[14:15]
1775 ; SDAG-NEXT:    v_cndmask_b32_e32 v14, 0, v12, vcc
1776 ; SDAG-NEXT:    v_cndmask_b32_e64 v15, 0, v12, s[4:5]
1777 ; SDAG-NEXT:    v_fma_f64 v[10:11], v[22:23], v[10:11], v[16:17]
1778 ; SDAG-NEXT:    v_cndmask_b32_e64 v12, 0, v12, s[6:7]
1779 ; SDAG-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v14
1780 ; SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v13
1781 ; SDAG-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v13
1782 ; SDAG-NEXT:    v_ldexp_f64 v[8:9], v[8:9], v15
1783 ; SDAG-NEXT:    v_cmp_class_f64_e64 s[6:7], v[4:5], v13
1784 ; SDAG-NEXT:    v_ldexp_f64 v[10:11], v[10:11], v12
1785 ; SDAG-NEXT:    v_cndmask_b32_e32 v0, v6, v0, vcc
1786 ; SDAG-NEXT:    v_cndmask_b32_e32 v1, v7, v1, vcc
1787 ; SDAG-NEXT:    v_cndmask_b32_e64 v2, v8, v2, s[4:5]
1788 ; SDAG-NEXT:    v_cndmask_b32_e64 v3, v9, v3, s[4:5]
1789 ; SDAG-NEXT:    v_cndmask_b32_e64 v4, v10, v4, s[6:7]
1790 ; SDAG-NEXT:    v_cndmask_b32_e64 v5, v11, v5, s[6:7]
1791 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1793 ; GISEL-LABEL: v_sqrt_v3f64:
1794 ; GISEL:       ; %bb.0:
1795 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1796 ; GISEL-NEXT:    s_mov_b32 s4, 0
1797 ; GISEL-NEXT:    s_brev_b32 s5, 8
1798 ; GISEL-NEXT:    v_mov_b32_e32 v6, s4
1799 ; GISEL-NEXT:    v_mov_b32_e32 v7, s5
1800 ; GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1801 ; GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[6:7]
1802 ; GISEL-NEXT:    v_cmp_lt_f64_e64 s[6:7], v[4:5], v[6:7]
1803 ; GISEL-NEXT:    v_mov_b32_e32 v8, 0x100
1804 ; GISEL-NEXT:    v_cndmask_b32_e32 v9, 0, v8, vcc
1805 ; GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v9
1806 ; GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, v8, s[4:5]
1807 ; GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, v8, s[6:7]
1808 ; GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v9
1809 ; GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
1810 ; GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[0:1]
1811 ; GISEL-NEXT:    v_rsq_f64_e32 v[8:9], v[2:3]
1812 ; GISEL-NEXT:    v_rsq_f64_e32 v[10:11], v[4:5]
1813 ; GISEL-NEXT:    v_mul_f64 v[12:13], v[6:7], 0.5
1814 ; GISEL-NEXT:    v_mul_f64 v[6:7], v[0:1], v[6:7]
1815 ; GISEL-NEXT:    v_mul_f64 v[14:15], v[8:9], 0.5
1816 ; GISEL-NEXT:    v_mul_f64 v[8:9], v[2:3], v[8:9]
1817 ; GISEL-NEXT:    v_mul_f64 v[16:17], v[10:11], 0.5
1818 ; GISEL-NEXT:    v_mul_f64 v[10:11], v[4:5], v[10:11]
1819 ; GISEL-NEXT:    v_fma_f64 v[18:19], -v[12:13], v[6:7], 0.5
1820 ; GISEL-NEXT:    v_fma_f64 v[20:21], -v[14:15], v[8:9], 0.5
1821 ; GISEL-NEXT:    v_fma_f64 v[22:23], -v[16:17], v[10:11], 0.5
1822 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[18:19], v[6:7]
1823 ; GISEL-NEXT:    v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]
1824 ; GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[20:21], v[8:9]
1825 ; GISEL-NEXT:    v_fma_f64 v[14:15], v[14:15], v[20:21], v[14:15]
1826 ; GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[22:23], v[10:11]
1827 ; GISEL-NEXT:    v_fma_f64 v[16:17], v[16:17], v[22:23], v[16:17]
1828 ; GISEL-NEXT:    v_fma_f64 v[18:19], -v[6:7], v[6:7], v[0:1]
1829 ; GISEL-NEXT:    v_fma_f64 v[20:21], -v[8:9], v[8:9], v[2:3]
1830 ; GISEL-NEXT:    v_fma_f64 v[22:23], -v[10:11], v[10:11], v[4:5]
1831 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[18:19], v[12:13], v[6:7]
1832 ; GISEL-NEXT:    v_fma_f64 v[8:9], v[20:21], v[14:15], v[8:9]
1833 ; GISEL-NEXT:    v_fma_f64 v[10:11], v[22:23], v[16:17], v[10:11]
1834 ; GISEL-NEXT:    v_fma_f64 v[18:19], -v[6:7], v[6:7], v[0:1]
1835 ; GISEL-NEXT:    v_fma_f64 v[20:21], -v[8:9], v[8:9], v[2:3]
1836 ; GISEL-NEXT:    v_fma_f64 v[22:23], -v[10:11], v[10:11], v[4:5]
1837 ; GISEL-NEXT:    v_fma_f64 v[6:7], v[18:19], v[12:13], v[6:7]
1838 ; GISEL-NEXT:    v_mov_b32_e32 v12, 0xffffff80
1839 ; GISEL-NEXT:    v_mov_b32_e32 v13, 0x260
1840 ; GISEL-NEXT:    v_fma_f64 v[8:9], v[20:21], v[14:15], v[8:9]
1841 ; GISEL-NEXT:    v_cndmask_b32_e32 v14, 0, v12, vcc
1842 ; GISEL-NEXT:    v_fma_f64 v[10:11], v[22:23], v[16:17], v[10:11]
1843 ; GISEL-NEXT:    v_cndmask_b32_e64 v15, 0, v12, s[4:5]
1844 ; GISEL-NEXT:    v_cndmask_b32_e64 v12, 0, v12, s[6:7]
1845 ; GISEL-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v14
1846 ; GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v13
1847 ; GISEL-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v13
1848 ; GISEL-NEXT:    v_ldexp_f64 v[8:9], v[8:9], v15
1849 ; GISEL-NEXT:    v_cmp_class_f64_e64 s[6:7], v[4:5], v13
1850 ; GISEL-NEXT:    v_ldexp_f64 v[10:11], v[10:11], v12
1851 ; GISEL-NEXT:    v_cndmask_b32_e32 v0, v6, v0, vcc
1852 ; GISEL-NEXT:    v_cndmask_b32_e32 v1, v7, v1, vcc
1853 ; GISEL-NEXT:    v_cndmask_b32_e64 v2, v8, v2, s[4:5]
1854 ; GISEL-NEXT:    v_cndmask_b32_e64 v3, v9, v3, s[4:5]
1855 ; GISEL-NEXT:    v_cndmask_b32_e64 v4, v10, v4, s[6:7]
1856 ; GISEL-NEXT:    v_cndmask_b32_e64 v5, v11, v5, s[6:7]
1857 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1858   %result = call <3 x double> @llvm.sqrt.v3f64(<3 x double> %x)
1859   ret <3 x double> %result
1862 declare double @llvm.fabs.f64(double) #0
1863 declare double @llvm.sqrt.f64(double) #0
1864 declare <2 x double> @llvm.sqrt.v2f64(<2 x double>) #0
1865 declare <3 x double> @llvm.sqrt.v3f64(<3 x double>) #0
1866 declare i32 @llvm.amdgcn.readfirstlane(i32) #1
1868 attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
1869 attributes #1 = { convergent nounwind willreturn memory(none) }
1870 attributes #2 = { "approx-func-fp-math"="true" }
1871 attributes #3 = { "approx-func-fp-math"="true" "no-nans-fp-math"="true" "no-infs-fp-math"="true" }
1872 attributes #4 = { "unsafe-fp-math"="true" }