1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,SDAG,SI-SDAG %s
3 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GISEL,SI-GISEL %s
5 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=fiji < %s | FileCheck -check-prefixes=GCN,SDAG,VI-SDAG %s
6 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=fiji < %s | FileCheck -check-prefixes=GCN,GISEL,VI-GISEL %s
8 declare i32 @llvm.amdgcn.workitem.id.x()
9 declare i32 @llvm.amdgcn.readfirstlane(i32)
10 declare double @llvm.sqrt.f64(double)
11 declare <2 x double> @llvm.sqrt.v2f64(<2 x double>)
12 declare double @llvm.amdgcn.sqrt.f64(double)
13 declare double @llvm.fabs.f64(double)
15 define amdgpu_ps <2 x i32> @s_rsq_f64(double inreg %x) {
16 ; SI-SDAG-LABEL: s_rsq_f64:
18 ; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0
19 ; SI-SDAG-NEXT: v_bfrev_b32_e32 v1, 8
20 ; SI-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
21 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0x260
22 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc
23 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 8, v0
24 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
25 ; SI-SDAG-NEXT: s_and_b64 s[0:1], vcc, exec
26 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
27 ; SI-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0
28 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v8
29 ; SI-SDAG-NEXT: s_mov_b32 s2, 0x3ff00000
30 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
31 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
32 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
33 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
34 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
35 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
36 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
37 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
38 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
39 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0
40 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
41 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
42 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
43 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
44 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
45 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
46 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
47 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[0:1], 1.0, v[0:1], 1.0
48 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
49 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
50 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[0:1], s2, v7
51 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
52 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[0:1], vcc
53 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
54 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
55 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
56 ; SI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
57 ; SI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
58 ; SI-SDAG-NEXT: ; return to shader part epilog
60 ; SI-GISEL-LABEL: s_rsq_f64:
62 ; SI-GISEL-NEXT: v_mov_b32_e32 v0, 0
63 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v1, 8
64 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
65 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x100
66 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc
67 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
68 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
69 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
70 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
71 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
72 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
73 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
74 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
75 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
76 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
77 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
78 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
79 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
80 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
81 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
82 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
83 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
84 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
85 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
86 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
87 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[0:1], 1.0, v[0:1], 1.0
88 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
89 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[0:1], v1, v3
90 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
91 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[0:1]
92 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
93 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
94 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
95 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
96 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
97 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
98 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
99 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
100 ; SI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
101 ; SI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
102 ; SI-GISEL-NEXT: ; return to shader part epilog
104 ; VI-SDAG-LABEL: s_rsq_f64:
106 ; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0
107 ; VI-SDAG-NEXT: v_bfrev_b32_e32 v1, 8
108 ; VI-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
109 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc
110 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 8, v0
111 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
112 ; VI-SDAG-NEXT: s_and_b64 s[0:1], vcc, exec
113 ; VI-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0
114 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
115 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
116 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
117 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
118 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
119 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
120 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
121 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
122 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
123 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
124 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0x260
125 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v4
126 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0
127 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
128 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
129 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
130 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
131 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
132 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
133 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
134 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
135 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
136 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
137 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
138 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
139 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
140 ; VI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
141 ; VI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
142 ; VI-SDAG-NEXT: ; return to shader part epilog
144 ; VI-GISEL-LABEL: s_rsq_f64:
146 ; VI-GISEL-NEXT: v_mov_b32_e32 v0, 0
147 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v1, 8
148 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
149 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x100
150 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc
151 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
152 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
153 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
154 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
155 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
156 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
157 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
158 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
159 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
160 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
161 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
162 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
163 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
164 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
165 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
166 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
167 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
168 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
169 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
170 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
171 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
172 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
173 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
174 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
175 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
176 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
177 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
178 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
179 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
180 ; VI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
181 ; VI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
182 ; VI-GISEL-NEXT: ; return to shader part epilog
183 %rsq = call contract double @llvm.sqrt.f64(double %x)
184 %result = fdiv contract double 1.0, %rsq
185 %cast = bitcast double %result to <2 x i32>
186 %cast.0 = extractelement <2 x i32> %cast, i32 0
187 %cast.1 = extractelement <2 x i32> %cast, i32 1
188 %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
189 %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
190 %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
191 %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
192 ret <2 x i32> %insert.1
195 define amdgpu_ps <2 x i32> @s_rsq_f64_fabs(double inreg %x) {
196 ; SI-SDAG-LABEL: s_rsq_f64_fabs:
198 ; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0
199 ; SI-SDAG-NEXT: v_bfrev_b32_e32 v1, 8
200 ; SI-SDAG-NEXT: v_cmp_lt_f64_e64 s[2:3], |s[0:1]|, v[0:1]
201 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0x260
202 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[2:3]
203 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 8, v0
204 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], |s[0:1]|, v0
205 ; SI-SDAG-NEXT: s_and_b64 s[0:1], s[2:3], exec
206 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
207 ; SI-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0
208 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v8
209 ; SI-SDAG-NEXT: s_mov_b32 s2, 0x3ff00000
210 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
211 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
212 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
213 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
214 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
215 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
216 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
217 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
218 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
219 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0
220 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
221 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
222 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
223 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
224 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
225 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
226 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
227 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[0:1], 1.0, v[0:1], 1.0
228 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
229 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
230 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[0:1], s2, v7
231 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
232 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[0:1], vcc
233 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
234 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
235 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
236 ; SI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
237 ; SI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
238 ; SI-SDAG-NEXT: ; return to shader part epilog
240 ; SI-GISEL-LABEL: s_rsq_f64_fabs:
242 ; SI-GISEL-NEXT: v_mov_b32_e32 v0, 0
243 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v1, 8
244 ; SI-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, |s[0:1]|, v[0:1]
245 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x100
246 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc
247 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], |s[0:1]|, v0
248 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
249 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
250 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
251 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
252 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
253 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
254 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
255 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
256 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
257 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
258 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
259 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
260 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
261 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
262 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
263 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
264 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
265 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
266 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
267 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[0:1], 1.0, v[0:1], 1.0
268 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
269 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[0:1], v1, v3
270 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
271 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[0:1]
272 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
273 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
274 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
275 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
276 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
277 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
278 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
279 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
280 ; SI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
281 ; SI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
282 ; SI-GISEL-NEXT: ; return to shader part epilog
284 ; VI-SDAG-LABEL: s_rsq_f64_fabs:
286 ; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0
287 ; VI-SDAG-NEXT: v_bfrev_b32_e32 v1, 8
288 ; VI-SDAG-NEXT: v_cmp_lt_f64_e64 s[2:3], |s[0:1]|, v[0:1]
289 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[2:3]
290 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 8, v0
291 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], |s[0:1]|, v0
292 ; VI-SDAG-NEXT: s_and_b64 s[0:1], s[2:3], exec
293 ; VI-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0
294 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
295 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
296 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
297 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
298 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
299 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
300 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
301 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
302 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
303 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
304 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0x260
305 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v4
306 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0
307 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
308 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
309 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
310 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
311 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
312 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
313 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
314 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
315 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
316 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
317 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
318 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
319 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
320 ; VI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
321 ; VI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
322 ; VI-SDAG-NEXT: ; return to shader part epilog
324 ; VI-GISEL-LABEL: s_rsq_f64_fabs:
326 ; VI-GISEL-NEXT: v_mov_b32_e32 v0, 0
327 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v1, 8
328 ; VI-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, |s[0:1]|, v[0:1]
329 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x100
330 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc
331 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], |s[0:1]|, v0
332 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
333 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
334 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
335 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
336 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
337 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
338 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
339 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
340 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
341 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
342 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
343 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
344 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
345 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
346 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
347 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
348 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
349 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
350 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
351 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
352 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
353 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
354 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
355 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
356 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
357 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
358 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
359 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
360 ; VI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
361 ; VI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
362 ; VI-GISEL-NEXT: ; return to shader part epilog
363 %fabs.x = call double @llvm.fabs.f64(double %x)
364 %rsq = call contract double @llvm.sqrt.f64(double %fabs.x)
365 %result = fdiv contract double 1.0, %rsq
366 %cast = bitcast double %result to <2 x i32>
367 %cast.0 = extractelement <2 x i32> %cast, i32 0
368 %cast.1 = extractelement <2 x i32> %cast, i32 1
369 %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
370 %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
371 %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
372 %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
373 ret <2 x i32> %insert.1
376 define amdgpu_ps <2 x i32> @s_neg_rsq_f64(double inreg %x) {
377 ; SI-SDAG-LABEL: s_neg_rsq_f64:
379 ; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0
380 ; SI-SDAG-NEXT: v_bfrev_b32_e32 v1, 8
381 ; SI-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
382 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0x260
383 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc
384 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 8, v0
385 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
386 ; SI-SDAG-NEXT: s_and_b64 s[0:1], vcc, exec
387 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
388 ; SI-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0
389 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v8
390 ; SI-SDAG-NEXT: s_mov_b32 s2, 0xbff00000
391 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
392 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
393 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
394 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
395 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
396 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
397 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
398 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
399 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
400 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0
401 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
402 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
403 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], -1.0
404 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
405 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
406 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
407 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
408 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[0:1], -1.0, v[0:1], -1.0
409 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
410 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
411 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[0:1], s2, v7
412 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
413 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[0:1], vcc
414 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
415 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
416 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
417 ; SI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
418 ; SI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
419 ; SI-SDAG-NEXT: ; return to shader part epilog
421 ; SI-GISEL-LABEL: s_neg_rsq_f64:
423 ; SI-GISEL-NEXT: v_mov_b32_e32 v0, 0
424 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v1, 8
425 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
426 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x100
427 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc
428 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
429 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
430 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
431 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
432 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0xbff00000
433 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
434 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
435 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
436 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
437 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
438 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
439 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
440 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
441 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
442 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
443 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
444 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
445 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
446 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
447 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], -1.0
448 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[0:1], -1.0, v[0:1], -1.0
449 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
450 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[0:1], v1, v3
451 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
452 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[0:1]
453 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
454 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
455 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
456 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
457 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
458 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
459 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
460 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
461 ; SI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
462 ; SI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
463 ; SI-GISEL-NEXT: ; return to shader part epilog
465 ; VI-SDAG-LABEL: s_neg_rsq_f64:
467 ; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0
468 ; VI-SDAG-NEXT: v_bfrev_b32_e32 v1, 8
469 ; VI-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
470 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc
471 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 8, v0
472 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
473 ; VI-SDAG-NEXT: s_and_b64 s[0:1], vcc, exec
474 ; VI-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0
475 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
476 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
477 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
478 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
479 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
480 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
481 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
482 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
483 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
484 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
485 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0x260
486 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v4
487 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0
488 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
489 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
490 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], -1.0
491 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
492 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
493 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
494 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
495 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
496 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
497 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
498 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
499 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
500 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
501 ; VI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
502 ; VI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
503 ; VI-SDAG-NEXT: ; return to shader part epilog
505 ; VI-GISEL-LABEL: s_neg_rsq_f64:
507 ; VI-GISEL-NEXT: v_mov_b32_e32 v0, 0
508 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v1, 8
509 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
510 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x100
511 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc
512 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
513 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
514 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
515 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
516 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
517 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
518 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
519 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
520 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
521 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
522 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
523 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
524 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
525 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
526 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
527 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
528 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
529 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
530 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], -1.0
531 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
532 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
533 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
534 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
535 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
536 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
537 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
538 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
539 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
540 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
541 ; VI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
542 ; VI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
543 ; VI-GISEL-NEXT: ; return to shader part epilog
544 %rsq = call contract double @llvm.sqrt.f64(double %x)
545 %result = fdiv contract double -1.0, %rsq
546 %cast = bitcast double %result to <2 x i32>
547 %cast.0 = extractelement <2 x i32> %cast, i32 0
548 %cast.1 = extractelement <2 x i32> %cast, i32 1
549 %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
550 %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
551 %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
552 %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
553 ret <2 x i32> %insert.1
556 define amdgpu_ps <2 x i32> @s_neg_rsq_neg_f64(double inreg %x) {
557 ; SI-SDAG-LABEL: s_neg_rsq_neg_f64:
559 ; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0
560 ; SI-SDAG-NEXT: v_bfrev_b32_e32 v1, 9
561 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[0:1], v[0:1]
562 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0x260
563 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc
564 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 8, v0
565 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], -s[0:1], v0
566 ; SI-SDAG-NEXT: s_and_b64 s[0:1], vcc, exec
567 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
568 ; SI-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0
569 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v8
570 ; SI-SDAG-NEXT: s_mov_b32 s2, 0xbff00000
571 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
572 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
573 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
574 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
575 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
576 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
577 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
578 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
579 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
580 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0
581 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
582 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
583 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], -1.0
584 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
585 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
586 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
587 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
588 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[0:1], -1.0, v[0:1], -1.0
589 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
590 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
591 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[0:1], s2, v7
592 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
593 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[0:1], vcc
594 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
595 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
596 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
597 ; SI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
598 ; SI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
599 ; SI-SDAG-NEXT: ; return to shader part epilog
601 ; SI-GISEL-LABEL: s_neg_rsq_neg_f64:
603 ; SI-GISEL-NEXT: v_mov_b32_e32 v0, 0
604 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v1, 8
605 ; SI-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, -s[0:1], v[0:1]
606 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x100
607 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc
608 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], -s[0:1], v0
609 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
610 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
611 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
612 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0xbff00000
613 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
614 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
615 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
616 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
617 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
618 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
619 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
620 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
621 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
622 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
623 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
624 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
625 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
626 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
627 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], -1.0
628 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[0:1], -1.0, v[0:1], -1.0
629 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
630 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[0:1], v1, v3
631 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
632 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[0:1]
633 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
634 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
635 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
636 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
637 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
638 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
639 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
640 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
641 ; SI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
642 ; SI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
643 ; SI-GISEL-NEXT: ; return to shader part epilog
645 ; VI-SDAG-LABEL: s_neg_rsq_neg_f64:
647 ; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0
648 ; VI-SDAG-NEXT: v_bfrev_b32_e32 v1, 9
649 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[0:1], v[0:1]
650 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc
651 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 8, v0
652 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], -s[0:1], v0
653 ; VI-SDAG-NEXT: s_and_b64 s[0:1], vcc, exec
654 ; VI-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0
655 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
656 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
657 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
658 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
659 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
660 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
661 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
662 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
663 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
664 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
665 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0x260
666 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v4
667 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0
668 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
669 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
670 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], -1.0
671 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
672 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
673 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
674 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
675 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
676 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
677 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
678 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
679 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
680 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
681 ; VI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
682 ; VI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
683 ; VI-SDAG-NEXT: ; return to shader part epilog
685 ; VI-GISEL-LABEL: s_neg_rsq_neg_f64:
687 ; VI-GISEL-NEXT: v_mov_b32_e32 v0, 0
688 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v1, 8
689 ; VI-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, -s[0:1], v[0:1]
690 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x100
691 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc
692 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], -s[0:1], v0
693 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
694 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
695 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
696 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
697 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
698 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
699 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
700 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
701 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
702 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
703 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
704 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
705 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
706 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
707 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
708 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
709 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
710 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], -1.0
711 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
712 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
713 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
714 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
715 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
716 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
717 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
718 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
719 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
720 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
721 ; VI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
722 ; VI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
723 ; VI-GISEL-NEXT: ; return to shader part epilog
724 %x.neg = fneg double %x
725 %rsq = call contract double @llvm.sqrt.f64(double %x.neg)
726 %result = fdiv contract double -1.0, %rsq
727 %cast = bitcast double %result to <2 x i32>
728 %cast.0 = extractelement <2 x i32> %cast, i32 0
729 %cast.1 = extractelement <2 x i32> %cast, i32 1
730 %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
731 %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
732 %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
733 %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
734 ret <2 x i32> %insert.1
737 define double @v_rsq_f64(double %x) {
738 ; SI-SDAG-LABEL: v_rsq_f64:
740 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
741 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
742 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
743 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
744 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
745 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
746 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
747 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
748 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
749 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
750 ; SI-SDAG-NEXT: s_mov_b32 s6, 0x3ff00000
751 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
752 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
753 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
754 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
755 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
756 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
757 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
758 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
759 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
760 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
761 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
762 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
763 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
764 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
765 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
766 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
767 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
768 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
769 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
770 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
771 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
772 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
773 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
774 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
775 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
776 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
777 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
778 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
779 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
781 ; SI-GISEL-LABEL: v_rsq_f64:
783 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
784 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
785 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
786 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
787 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
788 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
789 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
790 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
791 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
792 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
793 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
794 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
795 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
796 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
797 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
798 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
799 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
800 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
801 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
802 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
803 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
804 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
805 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
806 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
807 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
808 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
809 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
810 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
811 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
812 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
813 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
814 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
815 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
816 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
817 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
818 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
819 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
820 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
821 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
822 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
824 ; VI-SDAG-LABEL: v_rsq_f64:
826 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
827 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
828 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
829 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
830 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
831 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
832 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
833 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
834 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
835 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
836 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
837 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
838 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
839 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
840 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
841 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
842 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
843 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
844 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
845 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
846 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
847 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
848 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
849 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
850 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
851 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
852 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
853 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
854 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
855 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
856 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
857 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
858 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
859 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
860 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
861 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
863 ; VI-GISEL-LABEL: v_rsq_f64:
865 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
866 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
867 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
868 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
869 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
870 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
871 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
872 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
873 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
874 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
875 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
876 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
877 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
878 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
879 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
880 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
881 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
882 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
883 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
884 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
885 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
886 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
887 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
888 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
889 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
890 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
891 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
892 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
893 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
894 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
895 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
896 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
897 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
898 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
899 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
900 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
901 %sqrt = call contract double @llvm.sqrt.f64(double %x)
902 %rsq = fdiv contract double 1.0, %sqrt
906 define double @v_rsq_f64_fabs(double %x) {
907 ; SI-SDAG-LABEL: v_rsq_f64_fabs:
909 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
910 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
911 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
912 ; SI-SDAG-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]
913 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
914 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
915 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
916 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v2
917 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
918 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
919 ; SI-SDAG-NEXT: s_mov_b32 s6, 0x3ff00000
920 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
921 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
922 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
923 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
924 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
925 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
926 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
927 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
928 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
929 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
930 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
931 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
932 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
933 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
934 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
935 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
936 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
937 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
938 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
939 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
940 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
941 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
942 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
943 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
944 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
945 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
946 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
947 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
948 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
950 ; SI-GISEL-LABEL: v_rsq_f64_fabs:
952 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
953 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
954 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
955 ; SI-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[2:3]
956 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
957 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
958 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v2
959 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
960 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
961 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
962 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
963 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
964 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
965 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
966 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
967 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
968 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
969 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
970 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
971 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
972 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
973 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
974 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
975 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
976 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
977 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
978 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
979 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
980 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
981 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
982 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
983 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
984 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
985 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
986 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
987 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
988 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
989 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
990 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
991 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
993 ; VI-SDAG-LABEL: v_rsq_f64_fabs:
995 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
996 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
997 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
998 ; VI-SDAG-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]
999 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
1000 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
1001 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v2
1002 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1003 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
1004 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
1005 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1006 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1007 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1008 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1009 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1010 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1011 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1012 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
1013 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
1014 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
1015 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
1016 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1017 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1018 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1019 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
1020 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1021 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1022 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1023 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
1024 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1025 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1026 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1027 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1028 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1029 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
1030 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
1032 ; VI-GISEL-LABEL: v_rsq_f64_fabs:
1033 ; VI-GISEL: ; %bb.0:
1034 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1035 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
1036 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
1037 ; VI-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[2:3]
1038 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
1039 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
1040 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v2
1041 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1042 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
1043 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
1044 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1045 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1046 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1047 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1048 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1049 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1050 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1051 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
1052 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
1053 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
1054 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
1055 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1056 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1057 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1058 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
1059 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1060 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1061 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1062 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
1063 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1064 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1065 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1066 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1067 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1068 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
1069 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
1070 %fabs.x = call double @llvm.fabs.f64(double %x)
1071 %sqrt = call contract double @llvm.sqrt.f64(double %fabs.x)
1072 %rsq = fdiv contract double 1.0, %sqrt
1076 define double @v_rsq_f64_missing_contract0(double %x) {
1077 ; SI-SDAG-LABEL: v_rsq_f64_missing_contract0:
1079 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1080 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
1081 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
1082 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1083 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
1084 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
1085 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
1086 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1087 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
1088 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1089 ; SI-SDAG-NEXT: s_mov_b32 s6, 0x3ff00000
1090 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
1091 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
1092 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1093 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1094 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1095 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1096 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1097 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1098 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1099 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
1100 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1101 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
1102 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1103 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1104 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
1105 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1106 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
1107 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1108 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1109 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
1110 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1111 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1112 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
1113 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1114 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
1115 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1116 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1117 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
1118 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
1120 ; SI-GISEL-LABEL: v_rsq_f64_missing_contract0:
1121 ; SI-GISEL: ; %bb.0:
1122 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1123 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
1124 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
1125 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1126 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
1127 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
1128 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1129 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
1130 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1131 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
1132 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
1133 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
1134 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
1135 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1136 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1137 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1138 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1139 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1140 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1141 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1142 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
1143 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1144 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
1145 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1146 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1147 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
1148 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
1149 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1150 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
1151 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
1152 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1153 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1154 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1155 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1156 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1157 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
1158 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
1159 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
1160 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
1161 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
1163 ; VI-SDAG-LABEL: v_rsq_f64_missing_contract0:
1165 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1166 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
1167 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
1168 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1169 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
1170 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
1171 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1172 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1173 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
1174 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
1175 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1176 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1177 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1178 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1179 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1180 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1181 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1182 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
1183 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
1184 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
1185 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
1186 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1187 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1188 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1189 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
1190 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1191 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1192 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1193 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
1194 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1195 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1196 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1197 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1198 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1199 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
1200 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
1202 ; VI-GISEL-LABEL: v_rsq_f64_missing_contract0:
1203 ; VI-GISEL: ; %bb.0:
1204 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1205 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
1206 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
1207 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1208 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
1209 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
1210 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1211 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1212 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
1213 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
1214 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1215 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1216 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1217 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1218 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1219 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1220 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1221 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
1222 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
1223 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
1224 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
1225 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1226 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1227 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1228 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
1229 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1230 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1231 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1232 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
1233 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1234 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1235 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1236 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1237 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1238 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
1239 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
1240 %sqrt = call double @llvm.sqrt.f64(double %x)
1241 %rsq = fdiv contract double 1.0, %sqrt
1245 define double @v_rsq_f64_missing_contract1(double %x) {
1246 ; SI-SDAG-LABEL: v_rsq_f64_missing_contract1:
1248 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1249 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
1250 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
1251 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1252 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
1253 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
1254 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
1255 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1256 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
1257 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1258 ; SI-SDAG-NEXT: s_mov_b32 s6, 0x3ff00000
1259 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
1260 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
1261 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1262 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1263 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1264 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1265 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1266 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1267 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1268 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
1269 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1270 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
1271 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1272 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1273 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
1274 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1275 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
1276 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1277 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1278 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
1279 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1280 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1281 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
1282 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1283 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
1284 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1285 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1286 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
1287 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
1289 ; SI-GISEL-LABEL: v_rsq_f64_missing_contract1:
1290 ; SI-GISEL: ; %bb.0:
1291 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1292 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
1293 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
1294 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1295 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
1296 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
1297 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1298 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
1299 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1300 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
1301 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
1302 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
1303 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
1304 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1305 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1306 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1307 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1308 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1309 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1310 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1311 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
1312 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1313 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
1314 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1315 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1316 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
1317 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
1318 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1319 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
1320 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
1321 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1322 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1323 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1324 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1325 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1326 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
1327 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
1328 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
1329 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
1330 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
1332 ; VI-SDAG-LABEL: v_rsq_f64_missing_contract1:
1334 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1335 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
1336 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
1337 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1338 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
1339 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
1340 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1341 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1342 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
1343 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
1344 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1345 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1346 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1347 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1348 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1349 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1350 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1351 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
1352 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
1353 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
1354 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
1355 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1356 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1357 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1358 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
1359 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1360 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1361 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1362 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
1363 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1364 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1365 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1366 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1367 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1368 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
1369 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
1371 ; VI-GISEL-LABEL: v_rsq_f64_missing_contract1:
1372 ; VI-GISEL: ; %bb.0:
1373 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1374 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
1375 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
1376 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1377 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
1378 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
1379 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1380 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1381 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
1382 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
1383 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1384 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1385 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1386 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1387 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1388 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1389 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1390 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
1391 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
1392 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
1393 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
1394 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1395 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1396 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1397 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
1398 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1399 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1400 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1401 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
1402 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1403 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1404 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1405 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1406 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1407 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
1408 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
1409 %sqrt = call contract double @llvm.sqrt.f64(double %x)
1410 %rsq = fdiv double 1.0, %sqrt
1414 define double @v_neg_rsq_f64(double %x) {
1415 ; SI-SDAG-LABEL: v_neg_rsq_f64:
1417 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1418 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
1419 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
1420 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1421 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
1422 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
1423 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
1424 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1425 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
1426 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1427 ; SI-SDAG-NEXT: s_mov_b32 s6, 0xbff00000
1428 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
1429 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
1430 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1431 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1432 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1433 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1434 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1435 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1436 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1437 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
1438 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1439 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
1440 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1441 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1442 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
1443 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1444 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
1445 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1446 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1447 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], -1.0, v[0:1], -1.0
1448 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1449 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1450 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
1451 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1452 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
1453 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1454 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1455 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
1456 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
1458 ; SI-GISEL-LABEL: v_neg_rsq_f64:
1459 ; SI-GISEL: ; %bb.0:
1460 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1461 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
1462 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
1463 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1464 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
1465 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
1466 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1467 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
1468 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1469 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
1470 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0xbff00000
1471 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
1472 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
1473 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1474 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1475 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1476 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1477 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1478 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1479 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1480 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
1481 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1482 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
1483 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1484 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1485 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
1486 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], -1.0, v[0:1], -1.0
1487 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1488 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
1489 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
1490 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1491 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1492 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1493 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1494 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1495 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
1496 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
1497 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
1498 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
1499 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
1501 ; VI-SDAG-LABEL: v_neg_rsq_f64:
1503 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1504 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
1505 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
1506 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1507 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
1508 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
1509 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1510 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1511 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
1512 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
1513 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
1514 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1515 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1516 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1517 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
1518 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
1519 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
1520 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
1521 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
1522 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
1523 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
1524 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1525 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1526 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1527 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
1528 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1529 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1530 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1531 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
1532 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1533 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1534 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1535 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1536 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1537 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
1538 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
1540 ; VI-GISEL-LABEL: v_neg_rsq_f64:
1541 ; VI-GISEL: ; %bb.0:
1542 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1543 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
1544 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
1545 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
1546 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
1547 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
1548 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
1549 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
1550 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
1551 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
1552 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
1553 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
1554 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1555 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1556 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1557 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
1558 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
1559 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
1560 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
1561 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
1562 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
1563 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1564 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
1565 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
1566 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
1567 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
1568 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
1569 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
1570 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
1571 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
1572 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1573 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
1574 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
1575 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
1576 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
1577 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
1578 %sqrt = call contract double @llvm.sqrt.f64(double %x)
1579 %rsq = fdiv contract double -1.0, %sqrt
1583 define <2 x double> @v_rsq_v2f64(<2 x double> %x) {
1584 ; SI-SDAG-LABEL: v_rsq_v2f64:
1586 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1587 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
1588 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
1589 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
1590 ; SI-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
1591 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
1592 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v6, 0, 1, s[4:5]
1593 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v6, 8, v6
1594 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v6
1595 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
1596 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[0:1]
1597 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1598 ; SI-SDAG-NEXT: s_mov_b32 s6, 0x3ff00000
1599 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
1600 ; SI-SDAG-NEXT: v_mul_f64 v[10:11], v[0:1], v[6:7]
1601 ; SI-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.5
1602 ; SI-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
1603 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[2:3], v[4:5]
1604 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1605 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
1606 ; SI-SDAG-NEXT: v_fma_f64 v[18:19], -v[10:11], v[10:11], v[0:1]
1607 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1608 ; SI-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
1609 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], v[18:19], v[6:7], v[10:11]
1610 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1611 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1612 ; SI-SDAG-NEXT: v_fma_f64 v[12:13], -v[10:11], v[10:11], v[0:1]
1613 ; SI-SDAG-NEXT: v_mov_b32_e32 v14, 0xffffff80
1614 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[12:13], v[6:7], v[10:11]
1615 ; SI-SDAG-NEXT: v_mov_b32_e32 v15, 0x260
1616 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v10, 0, v14, s[4:5]
1617 ; SI-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v10
1618 ; SI-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[0:1], v15
1619 ; SI-SDAG-NEXT: v_fma_f64 v[16:17], -v[8:9], v[8:9], v[2:3]
1620 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, v7, v1, s[4:5]
1621 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v6, v0, s[4:5]
1622 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[0:1], v[0:1], 1.0
1623 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], v[16:17], v[4:5], v[8:9]
1624 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[8:9], v[8:9], v[2:3]
1625 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[12:13], v[6:7]
1626 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[10:11], v[4:5], v[8:9]
1627 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v8, 0, v14, vcc
1628 ; SI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v8
1629 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v15
1630 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[12:13], 1.0
1631 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
1632 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
1633 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[12:13]
1634 ; SI-SDAG-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], 1.0
1635 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[6:7], v[8:9], 1.0
1636 ; SI-SDAG-NEXT: v_div_scale_f64 v[12:13], s[4:5], 1.0, v[0:1], 1.0
1637 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[8:9]
1638 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[8:9], v[10:11]
1639 ; SI-SDAG-NEXT: v_mul_f64 v[14:15], v[12:13], v[4:5]
1640 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v7
1641 ; SI-SDAG-NEXT: v_fma_f64 v[16:17], -v[6:7], v[14:15], v[12:13]
1642 ; SI-SDAG-NEXT: v_fma_f64 v[18:19], -v[10:11], v[8:9], 1.0
1643 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[8:9], v[18:19], v[8:9]
1644 ; SI-SDAG-NEXT: v_div_scale_f64 v[18:19], s[4:5], 1.0, v[2:3], 1.0
1645 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[10:11], v[6:7], 1.0
1646 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v13
1647 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
1648 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
1649 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[18:19], v[6:7]
1650 ; SI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
1651 ; SI-SDAG-NEXT: v_fma_f64 v[12:13], -v[10:11], v[8:9], v[18:19]
1652 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v3, v11
1653 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v19
1654 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
1655 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1656 ; SI-SDAG-NEXT: s_nop 0
1657 ; SI-SDAG-NEXT: v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[8:9]
1658 ; SI-SDAG-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1659 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
1661 ; SI-GISEL-LABEL: v_rsq_v2f64:
1662 ; SI-GISEL: ; %bb.0:
1663 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1664 ; SI-GISEL-NEXT: s_mov_b32 s4, 0
1665 ; SI-GISEL-NEXT: s_brev_b32 s5, 8
1666 ; SI-GISEL-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1667 ; SI-GISEL-NEXT: v_mov_b32_e32 v12, 0x100
1668 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v12, vcc
1669 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v4
1670 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, s4
1671 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]
1672 ; SI-GISEL-NEXT: v_mov_b32_e32 v11, s5
1673 ; SI-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[10:11]
1674 ; SI-GISEL-NEXT: v_mov_b32_e32 v14, 0xffffff80
1675 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
1676 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]
1677 ; SI-GISEL-NEXT: v_mov_b32_e32 v15, 0x260
1678 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
1679 ; SI-GISEL-NEXT: v_mov_b32_e32 v20, 0x3ff00000
1680 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1681 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
1682 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
1683 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
1684 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
1685 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
1686 ; SI-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v12, s[4:5]
1687 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v6
1688 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v8, 0, v14, vcc
1689 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]
1690 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v8
1691 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v15
1692 ; SI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], 0.5
1693 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]
1694 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
1695 ; SI-GISEL-NEXT: v_fma_f64 v[10:11], -v[8:9], v[6:7], 0.5
1696 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
1697 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[6:7], v[10:11], v[6:7]
1698 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[8:9], v[10:11], v[8:9]
1699 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
1700 ; SI-GISEL-NEXT: v_div_scale_f64 v[10:11], s[6:7], v[0:1], v[0:1], 1.0
1701 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
1702 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v15
1703 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
1704 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[12:13], v[10:11]
1705 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
1706 ; SI-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v14, s[4:5]
1707 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
1708 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[10:11], v[12:13], 1.0
1709 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
1710 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
1711 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[12:13], v[6:7], v[12:13]
1712 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[2:3], v[2:3], 1.0
1713 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[10:11], v[6:7], 1.0
1714 ; SI-GISEL-NEXT: v_div_scale_f64 v[12:13], s[4:5], 1.0, v[0:1], 1.0
1715 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[6:7]
1716 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[8:9]
1717 ; SI-GISEL-NEXT: v_mul_f64 v[14:15], v[12:13], v[4:5]
1718 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v20, v13
1719 ; SI-GISEL-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], v[12:13]
1720 ; SI-GISEL-NEXT: v_fma_f64 v[18:19], -v[8:9], v[6:7], 1.0
1721 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[18:19], v[6:7]
1722 ; SI-GISEL-NEXT: v_div_scale_f64 v[18:19], s[4:5], 1.0, v[2:3], 1.0
1723 ; SI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[6:7], 1.0
1724 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v11
1725 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
1726 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1727 ; SI-GISEL-NEXT: v_mul_f64 v[10:11], v[18:19], v[6:7]
1728 ; SI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
1729 ; SI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], v[18:19]
1730 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v20, v19
1731 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v9
1732 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1733 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1734 ; SI-GISEL-NEXT: s_nop 0
1735 ; SI-GISEL-NEXT: v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[10:11]
1736 ; SI-GISEL-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1737 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
1739 ; VI-SDAG-LABEL: v_rsq_v2f64:
1741 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1742 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
1743 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
1744 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
1745 ; VI-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
1746 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
1747 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
1748 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1749 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]
1750 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
1751 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v4
1752 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
1753 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[0:1]
1754 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[2:3], v[4:5]
1755 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
1756 ; VI-SDAG-NEXT: v_mul_f64 v[10:11], v[0:1], v[6:7]
1757 ; VI-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.5
1758 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
1759 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
1760 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1761 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1762 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1763 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1764 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
1765 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
1766 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
1767 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
1768 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
1769 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
1770 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
1771 ; VI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
1772 ; VI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
1773 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
1774 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc
1775 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]
1776 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
1777 ; VI-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v9
1778 ; VI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v10
1779 ; VI-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v8
1780 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v3, v5, v3, s[4:5]
1781 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, v4, v2, s[4:5]
1782 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v7, v1, vcc
1783 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v6, v0, vcc
1784 ; VI-SDAG-NEXT: v_div_scale_f64 v[5:6], s[6:7], v[0:1], v[0:1], 1.0
1785 ; VI-SDAG-NEXT: v_div_scale_f64 v[7:8], s[4:5], v[2:3], v[2:3], 1.0
1786 ; VI-SDAG-NEXT: v_div_scale_f64 v[17:18], s[4:5], 1.0, v[2:3], 1.0
1787 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[9:10], v[5:6]
1788 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[11:12], v[7:8]
1789 ; VI-SDAG-NEXT: v_fma_f64 v[13:14], -v[5:6], v[9:10], 1.0
1790 ; VI-SDAG-NEXT: v_fma_f64 v[15:16], -v[7:8], v[11:12], 1.0
1791 ; VI-SDAG-NEXT: v_fma_f64 v[9:10], v[9:10], v[13:14], v[9:10]
1792 ; VI-SDAG-NEXT: v_div_scale_f64 v[13:14], vcc, 1.0, v[0:1], 1.0
1793 ; VI-SDAG-NEXT: v_fma_f64 v[11:12], v[11:12], v[15:16], v[11:12]
1794 ; VI-SDAG-NEXT: v_fma_f64 v[15:16], -v[5:6], v[9:10], 1.0
1795 ; VI-SDAG-NEXT: v_fma_f64 v[19:20], -v[7:8], v[11:12], 1.0
1796 ; VI-SDAG-NEXT: v_fma_f64 v[9:10], v[9:10], v[15:16], v[9:10]
1797 ; VI-SDAG-NEXT: v_fma_f64 v[11:12], v[11:12], v[19:20], v[11:12]
1798 ; VI-SDAG-NEXT: v_mul_f64 v[15:16], v[13:14], v[9:10]
1799 ; VI-SDAG-NEXT: v_mul_f64 v[19:20], v[17:18], v[11:12]
1800 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[5:6], v[15:16], v[13:14]
1801 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[7:8], v[19:20], v[17:18]
1802 ; VI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[9:10], v[15:16]
1803 ; VI-SDAG-NEXT: s_mov_b64 vcc, s[4:5]
1804 ; VI-SDAG-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[11:12], v[19:20]
1805 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1806 ; VI-SDAG-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1807 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
1809 ; VI-GISEL-LABEL: v_rsq_v2f64:
1810 ; VI-GISEL: ; %bb.0:
1811 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1812 ; VI-GISEL-NEXT: s_mov_b32 s4, 0
1813 ; VI-GISEL-NEXT: s_brev_b32 s5, 8
1814 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, s4
1815 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, s5
1816 ; VI-GISEL-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1817 ; VI-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
1818 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
1819 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc
1820 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v7
1821 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v6, s[4:5]
1822 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1823 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]
1824 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]
1825 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.5
1826 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]
1827 ; VI-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.5
1828 ; VI-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]
1829 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
1830 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
1831 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1832 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1833 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1834 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1835 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
1836 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
1837 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
1838 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
1839 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
1840 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
1841 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
1842 ; VI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
1843 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
1844 ; VI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
1845 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc
1846 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
1847 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]
1848 ; VI-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v9
1849 ; VI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v10
1850 ; VI-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v8
1851 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
1852 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
1853 ; VI-GISEL-NEXT: v_div_scale_f64 v[4:5], s[6:7], v[0:1], v[0:1], 1.0
1854 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]
1855 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]
1856 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0
1857 ; VI-GISEL-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1858 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1859 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1860 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1861 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1862 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1863 ; VI-GISEL-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0
1864 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1865 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
1866 ; VI-GISEL-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
1867 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
1868 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
1869 ; VI-GISEL-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9]
1870 ; VI-GISEL-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11]
1871 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
1872 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
1873 ; VI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1874 ; VI-GISEL-NEXT: s_mov_b64 vcc, s[4:5]
1875 ; VI-GISEL-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1876 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1877 ; VI-GISEL-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1878 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
1879 %sqrt = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
1880 %rsq = fdiv <2 x double> <double 1.0, double 1.0>, %sqrt
1881 ret <2 x double> %rsq
1884 define <2 x double> @v_neg_rsq_v2f64(<2 x double> %x) {
1885 ; SI-SDAG-LABEL: v_neg_rsq_v2f64:
1887 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1888 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
1889 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
1890 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
1891 ; SI-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
1892 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
1893 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v6, 0, 1, s[4:5]
1894 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v6, 8, v6
1895 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v6
1896 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
1897 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[0:1]
1898 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
1899 ; SI-SDAG-NEXT: s_mov_b32 s6, 0xbff00000
1900 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
1901 ; SI-SDAG-NEXT: v_mul_f64 v[10:11], v[0:1], v[6:7]
1902 ; SI-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.5
1903 ; SI-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
1904 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[2:3], v[4:5]
1905 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1906 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
1907 ; SI-SDAG-NEXT: v_fma_f64 v[18:19], -v[10:11], v[10:11], v[0:1]
1908 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1909 ; SI-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
1910 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], v[18:19], v[6:7], v[10:11]
1911 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1912 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1913 ; SI-SDAG-NEXT: v_fma_f64 v[12:13], -v[10:11], v[10:11], v[0:1]
1914 ; SI-SDAG-NEXT: v_mov_b32_e32 v14, 0xffffff80
1915 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[12:13], v[6:7], v[10:11]
1916 ; SI-SDAG-NEXT: v_mov_b32_e32 v15, 0x260
1917 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v10, 0, v14, s[4:5]
1918 ; SI-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v10
1919 ; SI-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[0:1], v15
1920 ; SI-SDAG-NEXT: v_fma_f64 v[16:17], -v[8:9], v[8:9], v[2:3]
1921 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, v7, v1, s[4:5]
1922 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v6, v0, s[4:5]
1923 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[0:1], v[0:1], -1.0
1924 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], v[16:17], v[4:5], v[8:9]
1925 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[8:9], v[8:9], v[2:3]
1926 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[12:13], v[6:7]
1927 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[10:11], v[4:5], v[8:9]
1928 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v8, 0, v14, vcc
1929 ; SI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v8
1930 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v15
1931 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[12:13], 1.0
1932 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
1933 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
1934 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[12:13]
1935 ; SI-SDAG-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], -1.0
1936 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[6:7], v[8:9], 1.0
1937 ; SI-SDAG-NEXT: v_div_scale_f64 v[12:13], s[4:5], -1.0, v[0:1], -1.0
1938 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[8:9]
1939 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[8:9], v[10:11]
1940 ; SI-SDAG-NEXT: v_mul_f64 v[14:15], v[12:13], v[4:5]
1941 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v7
1942 ; SI-SDAG-NEXT: v_fma_f64 v[16:17], -v[6:7], v[14:15], v[12:13]
1943 ; SI-SDAG-NEXT: v_fma_f64 v[18:19], -v[10:11], v[8:9], 1.0
1944 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[8:9], v[18:19], v[8:9]
1945 ; SI-SDAG-NEXT: v_div_scale_f64 v[18:19], s[4:5], -1.0, v[2:3], -1.0
1946 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[10:11], v[6:7], 1.0
1947 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v13
1948 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
1949 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
1950 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[18:19], v[6:7]
1951 ; SI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
1952 ; SI-SDAG-NEXT: v_fma_f64 v[12:13], -v[10:11], v[8:9], v[18:19]
1953 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v3, v11
1954 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v19
1955 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
1956 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
1957 ; SI-SDAG-NEXT: s_nop 0
1958 ; SI-SDAG-NEXT: v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[8:9]
1959 ; SI-SDAG-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], -1.0
1960 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
1962 ; SI-GISEL-LABEL: v_neg_rsq_v2f64:
1963 ; SI-GISEL: ; %bb.0:
1964 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1965 ; SI-GISEL-NEXT: s_mov_b32 s4, 0
1966 ; SI-GISEL-NEXT: s_brev_b32 s5, 8
1967 ; SI-GISEL-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1968 ; SI-GISEL-NEXT: v_mov_b32_e32 v12, 0x100
1969 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v12, vcc
1970 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v4
1971 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, s4
1972 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]
1973 ; SI-GISEL-NEXT: v_mov_b32_e32 v11, s5
1974 ; SI-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[10:11]
1975 ; SI-GISEL-NEXT: v_mov_b32_e32 v14, 0xffffff80
1976 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
1977 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]
1978 ; SI-GISEL-NEXT: v_mov_b32_e32 v15, 0x260
1979 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
1980 ; SI-GISEL-NEXT: v_mov_b32_e32 v20, 0xbff00000
1981 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1982 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
1983 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
1984 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
1985 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
1986 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
1987 ; SI-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v12, s[4:5]
1988 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v6
1989 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v8, 0, v14, vcc
1990 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]
1991 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v8
1992 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v15
1993 ; SI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], 0.5
1994 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]
1995 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
1996 ; SI-GISEL-NEXT: v_fma_f64 v[10:11], -v[8:9], v[6:7], 0.5
1997 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
1998 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[6:7], v[10:11], v[6:7]
1999 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[8:9], v[10:11], v[8:9]
2000 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2001 ; SI-GISEL-NEXT: v_div_scale_f64 v[10:11], s[6:7], v[0:1], v[0:1], -1.0
2002 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2003 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v15
2004 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2005 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[12:13], v[10:11]
2006 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2007 ; SI-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v14, s[4:5]
2008 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
2009 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[10:11], v[12:13], 1.0
2010 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
2011 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
2012 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[12:13], v[6:7], v[12:13]
2013 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[2:3], v[2:3], -1.0
2014 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[10:11], v[6:7], 1.0
2015 ; SI-GISEL-NEXT: v_div_scale_f64 v[12:13], s[4:5], -1.0, v[0:1], -1.0
2016 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[6:7]
2017 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[8:9]
2018 ; SI-GISEL-NEXT: v_mul_f64 v[14:15], v[12:13], v[4:5]
2019 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v20, v13
2020 ; SI-GISEL-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], v[12:13]
2021 ; SI-GISEL-NEXT: v_fma_f64 v[18:19], -v[8:9], v[6:7], 1.0
2022 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[18:19], v[6:7]
2023 ; SI-GISEL-NEXT: v_div_scale_f64 v[18:19], s[4:5], -1.0, v[2:3], -1.0
2024 ; SI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[6:7], 1.0
2025 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v11
2026 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
2027 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
2028 ; SI-GISEL-NEXT: v_mul_f64 v[10:11], v[18:19], v[6:7]
2029 ; SI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
2030 ; SI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], v[18:19]
2031 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v20, v19
2032 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v9
2033 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
2034 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2035 ; SI-GISEL-NEXT: s_nop 0
2036 ; SI-GISEL-NEXT: v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[10:11]
2037 ; SI-GISEL-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], -1.0
2038 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
2040 ; VI-SDAG-LABEL: v_neg_rsq_v2f64:
2042 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2043 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
2044 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
2045 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
2046 ; VI-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
2047 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
2048 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
2049 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2050 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2051 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
2052 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v4
2053 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
2054 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[0:1]
2055 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[2:3], v[4:5]
2056 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
2057 ; VI-SDAG-NEXT: v_mul_f64 v[10:11], v[0:1], v[6:7]
2058 ; VI-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.5
2059 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
2060 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
2061 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2062 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2063 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2064 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2065 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
2066 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
2067 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
2068 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
2069 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
2070 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
2071 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
2072 ; VI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
2073 ; VI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
2074 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
2075 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc
2076 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]
2077 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
2078 ; VI-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v9
2079 ; VI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v10
2080 ; VI-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v8
2081 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v3, v5, v3, s[4:5]
2082 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, v4, v2, s[4:5]
2083 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v7, v1, vcc
2084 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v6, v0, vcc
2085 ; VI-SDAG-NEXT: v_div_scale_f64 v[5:6], s[6:7], v[0:1], v[0:1], -1.0
2086 ; VI-SDAG-NEXT: v_div_scale_f64 v[7:8], s[4:5], v[2:3], v[2:3], -1.0
2087 ; VI-SDAG-NEXT: v_div_scale_f64 v[17:18], s[4:5], -1.0, v[2:3], -1.0
2088 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[9:10], v[5:6]
2089 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[11:12], v[7:8]
2090 ; VI-SDAG-NEXT: v_fma_f64 v[13:14], -v[5:6], v[9:10], 1.0
2091 ; VI-SDAG-NEXT: v_fma_f64 v[15:16], -v[7:8], v[11:12], 1.0
2092 ; VI-SDAG-NEXT: v_fma_f64 v[9:10], v[9:10], v[13:14], v[9:10]
2093 ; VI-SDAG-NEXT: v_div_scale_f64 v[13:14], vcc, -1.0, v[0:1], -1.0
2094 ; VI-SDAG-NEXT: v_fma_f64 v[11:12], v[11:12], v[15:16], v[11:12]
2095 ; VI-SDAG-NEXT: v_fma_f64 v[15:16], -v[5:6], v[9:10], 1.0
2096 ; VI-SDAG-NEXT: v_fma_f64 v[19:20], -v[7:8], v[11:12], 1.0
2097 ; VI-SDAG-NEXT: v_fma_f64 v[9:10], v[9:10], v[15:16], v[9:10]
2098 ; VI-SDAG-NEXT: v_fma_f64 v[11:12], v[11:12], v[19:20], v[11:12]
2099 ; VI-SDAG-NEXT: v_mul_f64 v[15:16], v[13:14], v[9:10]
2100 ; VI-SDAG-NEXT: v_mul_f64 v[19:20], v[17:18], v[11:12]
2101 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[5:6], v[15:16], v[13:14]
2102 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[7:8], v[19:20], v[17:18]
2103 ; VI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[9:10], v[15:16]
2104 ; VI-SDAG-NEXT: s_mov_b64 vcc, s[4:5]
2105 ; VI-SDAG-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[11:12], v[19:20]
2106 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2107 ; VI-SDAG-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], -1.0
2108 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
2110 ; VI-GISEL-LABEL: v_neg_rsq_v2f64:
2111 ; VI-GISEL: ; %bb.0:
2112 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2113 ; VI-GISEL-NEXT: s_mov_b32 s4, 0
2114 ; VI-GISEL-NEXT: s_brev_b32 s5, 8
2115 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, s4
2116 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, s5
2117 ; VI-GISEL-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2118 ; VI-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
2119 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
2120 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc
2121 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v7
2122 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v6, s[4:5]
2123 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2124 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]
2125 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]
2126 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.5
2127 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]
2128 ; VI-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.5
2129 ; VI-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]
2130 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
2131 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
2132 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2133 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2134 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2135 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2136 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2137 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2138 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2139 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2140 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2141 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2142 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2143 ; VI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
2144 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2145 ; VI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
2146 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc
2147 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
2148 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]
2149 ; VI-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v9
2150 ; VI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v10
2151 ; VI-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v8
2152 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
2153 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
2154 ; VI-GISEL-NEXT: v_div_scale_f64 v[4:5], s[6:7], v[0:1], v[0:1], -1.0
2155 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]
2156 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]
2157 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], -1.0
2158 ; VI-GISEL-NEXT: v_div_scale_f64 v[16:17], s[4:5], -1.0, v[2:3], -1.0
2159 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
2160 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
2161 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
2162 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
2163 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2164 ; VI-GISEL-NEXT: v_div_scale_f64 v[12:13], vcc, -1.0, v[0:1], -1.0
2165 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2166 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
2167 ; VI-GISEL-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
2168 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
2169 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
2170 ; VI-GISEL-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9]
2171 ; VI-GISEL-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11]
2172 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
2173 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
2174 ; VI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
2175 ; VI-GISEL-NEXT: s_mov_b64 vcc, s[4:5]
2176 ; VI-GISEL-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
2177 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2178 ; VI-GISEL-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], -1.0
2179 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
2180 %sqrt = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
2181 %rsq = fdiv <2 x double> <double -1.0, double -1.0>, %sqrt
2182 ret <2 x double> %rsq
2185 define <2 x double> @v_neg_rsq_v2f64_poisonelt(<2 x double> %x) {
2186 ; SI-SDAG-LABEL: v_neg_rsq_v2f64_poisonelt:
2188 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2189 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
2190 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
2191 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2192 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
2193 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
2194 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
2195 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
2196 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
2197 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
2198 ; SI-SDAG-NEXT: s_mov_b32 s6, 0xbff00000
2199 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
2200 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
2201 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2202 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2203 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2204 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2205 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
2206 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2207 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
2208 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
2209 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2210 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
2211 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
2212 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
2213 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
2214 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
2215 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
2216 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2217 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2218 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], -1.0, v[0:1], -1.0
2219 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2220 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2221 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
2222 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
2223 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
2224 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2225 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2226 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
2227 ; SI-SDAG-NEXT: v_mov_b32_e32 v2, 0
2228 ; SI-SDAG-NEXT: v_mov_b32_e32 v3, 0x7ff80000
2229 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
2231 ; SI-GISEL-LABEL: v_neg_rsq_v2f64_poisonelt:
2232 ; SI-GISEL: ; %bb.0:
2233 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2234 ; SI-GISEL-NEXT: s_mov_b32 s4, 0
2235 ; SI-GISEL-NEXT: s_brev_b32 s5, 8
2236 ; SI-GISEL-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2237 ; SI-GISEL-NEXT: v_mov_b32_e32 v12, 0x100
2238 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v12, vcc
2239 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v4
2240 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, s4
2241 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]
2242 ; SI-GISEL-NEXT: v_mov_b32_e32 v11, s5
2243 ; SI-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[10:11]
2244 ; SI-GISEL-NEXT: v_mov_b32_e32 v14, 0xffffff80
2245 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
2246 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]
2247 ; SI-GISEL-NEXT: v_mov_b32_e32 v15, 0x260
2248 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
2249 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2250 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
2251 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
2252 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2253 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
2254 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2255 ; SI-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v12, s[4:5]
2256 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v6
2257 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v8, 0, v14, vcc
2258 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]
2259 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v8
2260 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v15
2261 ; SI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], 0.5
2262 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]
2263 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
2264 ; SI-GISEL-NEXT: v_fma_f64 v[10:11], -v[8:9], v[6:7], 0.5
2265 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
2266 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[6:7], v[10:11], v[6:7]
2267 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[8:9], v[10:11], v[8:9]
2268 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2269 ; SI-GISEL-NEXT: v_div_scale_f64 v[10:11], s[6:7], v[0:1], v[0:1], -1.0
2270 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2271 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v15
2272 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2273 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[12:13], v[10:11]
2274 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2275 ; SI-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v14, s[4:5]
2276 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
2277 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[10:11], v[12:13], 1.0
2278 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
2279 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
2280 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[12:13], v[6:7], v[12:13]
2281 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[2:3], v[2:3], s[4:5]
2282 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[10:11], v[6:7], 1.0
2283 ; SI-GISEL-NEXT: v_div_scale_f64 v[12:13], s[4:5], -1.0, v[0:1], -1.0
2284 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[6:7]
2285 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[8:9]
2286 ; SI-GISEL-NEXT: v_mul_f64 v[14:15], v[12:13], v[4:5]
2287 ; SI-GISEL-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], v[12:13]
2288 ; SI-GISEL-NEXT: v_fma_f64 v[18:19], -v[8:9], v[6:7], 1.0
2289 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0xbff00000
2290 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[18:19], v[6:7]
2291 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v13
2292 ; SI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[6:7], 1.0
2293 ; SI-GISEL-NEXT: v_div_scale_f64 v[18:19], s[4:5], s[4:5], v[2:3], s[4:5]
2294 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
2295 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v11
2296 ; SI-GISEL-NEXT: v_mul_f64 v[10:11], v[18:19], v[6:7]
2297 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
2298 ; SI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
2299 ; SI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], v[18:19]
2300 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, s4, v19
2301 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v9
2302 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
2303 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2304 ; SI-GISEL-NEXT: s_nop 0
2305 ; SI-GISEL-NEXT: v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[10:11]
2306 ; SI-GISEL-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], s[4:5]
2307 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
2309 ; VI-SDAG-LABEL: v_neg_rsq_v2f64_poisonelt:
2311 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2312 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
2313 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
2314 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2315 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
2316 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
2317 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
2318 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
2319 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
2320 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
2321 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2322 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2323 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2324 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2325 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
2326 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2327 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
2328 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
2329 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
2330 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
2331 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
2332 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2333 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
2334 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
2335 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
2336 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
2337 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2338 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2339 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
2340 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2341 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2342 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
2343 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2344 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2345 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
2346 ; VI-SDAG-NEXT: v_mov_b32_e32 v2, 0
2347 ; VI-SDAG-NEXT: v_mov_b32_e32 v3, 0x7ff80000
2348 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
2350 ; VI-GISEL-LABEL: v_neg_rsq_v2f64_poisonelt:
2351 ; VI-GISEL: ; %bb.0:
2352 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2353 ; VI-GISEL-NEXT: s_mov_b32 s4, 0
2354 ; VI-GISEL-NEXT: s_brev_b32 s5, 8
2355 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, s4
2356 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, s5
2357 ; VI-GISEL-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2358 ; VI-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
2359 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
2360 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc
2361 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v7
2362 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v6, s[4:5]
2363 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2364 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]
2365 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]
2366 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.5
2367 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]
2368 ; VI-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.5
2369 ; VI-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]
2370 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
2371 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
2372 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2373 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2374 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2375 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2376 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2377 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2378 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2379 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2380 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2381 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2382 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2383 ; VI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
2384 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2385 ; VI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
2386 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc
2387 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
2388 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]
2389 ; VI-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v9
2390 ; VI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v10
2391 ; VI-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v8
2392 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
2393 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
2394 ; VI-GISEL-NEXT: v_div_scale_f64 v[4:5], s[6:7], v[0:1], v[0:1], -1.0
2395 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]
2396 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]
2397 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], s[4:5]
2398 ; VI-GISEL-NEXT: v_div_scale_f64 v[16:17], s[4:5], s[4:5], v[2:3], s[4:5]
2399 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
2400 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
2401 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
2402 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
2403 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2404 ; VI-GISEL-NEXT: v_div_scale_f64 v[12:13], vcc, -1.0, v[0:1], -1.0
2405 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2406 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
2407 ; VI-GISEL-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
2408 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
2409 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
2410 ; VI-GISEL-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9]
2411 ; VI-GISEL-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11]
2412 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
2413 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
2414 ; VI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
2415 ; VI-GISEL-NEXT: s_mov_b64 vcc, s[4:5]
2416 ; VI-GISEL-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
2417 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2418 ; VI-GISEL-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], s[4:5]
2419 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
2420 %sqrt = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
2421 %rsq = fdiv <2 x double> <double -1.0, double poison>, %sqrt
2422 ret <2 x double> %rsq
2425 define <2 x double> @v_neg_pos_rsq_v2f64(<2 x double> %x) {
2426 ; SI-SDAG-LABEL: v_neg_pos_rsq_v2f64:
2428 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2429 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
2430 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
2431 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
2432 ; SI-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
2433 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
2434 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v6, 0, 1, s[4:5]
2435 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v6, 8, v6
2436 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v6
2437 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
2438 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[0:1]
2439 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2440 ; SI-SDAG-NEXT: s_mov_b32 s6, 0xbff00000
2441 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
2442 ; SI-SDAG-NEXT: v_mul_f64 v[10:11], v[0:1], v[6:7]
2443 ; SI-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.5
2444 ; SI-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
2445 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[2:3], v[4:5]
2446 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2447 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
2448 ; SI-SDAG-NEXT: v_fma_f64 v[18:19], -v[10:11], v[10:11], v[0:1]
2449 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2450 ; SI-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
2451 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], v[18:19], v[6:7], v[10:11]
2452 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2453 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2454 ; SI-SDAG-NEXT: v_fma_f64 v[12:13], -v[10:11], v[10:11], v[0:1]
2455 ; SI-SDAG-NEXT: v_mov_b32_e32 v14, 0xffffff80
2456 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[12:13], v[6:7], v[10:11]
2457 ; SI-SDAG-NEXT: v_mov_b32_e32 v15, 0x260
2458 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v10, 0, v14, s[4:5]
2459 ; SI-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v10
2460 ; SI-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[0:1], v15
2461 ; SI-SDAG-NEXT: v_fma_f64 v[16:17], -v[8:9], v[8:9], v[2:3]
2462 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, v7, v1, s[4:5]
2463 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v6, v0, s[4:5]
2464 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[0:1], v[0:1], -1.0
2465 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], v[16:17], v[4:5], v[8:9]
2466 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[8:9], v[8:9], v[2:3]
2467 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[12:13], v[6:7]
2468 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[10:11], v[4:5], v[8:9]
2469 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v8, 0, v14, vcc
2470 ; SI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v8
2471 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v15
2472 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[12:13], 1.0
2473 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
2474 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
2475 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[12:13]
2476 ; SI-SDAG-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], 1.0
2477 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[6:7], v[8:9], 1.0
2478 ; SI-SDAG-NEXT: v_div_scale_f64 v[12:13], s[4:5], -1.0, v[0:1], -1.0
2479 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[8:9]
2480 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[8:9], v[10:11]
2481 ; SI-SDAG-NEXT: v_mul_f64 v[14:15], v[12:13], v[4:5]
2482 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v7
2483 ; SI-SDAG-NEXT: v_fma_f64 v[16:17], -v[6:7], v[14:15], v[12:13]
2484 ; SI-SDAG-NEXT: v_fma_f64 v[18:19], -v[10:11], v[8:9], 1.0
2485 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[8:9], v[18:19], v[8:9]
2486 ; SI-SDAG-NEXT: v_div_scale_f64 v[18:19], s[4:5], 1.0, v[2:3], 1.0
2487 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[10:11], v[6:7], 1.0
2488 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v13
2489 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
2490 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
2491 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[18:19], v[6:7]
2492 ; SI-SDAG-NEXT: s_mov_b32 s4, 0x3ff00000
2493 ; SI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
2494 ; SI-SDAG-NEXT: v_fma_f64 v[12:13], -v[10:11], v[8:9], v[18:19]
2495 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v3, v11
2496 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s4, v19
2497 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
2498 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2499 ; SI-SDAG-NEXT: s_nop 0
2500 ; SI-SDAG-NEXT: v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[8:9]
2501 ; SI-SDAG-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
2502 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
2504 ; SI-GISEL-LABEL: v_neg_pos_rsq_v2f64:
2505 ; SI-GISEL: ; %bb.0:
2506 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2507 ; SI-GISEL-NEXT: s_mov_b32 s4, 0
2508 ; SI-GISEL-NEXT: s_brev_b32 s5, 8
2509 ; SI-GISEL-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2510 ; SI-GISEL-NEXT: v_mov_b32_e32 v12, 0x100
2511 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v12, vcc
2512 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v4
2513 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, s4
2514 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]
2515 ; SI-GISEL-NEXT: v_mov_b32_e32 v11, s5
2516 ; SI-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[10:11]
2517 ; SI-GISEL-NEXT: v_mov_b32_e32 v14, 0xffffff80
2518 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
2519 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]
2520 ; SI-GISEL-NEXT: v_mov_b32_e32 v15, 0x260
2521 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
2522 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2523 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
2524 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
2525 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2526 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
2527 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2528 ; SI-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v12, s[4:5]
2529 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v6
2530 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v8, 0, v14, vcc
2531 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]
2532 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v8
2533 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v15
2534 ; SI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], 0.5
2535 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]
2536 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
2537 ; SI-GISEL-NEXT: v_fma_f64 v[10:11], -v[8:9], v[6:7], 0.5
2538 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
2539 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[6:7], v[10:11], v[6:7]
2540 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[8:9], v[10:11], v[8:9]
2541 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2542 ; SI-GISEL-NEXT: v_div_scale_f64 v[10:11], s[6:7], v[0:1], v[0:1], -1.0
2543 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2544 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v15
2545 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2546 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[12:13], v[10:11]
2547 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2548 ; SI-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v14, s[4:5]
2549 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
2550 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[10:11], v[12:13], 1.0
2551 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
2552 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
2553 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[12:13], v[6:7], v[12:13]
2554 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[2:3], v[2:3], 1.0
2555 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[10:11], v[6:7], 1.0
2556 ; SI-GISEL-NEXT: v_div_scale_f64 v[12:13], s[4:5], -1.0, v[0:1], -1.0
2557 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[6:7]
2558 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[8:9]
2559 ; SI-GISEL-NEXT: v_mul_f64 v[14:15], v[12:13], v[4:5]
2560 ; SI-GISEL-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], v[12:13]
2561 ; SI-GISEL-NEXT: v_fma_f64 v[18:19], -v[8:9], v[6:7], 1.0
2562 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0xbff00000
2563 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[18:19], v[6:7]
2564 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v13
2565 ; SI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[6:7], 1.0
2566 ; SI-GISEL-NEXT: v_div_scale_f64 v[18:19], s[4:5], 1.0, v[2:3], 1.0
2567 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
2568 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v11
2569 ; SI-GISEL-NEXT: v_mul_f64 v[10:11], v[18:19], v[6:7]
2570 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
2571 ; SI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], v[18:19]
2572 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0x3ff00000
2573 ; SI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
2574 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v8, v19
2575 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v9
2576 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
2577 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2578 ; SI-GISEL-NEXT: s_nop 0
2579 ; SI-GISEL-NEXT: v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[10:11]
2580 ; SI-GISEL-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
2581 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
2583 ; VI-SDAG-LABEL: v_neg_pos_rsq_v2f64:
2585 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2586 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
2587 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
2588 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
2589 ; VI-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
2590 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
2591 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
2592 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2593 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2594 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
2595 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v4
2596 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
2597 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[0:1]
2598 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[2:3], v[4:5]
2599 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
2600 ; VI-SDAG-NEXT: v_mul_f64 v[10:11], v[0:1], v[6:7]
2601 ; VI-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.5
2602 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
2603 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
2604 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2605 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2606 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2607 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2608 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
2609 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
2610 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
2611 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
2612 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
2613 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
2614 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
2615 ; VI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
2616 ; VI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
2617 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
2618 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc
2619 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]
2620 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
2621 ; VI-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v9
2622 ; VI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v10
2623 ; VI-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v8
2624 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v3, v5, v3, s[4:5]
2625 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, v4, v2, s[4:5]
2626 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v7, v1, vcc
2627 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v6, v0, vcc
2628 ; VI-SDAG-NEXT: v_div_scale_f64 v[5:6], s[6:7], v[0:1], v[0:1], -1.0
2629 ; VI-SDAG-NEXT: v_div_scale_f64 v[7:8], s[4:5], v[2:3], v[2:3], 1.0
2630 ; VI-SDAG-NEXT: v_div_scale_f64 v[17:18], s[4:5], 1.0, v[2:3], 1.0
2631 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[9:10], v[5:6]
2632 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[11:12], v[7:8]
2633 ; VI-SDAG-NEXT: v_fma_f64 v[13:14], -v[5:6], v[9:10], 1.0
2634 ; VI-SDAG-NEXT: v_fma_f64 v[15:16], -v[7:8], v[11:12], 1.0
2635 ; VI-SDAG-NEXT: v_fma_f64 v[9:10], v[9:10], v[13:14], v[9:10]
2636 ; VI-SDAG-NEXT: v_div_scale_f64 v[13:14], vcc, -1.0, v[0:1], -1.0
2637 ; VI-SDAG-NEXT: v_fma_f64 v[11:12], v[11:12], v[15:16], v[11:12]
2638 ; VI-SDAG-NEXT: v_fma_f64 v[15:16], -v[5:6], v[9:10], 1.0
2639 ; VI-SDAG-NEXT: v_fma_f64 v[19:20], -v[7:8], v[11:12], 1.0
2640 ; VI-SDAG-NEXT: v_fma_f64 v[9:10], v[9:10], v[15:16], v[9:10]
2641 ; VI-SDAG-NEXT: v_fma_f64 v[11:12], v[11:12], v[19:20], v[11:12]
2642 ; VI-SDAG-NEXT: v_mul_f64 v[15:16], v[13:14], v[9:10]
2643 ; VI-SDAG-NEXT: v_mul_f64 v[19:20], v[17:18], v[11:12]
2644 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[5:6], v[15:16], v[13:14]
2645 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[7:8], v[19:20], v[17:18]
2646 ; VI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[9:10], v[15:16]
2647 ; VI-SDAG-NEXT: s_mov_b64 vcc, s[4:5]
2648 ; VI-SDAG-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[11:12], v[19:20]
2649 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2650 ; VI-SDAG-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
2651 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
2653 ; VI-GISEL-LABEL: v_neg_pos_rsq_v2f64:
2654 ; VI-GISEL: ; %bb.0:
2655 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2656 ; VI-GISEL-NEXT: s_mov_b32 s4, 0
2657 ; VI-GISEL-NEXT: s_brev_b32 s5, 8
2658 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, s4
2659 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, s5
2660 ; VI-GISEL-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2661 ; VI-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
2662 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
2663 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc
2664 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v7
2665 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v6, s[4:5]
2666 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2667 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]
2668 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]
2669 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.5
2670 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]
2671 ; VI-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.5
2672 ; VI-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]
2673 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
2674 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
2675 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2676 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2677 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2678 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2679 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2680 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2681 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2682 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2683 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2684 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2685 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2686 ; VI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
2687 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2688 ; VI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
2689 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc
2690 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
2691 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]
2692 ; VI-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v9
2693 ; VI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v10
2694 ; VI-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v8
2695 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
2696 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
2697 ; VI-GISEL-NEXT: v_div_scale_f64 v[4:5], s[6:7], v[0:1], v[0:1], -1.0
2698 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]
2699 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]
2700 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0
2701 ; VI-GISEL-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
2702 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
2703 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
2704 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
2705 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
2706 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2707 ; VI-GISEL-NEXT: v_div_scale_f64 v[12:13], vcc, -1.0, v[0:1], -1.0
2708 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2709 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
2710 ; VI-GISEL-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
2711 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
2712 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
2713 ; VI-GISEL-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9]
2714 ; VI-GISEL-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11]
2715 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
2716 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
2717 ; VI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
2718 ; VI-GISEL-NEXT: s_mov_b64 vcc, s[4:5]
2719 ; VI-GISEL-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
2720 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2721 ; VI-GISEL-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
2722 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
2723 %sqrt = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
2724 %rsq = fdiv <2 x double> <double -1.0, double 1.0>, %sqrt
2725 ret <2 x double> %rsq
2728 define double @v_rsq_f64_fneg_fabs(double %x) {
2729 ; SI-SDAG-LABEL: v_rsq_f64_fneg_fabs:
2731 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2732 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
2733 ; SI-SDAG-NEXT: s_brev_b32 s5, 9
2734 ; SI-SDAG-NEXT: v_cmp_gt_f64_e64 vcc, |v[0:1]|, s[4:5]
2735 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
2736 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
2737 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
2738 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], -|v[0:1]|, v2
2739 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
2740 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
2741 ; SI-SDAG-NEXT: s_mov_b32 s6, 0x3ff00000
2742 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
2743 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
2744 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2745 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2746 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2747 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2748 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
2749 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2750 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
2751 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
2752 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2753 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
2754 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
2755 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
2756 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2757 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
2758 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
2759 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2760 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2761 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
2762 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2763 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2764 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
2765 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
2766 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
2767 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2768 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2769 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2770 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
2772 ; SI-GISEL-LABEL: v_rsq_f64_fneg_fabs:
2773 ; SI-GISEL: ; %bb.0:
2774 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2775 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
2776 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
2777 ; SI-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, -|v[0:1]|, v[2:3]
2778 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
2779 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
2780 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], -|v[0:1]|, v2
2781 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
2782 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
2783 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
2784 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
2785 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
2786 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
2787 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
2788 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2789 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2790 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2791 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2792 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2793 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2794 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
2795 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2796 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
2797 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
2798 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
2799 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2800 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
2801 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
2802 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
2803 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
2804 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
2805 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2806 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2807 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2808 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2809 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
2810 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
2811 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
2812 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2813 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
2815 ; VI-SDAG-LABEL: v_rsq_f64_fneg_fabs:
2817 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2818 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
2819 ; VI-SDAG-NEXT: s_brev_b32 s5, 9
2820 ; VI-SDAG-NEXT: v_cmp_gt_f64_e64 vcc, |v[0:1]|, s[4:5]
2821 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
2822 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
2823 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], -|v[0:1]|, v2
2824 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
2825 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
2826 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
2827 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2828 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2829 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2830 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2831 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
2832 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2833 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
2834 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
2835 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
2836 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
2837 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
2838 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2839 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
2840 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
2841 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2842 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
2843 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2844 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2845 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
2846 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2847 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2848 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
2849 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2850 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2851 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2852 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
2854 ; VI-GISEL-LABEL: v_rsq_f64_fneg_fabs:
2855 ; VI-GISEL: ; %bb.0:
2856 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2857 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
2858 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
2859 ; VI-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, -|v[0:1]|, v[2:3]
2860 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
2861 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
2862 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], -|v[0:1]|, v2
2863 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
2864 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
2865 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
2866 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
2867 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2868 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2869 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2870 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2871 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2872 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2873 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
2874 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
2875 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
2876 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
2877 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2878 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
2879 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
2880 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2881 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
2882 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2883 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2884 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
2885 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2886 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2887 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
2888 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2889 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2890 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2891 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
2892 %fabs = call double @llvm.fabs.f64(double %x)
2893 %fneg.fabs = fneg double %fabs
2894 %sqrt = call contract double @llvm.sqrt.f64(double %fneg.fabs)
2895 %rsq = fdiv contract double 1.0, %sqrt
2899 define double @v_rsq_f64__afn_sqrt(double %x) {
2900 ; SI-SDAG-LABEL: v_rsq_f64__afn_sqrt:
2902 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2903 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
2904 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
2905 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2906 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
2907 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
2908 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
2909 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
2910 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
2911 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
2912 ; SI-SDAG-NEXT: s_mov_b32 s6, 0x3ff00000
2913 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
2914 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
2915 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2916 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2917 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2918 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2919 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
2920 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2921 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
2922 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
2923 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2924 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
2925 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
2926 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
2927 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2928 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
2929 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
2930 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2931 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2932 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
2933 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2934 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2935 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
2936 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
2937 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
2938 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2939 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2940 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2941 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
2943 ; SI-GISEL-LABEL: v_rsq_f64__afn_sqrt:
2944 ; SI-GISEL: ; %bb.0:
2945 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2946 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
2947 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
2948 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
2949 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
2950 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
2951 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
2952 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
2953 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
2954 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
2955 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
2956 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
2957 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
2958 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
2959 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2960 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2961 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2962 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2963 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2964 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2965 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
2966 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
2967 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
2968 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
2969 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
2970 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2971 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
2972 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
2973 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
2974 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
2975 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
2976 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2977 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2978 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2979 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2980 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
2981 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
2982 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
2983 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2984 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
2986 ; VI-SDAG-LABEL: v_rsq_f64__afn_sqrt:
2988 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2989 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
2990 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
2991 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2992 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
2993 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
2994 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
2995 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
2996 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
2997 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
2998 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2999 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3000 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3001 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3002 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3003 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3004 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3005 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
3006 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
3007 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3008 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3009 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3010 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3011 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3012 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
3013 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
3014 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
3015 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3016 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
3017 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
3018 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
3019 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
3020 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
3021 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
3022 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
3023 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
3025 ; VI-GISEL-LABEL: v_rsq_f64__afn_sqrt:
3026 ; VI-GISEL: ; %bb.0:
3027 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3028 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3029 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3030 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3031 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3032 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3033 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3034 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3035 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3036 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3037 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3038 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3039 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3040 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3041 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3042 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3043 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3044 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
3045 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
3046 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3047 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3048 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3049 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3050 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3051 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
3052 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
3053 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
3054 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3055 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
3056 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
3057 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
3058 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
3059 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
3060 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
3061 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
3062 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
3063 %sqrt = call contract afn double @llvm.sqrt.f64(double %x)
3064 %rsq = fdiv contract double 1.0, %sqrt
3068 define double @v_rsq_f64__afn_fdiv(double %x) {
3069 ; SI-SDAG-LABEL: v_rsq_f64__afn_fdiv:
3071 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3072 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
3073 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
3074 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3075 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
3076 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3077 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3078 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3079 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
3080 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3081 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3082 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3083 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3084 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3085 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3086 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3087 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3088 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3089 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3090 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3091 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3092 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3093 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3094 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3095 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3096 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3097 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3098 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3099 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3100 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3101 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3102 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
3104 ; SI-GISEL-LABEL: v_rsq_f64__afn_fdiv:
3105 ; SI-GISEL: ; %bb.0:
3106 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3107 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3108 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3109 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3110 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3111 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3112 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3113 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
3114 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3115 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
3116 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3117 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3118 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3119 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3120 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3121 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3122 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3123 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3124 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3125 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3126 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3127 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3128 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3129 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3130 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3131 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3132 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3133 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3134 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3135 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3136 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3137 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
3139 ; VI-SDAG-LABEL: v_rsq_f64__afn_fdiv:
3141 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3142 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
3143 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
3144 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3145 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3146 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3147 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3148 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3149 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3150 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3151 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3152 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3153 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3154 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3155 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3156 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3157 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3158 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
3159 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
3160 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3161 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3162 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3163 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3164 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3165 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3166 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3167 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3168 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3169 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3170 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3171 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3172 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
3174 ; VI-GISEL-LABEL: v_rsq_f64__afn_fdiv:
3175 ; VI-GISEL: ; %bb.0:
3176 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3177 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3178 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3179 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3180 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3181 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3182 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3183 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3184 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3185 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3186 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3187 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3188 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3189 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3190 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3191 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3192 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3193 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
3194 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
3195 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3196 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3197 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3198 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3199 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3200 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3201 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3202 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3203 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3204 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3205 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3206 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3207 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
3208 %sqrt = call contract double @llvm.sqrt.f64(double %x)
3209 %rsq = fdiv contract afn double 1.0, %sqrt
3213 define double @v_rsq_f64__afn(double %x) {
3214 ; SI-SDAG-LABEL: v_rsq_f64__afn:
3216 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3217 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
3218 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
3219 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3220 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
3221 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3222 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3223 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3224 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
3225 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3226 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3227 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3228 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3229 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3230 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3231 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3232 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3233 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3234 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3235 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3236 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3237 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3238 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3239 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3240 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3241 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3242 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3243 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3244 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3245 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3246 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3247 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
3249 ; SI-GISEL-LABEL: v_rsq_f64__afn:
3250 ; SI-GISEL: ; %bb.0:
3251 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3252 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3253 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3254 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3255 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3256 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3257 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3258 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
3259 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3260 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
3261 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3262 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3263 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3264 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3265 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3266 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3267 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3268 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3269 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3270 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3271 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3272 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3273 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3274 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3275 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3276 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3277 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3278 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3279 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3280 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3281 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3282 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
3284 ; VI-SDAG-LABEL: v_rsq_f64__afn:
3286 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3287 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
3288 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
3289 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3290 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3291 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3292 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3293 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3294 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3295 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3296 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3297 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3298 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3299 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3300 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3301 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3302 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3303 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
3304 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
3305 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3306 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3307 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3308 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3309 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3310 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3311 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3312 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3313 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3314 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3315 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3316 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3317 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
3319 ; VI-GISEL-LABEL: v_rsq_f64__afn:
3320 ; VI-GISEL: ; %bb.0:
3321 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3322 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3323 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3324 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3325 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3326 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3327 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3328 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3329 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3330 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3331 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3332 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3333 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3334 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3335 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3336 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3337 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3338 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
3339 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
3340 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3341 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3342 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3343 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3344 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3345 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3346 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3347 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3348 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3349 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3350 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3351 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3352 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
3353 %sqrt = call contract afn double @llvm.sqrt.f64(double %x)
3354 %rsq = fdiv contract afn double 1.0, %sqrt
3358 define double @v_neg_rsq_f64__afn(double %x) {
3359 ; SI-SDAG-LABEL: v_neg_rsq_f64__afn:
3361 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3362 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
3363 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
3364 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3365 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
3366 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3367 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3368 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3369 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
3370 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3371 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3372 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3373 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3374 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3375 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3376 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3377 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3378 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3379 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3380 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3381 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3382 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3383 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3384 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3385 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3386 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3387 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3388 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3389 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3390 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[2:3], -1.0
3391 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
3392 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
3393 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
3395 ; SI-GISEL-LABEL: v_neg_rsq_f64__afn:
3396 ; SI-GISEL: ; %bb.0:
3397 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3398 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3399 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3400 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3401 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3402 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3403 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3404 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
3405 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3406 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
3407 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3408 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3409 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3410 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3411 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3412 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3413 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3414 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3415 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3416 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3417 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3418 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3419 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3420 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3421 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3422 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3423 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3424 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3425 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3426 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], -1.0
3427 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
3428 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
3429 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
3431 ; VI-SDAG-LABEL: v_neg_rsq_f64__afn:
3433 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3434 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
3435 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
3436 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3437 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3438 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3439 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3440 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3441 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3442 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3443 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3444 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3445 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3446 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3447 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3448 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3449 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3450 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
3451 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
3452 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3453 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3454 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3455 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3456 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3457 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3458 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3459 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3460 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3461 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3462 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[2:3], -1.0
3463 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
3464 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
3465 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
3467 ; VI-GISEL-LABEL: v_neg_rsq_f64__afn:
3468 ; VI-GISEL: ; %bb.0:
3469 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3470 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3471 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3472 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3473 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3474 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3475 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3476 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3477 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3478 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3479 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3480 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3481 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3482 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3483 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3484 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3485 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3486 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
3487 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
3488 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3489 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3490 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3491 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3492 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3493 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3494 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3495 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3496 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3497 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3498 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], -1.0
3499 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
3500 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
3501 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
3502 %sqrt = call contract afn double @llvm.sqrt.f64(double %x)
3503 %rsq = fdiv contract afn double -1.0, %sqrt
3507 define double @v_rsq_f64__afn_ninf(double %x) {
3508 ; SI-SDAG-LABEL: v_rsq_f64__afn_ninf:
3510 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3511 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
3512 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
3513 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3514 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
3515 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3516 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3517 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3518 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
3519 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3520 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3521 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3522 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3523 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3524 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3525 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3526 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3527 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3528 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3529 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3530 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3531 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3532 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3533 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3534 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3535 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3536 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3537 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3538 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3539 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3540 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3541 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
3543 ; SI-GISEL-LABEL: v_rsq_f64__afn_ninf:
3544 ; SI-GISEL: ; %bb.0:
3545 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3546 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3547 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3548 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3549 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3550 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3551 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3552 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
3553 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3554 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
3555 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3556 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3557 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3558 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3559 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3560 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3561 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3562 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3563 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3564 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3565 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3566 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3567 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3568 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3569 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3570 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3571 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3572 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3573 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3574 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3575 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3576 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
3578 ; VI-SDAG-LABEL: v_rsq_f64__afn_ninf:
3580 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3581 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
3582 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
3583 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3584 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3585 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3586 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3587 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3588 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3589 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3590 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3591 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3592 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3593 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3594 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3595 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3596 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3597 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
3598 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
3599 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3600 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3601 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3602 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3603 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3604 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3605 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3606 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3607 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3608 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3609 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3610 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3611 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
3613 ; VI-GISEL-LABEL: v_rsq_f64__afn_ninf:
3614 ; VI-GISEL: ; %bb.0:
3615 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3616 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3617 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3618 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3619 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3620 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3621 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3622 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3623 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3624 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3625 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3626 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3627 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3628 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3629 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3630 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3631 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3632 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
3633 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
3634 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3635 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3636 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3637 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3638 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3639 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3640 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3641 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3642 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3643 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3644 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3645 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3646 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
3647 %sqrt = call contract afn ninf double @llvm.sqrt.f64(double %x)
3648 %rsq = fdiv contract afn ninf double 1.0, %sqrt
3652 define double @v_rsq_f64__afn_nnan(double %x) {
3653 ; SI-SDAG-LABEL: v_rsq_f64__afn_nnan:
3655 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3656 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
3657 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
3658 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3659 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
3660 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3661 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3662 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3663 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
3664 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3665 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3666 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3667 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3668 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3669 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3670 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3671 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3672 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3673 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3674 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3675 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3676 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3677 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3678 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3679 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3680 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3681 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3682 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3683 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3684 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3685 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3686 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
3688 ; SI-GISEL-LABEL: v_rsq_f64__afn_nnan:
3689 ; SI-GISEL: ; %bb.0:
3690 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3691 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3692 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3693 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3694 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3695 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3696 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3697 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
3698 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3699 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
3700 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3701 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3702 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3703 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3704 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3705 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3706 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3707 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3708 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3709 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3710 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3711 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3712 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3713 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3714 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3715 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3716 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3717 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3718 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3719 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3720 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3721 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
3723 ; VI-SDAG-LABEL: v_rsq_f64__afn_nnan:
3725 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3726 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
3727 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
3728 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3729 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3730 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3731 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3732 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3733 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3734 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3735 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3736 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3737 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3738 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3739 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3740 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3741 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3742 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
3743 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
3744 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3745 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3746 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3747 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3748 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3749 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3750 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3751 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3752 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3753 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3754 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3755 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3756 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
3758 ; VI-GISEL-LABEL: v_rsq_f64__afn_nnan:
3759 ; VI-GISEL: ; %bb.0:
3760 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3761 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3762 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3763 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3764 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3765 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3766 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3767 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3768 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3769 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3770 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3771 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3772 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3773 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3774 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3775 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3776 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3777 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
3778 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
3779 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3780 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3781 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3782 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3783 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3784 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3785 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3786 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3787 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3788 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3789 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3790 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3791 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
3792 %sqrt = call contract afn nnan double @llvm.sqrt.f64(double %x)
3793 %rsq = fdiv contract afn nnan double 1.0, %sqrt
3797 define double @v_rsq_f64__afn_nnan_ninf(double %x) {
3798 ; SI-SDAG-LABEL: v_rsq_f64__afn_nnan_ninf:
3800 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3801 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
3802 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
3803 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3804 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
3805 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3806 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3807 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3808 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
3809 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3810 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3811 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3812 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3813 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3814 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3815 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3816 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3817 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3818 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3819 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3820 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3821 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3822 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3823 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3824 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3825 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3826 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3827 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3828 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3829 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3830 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3831 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
3833 ; SI-GISEL-LABEL: v_rsq_f64__afn_nnan_ninf:
3834 ; SI-GISEL: ; %bb.0:
3835 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3836 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3837 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3838 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3839 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3840 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3841 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3842 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
3843 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3844 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
3845 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3846 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3847 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3848 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3849 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3850 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3851 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3852 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3853 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3854 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3855 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3856 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3857 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3858 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3859 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3860 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3861 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3862 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3863 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3864 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3865 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3866 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
3868 ; VI-SDAG-LABEL: v_rsq_f64__afn_nnan_ninf:
3870 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3871 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
3872 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
3873 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3874 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3875 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3876 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3877 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3878 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3879 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3880 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3881 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3882 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3883 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3884 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3885 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3886 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3887 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
3888 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
3889 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3890 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3891 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3892 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3893 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3894 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3895 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3896 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3897 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3898 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3899 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3900 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3901 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
3903 ; VI-GISEL-LABEL: v_rsq_f64__afn_nnan_ninf:
3904 ; VI-GISEL: ; %bb.0:
3905 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3906 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3907 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3908 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3909 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3910 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3911 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3912 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3913 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3914 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3915 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3916 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3917 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3918 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3919 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3920 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3921 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3922 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
3923 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
3924 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
3925 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
3926 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3927 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3928 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3929 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3930 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3931 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3932 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3933 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3934 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3935 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3936 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
3937 %sqrt = call contract afn nnan ninf double @llvm.sqrt.f64(double %x)
3938 %rsq = fdiv contract afn nnan ninf double 1.0, %sqrt
3942 define double @v_neg_rsq_f64__afn_nnan_ninf(double %x) {
3943 ; SI-SDAG-LABEL: v_neg_rsq_f64__afn_nnan_ninf:
3945 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3946 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
3947 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
3948 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3949 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
3950 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
3951 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3952 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3953 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
3954 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3955 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
3956 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
3957 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3958 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3959 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3960 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3961 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3962 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3963 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3964 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
3965 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
3966 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
3967 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
3968 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
3969 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
3970 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3971 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3972 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3973 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3974 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[2:3], -1.0
3975 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
3976 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
3977 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
3979 ; SI-GISEL-LABEL: v_neg_rsq_f64__afn_nnan_ninf:
3980 ; SI-GISEL: ; %bb.0:
3981 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3982 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
3983 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
3984 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3985 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
3986 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
3987 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
3988 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
3989 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
3990 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
3991 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
3992 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
3993 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3994 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3995 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3996 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3997 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3998 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3999 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4000 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
4001 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4002 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
4003 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4004 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4005 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4006 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4007 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4008 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4009 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4010 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], -1.0
4011 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
4012 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
4013 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
4015 ; VI-SDAG-LABEL: v_neg_rsq_f64__afn_nnan_ninf:
4017 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4018 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
4019 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
4020 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4021 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
4022 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
4023 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
4024 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4025 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
4026 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
4027 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4028 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4029 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4030 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4031 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4032 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4033 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4034 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
4035 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
4036 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
4037 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
4038 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4039 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4040 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4041 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4042 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4043 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4044 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4045 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4046 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[2:3], -1.0
4047 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
4048 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
4049 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
4051 ; VI-GISEL-LABEL: v_neg_rsq_f64__afn_nnan_ninf:
4052 ; VI-GISEL: ; %bb.0:
4053 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4054 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
4055 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
4056 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
4057 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
4058 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
4059 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
4060 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4061 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
4062 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
4063 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4064 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4065 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4066 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4067 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4068 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4069 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4070 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
4071 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
4072 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
4073 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
4074 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4075 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4076 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4077 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4078 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4079 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4080 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4081 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4082 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], -1.0
4083 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
4084 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
4085 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
4086 %sqrt = call contract afn nnan ninf double @llvm.sqrt.f64(double %x)
4087 %rsq = fdiv contract afn nnan ninf double -1.0, %sqrt
4091 define double @v_rsq_f64__nnan_ninf(double %x) {
4092 ; SI-SDAG-LABEL: v_rsq_f64__nnan_ninf:
4094 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4095 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
4096 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
4097 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4098 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
4099 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
4100 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
4101 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
4102 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
4103 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4104 ; SI-SDAG-NEXT: s_mov_b32 s6, 0x3ff00000
4105 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
4106 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
4107 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4108 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4109 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4110 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4111 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4112 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4113 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4114 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
4115 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4116 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
4117 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4118 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4119 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4120 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4121 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
4122 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4123 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4124 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
4125 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4126 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4127 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
4128 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
4129 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
4130 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4131 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4132 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4133 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
4135 ; SI-GISEL-LABEL: v_rsq_f64__nnan_ninf:
4136 ; SI-GISEL: ; %bb.0:
4137 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4138 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
4139 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
4140 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
4141 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
4142 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
4143 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
4144 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
4145 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4146 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
4147 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
4148 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
4149 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
4150 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4151 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4152 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4153 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4154 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4155 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4156 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4157 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
4158 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4159 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
4160 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4161 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4162 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4163 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
4164 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4165 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
4166 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
4167 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
4168 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4169 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4170 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4171 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4172 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
4173 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
4174 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
4175 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4176 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
4178 ; VI-SDAG-LABEL: v_rsq_f64__nnan_ninf:
4180 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4181 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
4182 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
4183 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4184 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
4185 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
4186 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
4187 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4188 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
4189 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
4190 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4191 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4192 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4193 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4194 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4195 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4196 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4197 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
4198 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
4199 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
4200 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
4201 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4202 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4203 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4204 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4205 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4206 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4207 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4208 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
4209 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4210 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4211 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
4212 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4213 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4214 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4215 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
4217 ; VI-GISEL-LABEL: v_rsq_f64__nnan_ninf:
4218 ; VI-GISEL: ; %bb.0:
4219 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4220 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
4221 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
4222 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
4223 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
4224 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
4225 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
4226 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4227 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
4228 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
4229 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4230 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4231 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4232 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4233 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4234 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4235 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4236 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
4237 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
4238 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
4239 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
4240 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4241 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4242 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4243 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4244 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4245 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4246 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4247 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
4248 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4249 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4250 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
4251 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4252 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4253 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4254 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
4255 %sqrt = call contract nnan ninf double @llvm.sqrt.f64(double %x)
4256 %rsq = fdiv contract nnan ninf double 1.0, %sqrt
4260 define <2 x double> @v_rsq_v2f64__afn_nnan_ninf(<2 x double> %x) {
4261 ; SI-SDAG-LABEL: v_rsq_v2f64__afn_nnan_ninf:
4263 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4264 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
4265 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
4266 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
4267 ; SI-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
4268 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
4269 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
4270 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4271 ; SI-SDAG-NEXT: v_mov_b32_e32 v14, 0xffffff80
4272 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
4273 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v12, 0, v14, vcc
4274 ; SI-SDAG-NEXT: v_mov_b32_e32 v15, 0x260
4275 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v15
4276 ; SI-SDAG-NEXT: v_mul_f64 v[6:7], v[2:3], v[4:5]
4277 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
4278 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
4279 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
4280 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4281 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, 1, s[4:5]
4282 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v8, 8, v8
4283 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[6:7], v[6:7], v[2:3]
4284 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v8
4285 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[10:11], v[4:5], v[6:7]
4286 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[8:9], v[0:1]
4287 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[6:7], v[6:7], v[2:3]
4288 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[10:11], v[4:5], v[6:7]
4289 ; SI-SDAG-NEXT: v_mul_f64 v[6:7], v[0:1], v[8:9]
4290 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[8:9], 0.5
4291 ; SI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v12
4292 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[8:9], v[6:7], 0.5
4293 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
4294 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
4295 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[10:11], v[8:9]
4296 ; SI-SDAG-NEXT: v_fma_f64 v[12:13], -v[6:7], v[6:7], v[0:1]
4297 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
4298 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[12:13], v[8:9], v[6:7]
4299 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v15
4300 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[6:7], v[6:7], v[0:1]
4301 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[10:11], v[8:9], v[6:7]
4302 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v6, 0, v14, s[4:5]
4303 ; SI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
4304 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[6:7], v[2:3]
4305 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
4306 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
4307 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[0:1]
4308 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4309 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4310 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4311 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4312 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4313 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4314 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4315 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
4316 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4317 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
4318 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
4319 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
4320 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
4322 ; SI-GISEL-LABEL: v_rsq_v2f64__afn_nnan_ninf:
4323 ; SI-GISEL: ; %bb.0:
4324 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4325 ; SI-GISEL-NEXT: s_mov_b32 s4, 0
4326 ; SI-GISEL-NEXT: s_brev_b32 s5, 8
4327 ; SI-GISEL-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4328 ; SI-GISEL-NEXT: v_mov_b32_e32 v12, 0x100
4329 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v12, vcc
4330 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v4
4331 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, s4
4332 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]
4333 ; SI-GISEL-NEXT: v_mov_b32_e32 v11, s5
4334 ; SI-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[10:11]
4335 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
4336 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]
4337 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
4338 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4339 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
4340 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
4341 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
4342 ; SI-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v12, s[4:5]
4343 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v8
4344 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
4345 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[10:11], v[2:3]
4346 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
4347 ; SI-GISEL-NEXT: v_mov_b32_e32 v12, 0xffffff80
4348 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v13, 0, v12, vcc
4349 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[10:11], 0.5
4350 ; SI-GISEL-NEXT: v_mul_f64 v[8:9], v[2:3], v[10:11]
4351 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v13
4352 ; SI-GISEL-NEXT: v_fma_f64 v[10:11], -v[6:7], v[8:9], 0.5
4353 ; SI-GISEL-NEXT: v_mov_b32_e32 v13, 0x260
4354 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[10:11], v[8:9]
4355 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
4356 ; SI-GISEL-NEXT: v_fma_f64 v[10:11], -v[8:9], v[8:9], v[2:3]
4357 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v13
4358 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], v[10:11], v[6:7], v[8:9]
4359 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
4360 ; SI-GISEL-NEXT: v_fma_f64 v[10:11], -v[8:9], v[8:9], v[2:3]
4361 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
4362 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[10:11], v[6:7], v[8:9]
4363 ; SI-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v12, s[4:5]
4364 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
4365 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v13
4366 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
4367 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
4368 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[0:1]
4369 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[2:3]
4370 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4371 ; SI-GISEL-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4372 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4373 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4374 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4375 ; SI-GISEL-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4376 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4377 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4378 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
4379 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
4380 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
4381 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
4382 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
4384 ; VI-SDAG-LABEL: v_rsq_v2f64__afn_nnan_ninf:
4386 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4387 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
4388 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
4389 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
4390 ; VI-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
4391 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
4392 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
4393 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4394 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]
4395 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
4396 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v4
4397 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
4398 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[0:1]
4399 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[2:3], v[4:5]
4400 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
4401 ; VI-SDAG-NEXT: v_mul_f64 v[10:11], v[0:1], v[6:7]
4402 ; VI-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.5
4403 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
4404 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
4405 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
4406 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
4407 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
4408 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
4409 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
4410 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
4411 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
4412 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
4413 ; VI-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
4414 ; VI-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
4415 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
4416 ; VI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
4417 ; VI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
4418 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
4419 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc
4420 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]
4421 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
4422 ; VI-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v9
4423 ; VI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v10
4424 ; VI-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v8
4425 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v3, v5, v3, s[4:5]
4426 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, v4, v2, s[4:5]
4427 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v7, v1, vcc
4428 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v6, v0, vcc
4429 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[5:6], v[0:1]
4430 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[7:8], v[2:3]
4431 ; VI-SDAG-NEXT: v_fma_f64 v[9:10], -v[0:1], v[5:6], 1.0
4432 ; VI-SDAG-NEXT: v_fma_f64 v[11:12], -v[2:3], v[7:8], 1.0
4433 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[9:10], v[5:6], v[5:6]
4434 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[11:12], v[7:8], v[7:8]
4435 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4436 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4437 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4438 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4439 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
4440 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
4441 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
4442 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
4443 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
4445 ; VI-GISEL-LABEL: v_rsq_v2f64__afn_nnan_ninf:
4446 ; VI-GISEL: ; %bb.0:
4447 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4448 ; VI-GISEL-NEXT: s_mov_b32 s4, 0
4449 ; VI-GISEL-NEXT: s_brev_b32 s5, 8
4450 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, s4
4451 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, s5
4452 ; VI-GISEL-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4453 ; VI-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
4454 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
4455 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc
4456 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v6, s[4:5]
4457 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v7
4458 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4459 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]
4460 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]
4461 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.5
4462 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]
4463 ; VI-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.5
4464 ; VI-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]
4465 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
4466 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
4467 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
4468 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
4469 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
4470 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
4471 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
4472 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
4473 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
4474 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
4475 ; VI-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
4476 ; VI-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
4477 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
4478 ; VI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
4479 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
4480 ; VI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
4481 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc
4482 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]
4483 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
4484 ; VI-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v9
4485 ; VI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v10
4486 ; VI-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v8
4487 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc
4488 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc
4489 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]
4490 ; VI-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]
4491 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[0:1]
4492 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[2:3]
4493 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4494 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4495 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4496 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4497 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4498 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4499 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4500 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4501 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
4502 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
4503 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
4504 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
4505 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
4506 %sqrt = call contract afn nnan ninf <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
4507 %rsq = fdiv contract afn nnan ninf <2 x double> <double 1.0, double 1.0>, %sqrt
4508 ret <2 x double> %rsq
4511 define amdgpu_ps <2 x i32> @s_rsq_f64_unsafe(double inreg %x) #0 {
4512 ; SI-SDAG-LABEL: s_rsq_f64_unsafe:
4514 ; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0
4515 ; SI-SDAG-NEXT: v_bfrev_b32_e32 v1, 8
4516 ; SI-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
4517 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0x260
4518 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc
4519 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 8, v0
4520 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
4521 ; SI-SDAG-NEXT: s_and_b64 s[0:1], vcc, exec
4522 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4523 ; SI-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0
4524 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v8
4525 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
4526 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
4527 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4528 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4529 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4530 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4531 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4532 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4533 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4534 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0
4535 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4536 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4537 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4538 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4539 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4540 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4541 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4542 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4543 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4544 ; SI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
4545 ; SI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
4546 ; SI-SDAG-NEXT: ; return to shader part epilog
4548 ; SI-GISEL-LABEL: s_rsq_f64_unsafe:
4549 ; SI-GISEL: ; %bb.0:
4550 ; SI-GISEL-NEXT: v_mov_b32_e32 v0, 0
4551 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v1, 8
4552 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
4553 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x100
4554 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc
4555 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
4556 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
4557 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4558 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
4559 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
4560 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
4561 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4562 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4563 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4564 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4565 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4566 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4567 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4568 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
4569 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4570 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
4571 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4572 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4573 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4574 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4575 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4576 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4577 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4578 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4579 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4580 ; SI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
4581 ; SI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
4582 ; SI-GISEL-NEXT: ; return to shader part epilog
4584 ; VI-SDAG-LABEL: s_rsq_f64_unsafe:
4586 ; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0
4587 ; VI-SDAG-NEXT: v_bfrev_b32_e32 v1, 8
4588 ; VI-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
4589 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc
4590 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 8, v0
4591 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
4592 ; VI-SDAG-NEXT: s_and_b64 s[0:1], vcc, exec
4593 ; VI-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0
4594 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4595 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
4596 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
4597 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4598 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4599 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4600 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4601 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4602 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4603 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4604 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0x260
4605 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v4
4606 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0
4607 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4608 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4609 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4610 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4611 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4612 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4613 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4614 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4615 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4616 ; VI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
4617 ; VI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
4618 ; VI-SDAG-NEXT: ; return to shader part epilog
4620 ; VI-GISEL-LABEL: s_rsq_f64_unsafe:
4621 ; VI-GISEL: ; %bb.0:
4622 ; VI-GISEL-NEXT: v_mov_b32_e32 v0, 0
4623 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v1, 8
4624 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
4625 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x100
4626 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc
4627 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0
4628 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4629 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
4630 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
4631 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4632 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4633 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4634 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4635 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4636 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4637 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4638 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
4639 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
4640 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
4641 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
4642 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4643 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4644 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4645 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4646 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4647 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4648 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4649 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4650 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4651 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4652 ; VI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
4653 ; VI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
4654 ; VI-GISEL-NEXT: ; return to shader part epilog
4655 %rsq = call contract double @llvm.sqrt.f64(double %x)
4656 %result = fdiv contract double 1.0, %rsq
4657 %cast = bitcast double %result to <2 x i32>
4658 %cast.0 = extractelement <2 x i32> %cast, i32 0
4659 %cast.1 = extractelement <2 x i32> %cast, i32 1
4660 %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
4661 %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
4662 %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
4663 %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
4664 ret <2 x i32> %insert.1
4667 define double @v_rsq_f64_unsafe(double %x) #0 {
4668 ; SI-SDAG-LABEL: v_rsq_f64_unsafe:
4670 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4671 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
4672 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
4673 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4674 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
4675 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
4676 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
4677 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
4678 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
4679 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4680 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
4681 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
4682 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4683 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4684 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4685 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4686 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4687 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4688 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4689 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
4690 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4691 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
4692 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4693 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4694 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4695 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4696 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4697 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4698 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4699 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4700 ; SI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4701 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
4703 ; SI-GISEL-LABEL: v_rsq_f64_unsafe:
4704 ; SI-GISEL: ; %bb.0:
4705 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4706 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
4707 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
4708 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
4709 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
4710 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
4711 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
4712 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
4713 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4714 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
4715 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
4716 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
4717 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4718 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4719 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4720 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4721 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4722 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4723 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4724 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
4725 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4726 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
4727 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4728 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4729 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4730 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4731 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4732 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4733 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4734 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4735 ; SI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4736 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
4738 ; VI-SDAG-LABEL: v_rsq_f64_unsafe:
4740 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4741 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
4742 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
4743 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4744 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
4745 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
4746 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
4747 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4748 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
4749 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
4750 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4751 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4752 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4753 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4754 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4755 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4756 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4757 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
4758 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
4759 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
4760 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
4761 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4762 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4763 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4764 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4765 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4766 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4767 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4768 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4769 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4770 ; VI-SDAG-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4771 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
4773 ; VI-GISEL-LABEL: v_rsq_f64_unsafe:
4774 ; VI-GISEL: ; %bb.0:
4775 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4776 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
4777 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
4778 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
4779 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
4780 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
4781 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
4782 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
4783 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
4784 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
4785 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4786 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4787 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4788 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4789 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4790 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4791 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4792 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
4793 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
4794 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
4795 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
4796 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
4797 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
4798 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
4799 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
4800 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4801 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4802 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4803 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4804 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4805 ; VI-GISEL-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4806 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
4807 %sqrt = call double @llvm.sqrt.f64(double %x)
4808 %rsq = fdiv double 1.0, %sqrt
4812 define double @v_rsq_amdgcn_sqrt_f64(double %x) {
4813 ; SI-SDAG-LABEL: v_rsq_amdgcn_sqrt_f64:
4815 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4816 ; SI-SDAG-NEXT: v_sqrt_f64_e32 v[0:1], v[0:1]
4817 ; SI-SDAG-NEXT: s_mov_b32 s6, 0x3ff00000
4818 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4819 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4820 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
4821 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4822 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4823 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
4824 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4825 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4826 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
4827 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
4828 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
4829 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4830 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4831 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4832 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
4834 ; SI-GISEL-LABEL: v_rsq_amdgcn_sqrt_f64:
4835 ; SI-GISEL: ; %bb.0:
4836 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4837 ; SI-GISEL-NEXT: v_sqrt_f64_e32 v[0:1], v[0:1]
4838 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
4839 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4840 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
4841 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4842 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
4843 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
4844 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
4845 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4846 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4847 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4848 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4849 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
4850 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
4851 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
4852 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4853 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
4855 ; VI-SDAG-LABEL: v_rsq_amdgcn_sqrt_f64:
4857 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4858 ; VI-SDAG-NEXT: v_sqrt_f64_e32 v[0:1], v[0:1]
4859 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4860 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4861 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4862 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4863 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
4864 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4865 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4866 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
4867 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4868 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4869 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4870 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
4872 ; VI-GISEL-LABEL: v_rsq_amdgcn_sqrt_f64:
4873 ; VI-GISEL: ; %bb.0:
4874 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4875 ; VI-GISEL-NEXT: v_sqrt_f64_e32 v[0:1], v[0:1]
4876 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4877 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4878 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4879 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4880 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
4881 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4882 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4883 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
4884 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4885 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4886 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4887 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
4888 %sqrt = call contract double @llvm.amdgcn.sqrt.f64(double %x)
4889 %rsq = fdiv contract double 1.0, %sqrt
4893 define double @v_neg_rsq_amdgcn_sqrt_f64(double %x) {
4894 ; SI-SDAG-LABEL: v_neg_rsq_amdgcn_sqrt_f64:
4896 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4897 ; SI-SDAG-NEXT: v_sqrt_f64_e32 v[0:1], v[0:1]
4898 ; SI-SDAG-NEXT: s_mov_b32 s6, 0xbff00000
4899 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
4900 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4901 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
4902 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4903 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4904 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], -1.0, v[0:1], -1.0
4905 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4906 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4907 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s6, v7
4908 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
4909 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
4910 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4911 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4912 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
4913 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
4915 ; SI-GISEL-LABEL: v_neg_rsq_amdgcn_sqrt_f64:
4916 ; SI-GISEL: ; %bb.0:
4917 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4918 ; SI-GISEL-NEXT: v_sqrt_f64_e32 v[0:1], v[0:1]
4919 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0xbff00000
4920 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
4921 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], -1.0, v[0:1], -1.0
4922 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4923 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
4924 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
4925 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
4926 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4927 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4928 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4929 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4930 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
4931 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
4932 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
4933 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
4934 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
4936 ; VI-SDAG-LABEL: v_neg_rsq_amdgcn_sqrt_f64:
4938 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4939 ; VI-SDAG-NEXT: v_sqrt_f64_e32 v[0:1], v[0:1]
4940 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
4941 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4942 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4943 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4944 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
4945 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4946 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4947 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
4948 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4949 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4950 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
4951 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
4953 ; VI-GISEL-LABEL: v_neg_rsq_amdgcn_sqrt_f64:
4954 ; VI-GISEL: ; %bb.0:
4955 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4956 ; VI-GISEL-NEXT: v_sqrt_f64_e32 v[0:1], v[0:1]
4957 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
4958 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4959 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4960 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4961 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
4962 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4963 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4964 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
4965 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4966 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4967 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
4968 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
4969 %sqrt = call contract double @llvm.amdgcn.sqrt.f64(double %x)
4970 %rsq = fdiv contract double -1.0, %sqrt
4974 define amdgpu_ps <2 x i32> @s_rsq_amdgcn_sqrt_f64(double inreg %x) {
4975 ; SI-SDAG-LABEL: s_rsq_amdgcn_sqrt_f64:
4977 ; SI-SDAG-NEXT: v_sqrt_f64_e32 v[0:1], s[0:1]
4978 ; SI-SDAG-NEXT: s_mov_b32 s2, 0x3ff00000
4979 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
4980 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
4981 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
4982 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4983 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4984 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[0:1], 1.0, v[0:1], 1.0
4985 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4986 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4987 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[0:1], s2, v7
4988 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
4989 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[0:1], vcc
4990 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4991 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4992 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4993 ; SI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
4994 ; SI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
4995 ; SI-SDAG-NEXT: ; return to shader part epilog
4997 ; SI-GISEL-LABEL: s_rsq_amdgcn_sqrt_f64:
4998 ; SI-GISEL: ; %bb.0:
4999 ; SI-GISEL-NEXT: v_sqrt_f64_e32 v[0:1], s[0:1]
5000 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x3ff00000
5001 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
5002 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[0:1], 1.0, v[0:1], 1.0
5003 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
5004 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[0:1], v1, v3
5005 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
5006 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[0:1]
5007 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5008 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5009 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5010 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5011 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
5012 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
5013 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
5014 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
5015 ; SI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
5016 ; SI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
5017 ; SI-GISEL-NEXT: ; return to shader part epilog
5019 ; VI-SDAG-LABEL: s_rsq_amdgcn_sqrt_f64:
5021 ; VI-SDAG-NEXT: v_sqrt_f64_e32 v[0:1], s[0:1]
5022 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
5023 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
5024 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5025 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5026 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
5027 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
5028 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5029 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
5030 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
5031 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
5032 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
5033 ; VI-SDAG-NEXT: v_readfirstlane_b32 s0, v0
5034 ; VI-SDAG-NEXT: v_readfirstlane_b32 s1, v1
5035 ; VI-SDAG-NEXT: ; return to shader part epilog
5037 ; VI-GISEL-LABEL: s_rsq_amdgcn_sqrt_f64:
5038 ; VI-GISEL: ; %bb.0:
5039 ; VI-GISEL-NEXT: v_sqrt_f64_e32 v[0:1], s[0:1]
5040 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
5041 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
5042 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5043 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5044 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
5045 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
5046 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5047 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
5048 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
5049 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
5050 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
5051 ; VI-GISEL-NEXT: v_readfirstlane_b32 s0, v0
5052 ; VI-GISEL-NEXT: v_readfirstlane_b32 s1, v1
5053 ; VI-GISEL-NEXT: ; return to shader part epilog
5054 %rsq = call contract double @llvm.amdgcn.sqrt.f64(double %x)
5055 %result = fdiv contract double 1.0, %rsq
5056 %cast = bitcast double %result to <2 x i32>
5057 %cast.0 = extractelement <2 x i32> %cast, i32 0
5058 %cast.1 = extractelement <2 x i32> %cast, i32 1
5059 %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
5060 %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
5061 %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
5062 %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
5063 ret <2 x i32> %insert.1
5066 define double @v_div_contract_sqrt_f64(double %x, double %y) {
5067 ; SI-SDAG-LABEL: v_div_contract_sqrt_f64:
5069 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5070 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
5071 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
5072 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5073 ; SI-SDAG-NEXT: v_mov_b32_e32 v10, 0xffffff80
5074 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
5075 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
5076 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5077 ; SI-SDAG-NEXT: v_mov_b32_e32 v11, 0x260
5078 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5079 ; SI-SDAG-NEXT: v_mul_f64 v[6:7], v[2:3], v[4:5]
5080 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
5081 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5082 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5083 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5084 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5085 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5086 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5087 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5088 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v10, vcc
5089 ; SI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5090 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v11
5091 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5092 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5093 ; SI-SDAG-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5094 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5095 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v3, v5
5096 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5097 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5098 ; SI-SDAG-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[0:1], v[2:3], v[0:1]
5099 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5100 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5101 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v9
5102 ; SI-SDAG-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
5103 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
5104 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5105 ; SI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5106 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5107 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
5109 ; SI-GISEL-LABEL: v_div_contract_sqrt_f64:
5110 ; SI-GISEL: ; %bb.0:
5111 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5112 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0
5113 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v5, 8
5114 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5115 ; SI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
5116 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v6, vcc
5117 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5118 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0xffffff80
5119 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5120 ; SI-GISEL-NEXT: v_mov_b32_e32 v11, 0x260
5121 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
5122 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], v[4:5]
5123 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5124 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5125 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5126 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5127 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5128 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5129 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5130 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v6, 0, v10, vcc
5131 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5132 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v11
5133 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5134 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5135 ; SI-GISEL-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5136 ; SI-GISEL-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1]
5137 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5138 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v5
5139 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v1, v11
5140 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
5141 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5142 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5143 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5144 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5145 ; SI-GISEL-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
5146 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
5147 ; SI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
5148 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5149 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
5151 ; VI-SDAG-LABEL: v_div_contract_sqrt_f64:
5153 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5154 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
5155 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
5156 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5157 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
5158 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
5159 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5160 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5161 ; VI-SDAG-NEXT: v_mul_f64 v[6:7], v[2:3], v[4:5]
5162 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
5163 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5164 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5165 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5166 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5167 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5168 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5169 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5170 ; VI-SDAG-NEXT: v_mov_b32_e32 v6, 0xffffff80
5171 ; VI-SDAG-NEXT: v_mov_b32_e32 v7, 0x260
5172 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v6, vcc
5173 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v7
5174 ; VI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5175 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5176 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5177 ; VI-SDAG-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5178 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5179 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5180 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5181 ; VI-SDAG-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5182 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5183 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5184 ; VI-SDAG-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
5185 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5186 ; VI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5187 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5188 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
5190 ; VI-GISEL-LABEL: v_div_contract_sqrt_f64:
5191 ; VI-GISEL: ; %bb.0:
5192 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5193 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0
5194 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v5, 8
5195 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5196 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
5197 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v6, vcc
5198 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5199 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5200 ; VI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
5201 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], v[4:5]
5202 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5203 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5204 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5205 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5206 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5207 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5208 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5209 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0xffffff80
5210 ; VI-GISEL-NEXT: v_mov_b32_e32 v7, 0x260
5211 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v6, 0, v6, vcc
5212 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v7
5213 ; VI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5214 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5215 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5216 ; VI-GISEL-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5217 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5218 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5219 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5220 ; VI-GISEL-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5221 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5222 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5223 ; VI-GISEL-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
5224 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5225 ; VI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5226 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5227 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
5228 %sqrt = call contract double @llvm.sqrt.f64(double %y)
5229 %rsq = fdiv contract double %x, %sqrt
5233 define double @v_div_arcp_sqrt_f64(double %x, double %y) {
5234 ; SI-SDAG-LABEL: v_div_arcp_sqrt_f64:
5236 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5237 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
5238 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
5239 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5240 ; SI-SDAG-NEXT: v_mov_b32_e32 v10, 0xffffff80
5241 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
5242 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
5243 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5244 ; SI-SDAG-NEXT: v_mov_b32_e32 v11, 0x260
5245 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5246 ; SI-SDAG-NEXT: v_mul_f64 v[6:7], v[2:3], v[4:5]
5247 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
5248 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5249 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5250 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5251 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5252 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5253 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5254 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5255 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v10, vcc
5256 ; SI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5257 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v11
5258 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5259 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5260 ; SI-SDAG-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5261 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5262 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v3, v5
5263 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5264 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5265 ; SI-SDAG-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[0:1], v[2:3], v[0:1]
5266 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5267 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5268 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v9
5269 ; SI-SDAG-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
5270 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
5271 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5272 ; SI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5273 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5274 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
5276 ; SI-GISEL-LABEL: v_div_arcp_sqrt_f64:
5277 ; SI-GISEL: ; %bb.0:
5278 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5279 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0
5280 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v5, 8
5281 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5282 ; SI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
5283 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v6, vcc
5284 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5285 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0xffffff80
5286 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5287 ; SI-GISEL-NEXT: v_mov_b32_e32 v11, 0x260
5288 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
5289 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], v[4:5]
5290 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5291 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5292 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5293 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5294 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5295 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5296 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5297 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v6, 0, v10, vcc
5298 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5299 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v11
5300 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5301 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5302 ; SI-GISEL-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5303 ; SI-GISEL-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1]
5304 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5305 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v5
5306 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v1, v11
5307 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
5308 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5309 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5310 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5311 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5312 ; SI-GISEL-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
5313 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
5314 ; SI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
5315 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5316 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
5318 ; VI-SDAG-LABEL: v_div_arcp_sqrt_f64:
5320 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5321 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
5322 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
5323 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5324 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
5325 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
5326 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5327 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5328 ; VI-SDAG-NEXT: v_mul_f64 v[6:7], v[2:3], v[4:5]
5329 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
5330 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5331 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5332 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5333 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5334 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5335 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5336 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5337 ; VI-SDAG-NEXT: v_mov_b32_e32 v6, 0xffffff80
5338 ; VI-SDAG-NEXT: v_mov_b32_e32 v7, 0x260
5339 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v6, vcc
5340 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v7
5341 ; VI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5342 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5343 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5344 ; VI-SDAG-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5345 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5346 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5347 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5348 ; VI-SDAG-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5349 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5350 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5351 ; VI-SDAG-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
5352 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5353 ; VI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5354 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5355 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
5357 ; VI-GISEL-LABEL: v_div_arcp_sqrt_f64:
5358 ; VI-GISEL: ; %bb.0:
5359 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5360 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0
5361 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v5, 8
5362 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5363 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
5364 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v6, vcc
5365 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5366 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5367 ; VI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
5368 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], v[4:5]
5369 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5370 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5371 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5372 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5373 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5374 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5375 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5376 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0xffffff80
5377 ; VI-GISEL-NEXT: v_mov_b32_e32 v7, 0x260
5378 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v6, 0, v6, vcc
5379 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v7
5380 ; VI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5381 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5382 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5383 ; VI-GISEL-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5384 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5385 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5386 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5387 ; VI-GISEL-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5388 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5389 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5390 ; VI-GISEL-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
5391 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5392 ; VI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5393 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5394 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
5395 %sqrt = call double @llvm.sqrt.f64(double %y)
5396 %rsq = fdiv arcp double %x, %sqrt
5400 define double @v_div_contract_arcp_sqrt_f64(double %x, double %y) {
5401 ; SI-SDAG-LABEL: v_div_contract_arcp_sqrt_f64:
5403 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5404 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
5405 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
5406 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5407 ; SI-SDAG-NEXT: v_mov_b32_e32 v10, 0xffffff80
5408 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
5409 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
5410 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5411 ; SI-SDAG-NEXT: v_mov_b32_e32 v11, 0x260
5412 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5413 ; SI-SDAG-NEXT: v_mul_f64 v[6:7], v[2:3], v[4:5]
5414 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
5415 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5416 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5417 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5418 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5419 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5420 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5421 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5422 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v10, vcc
5423 ; SI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5424 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v11
5425 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5426 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5427 ; SI-SDAG-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5428 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5429 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v3, v5
5430 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5431 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5432 ; SI-SDAG-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[0:1], v[2:3], v[0:1]
5433 ; SI-SDAG-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5434 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5435 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v9
5436 ; SI-SDAG-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
5437 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
5438 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5439 ; SI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5440 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5441 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
5443 ; SI-GISEL-LABEL: v_div_contract_arcp_sqrt_f64:
5444 ; SI-GISEL: ; %bb.0:
5445 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5446 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0
5447 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v5, 8
5448 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5449 ; SI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
5450 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v6, vcc
5451 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5452 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0xffffff80
5453 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5454 ; SI-GISEL-NEXT: v_mov_b32_e32 v11, 0x260
5455 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
5456 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], v[4:5]
5457 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5458 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5459 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5460 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5461 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5462 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5463 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5464 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v6, 0, v10, vcc
5465 ; SI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5466 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v11
5467 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5468 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5469 ; SI-GISEL-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5470 ; SI-GISEL-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1]
5471 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5472 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v5
5473 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v1, v11
5474 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
5475 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5476 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5477 ; SI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5478 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5479 ; SI-GISEL-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
5480 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
5481 ; SI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
5482 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5483 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
5485 ; VI-SDAG-LABEL: v_div_contract_arcp_sqrt_f64:
5487 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5488 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
5489 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
5490 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5491 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc
5492 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v4, 8, v4
5493 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5494 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5495 ; VI-SDAG-NEXT: v_mul_f64 v[6:7], v[2:3], v[4:5]
5496 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.5
5497 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5498 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5499 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5500 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5501 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5502 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5503 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5504 ; VI-SDAG-NEXT: v_mov_b32_e32 v6, 0xffffff80
5505 ; VI-SDAG-NEXT: v_mov_b32_e32 v7, 0x260
5506 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v6, vcc
5507 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v7
5508 ; VI-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5509 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5510 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5511 ; VI-SDAG-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5512 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5513 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5514 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5515 ; VI-SDAG-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5516 ; VI-SDAG-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5517 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5518 ; VI-SDAG-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
5519 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5520 ; VI-SDAG-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5521 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5522 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
5524 ; VI-GISEL-LABEL: v_div_contract_arcp_sqrt_f64:
5525 ; VI-GISEL: ; %bb.0:
5526 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5527 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0
5528 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v5, 8
5529 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5530 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0x100
5531 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v6, vcc
5532 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5533 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[2:3]
5534 ; VI-GISEL-NEXT: v_mul_f64 v[6:7], v[4:5], 0.5
5535 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], v[4:5]
5536 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5537 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5538 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5539 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5540 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5541 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5542 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5543 ; VI-GISEL-NEXT: v_mov_b32_e32 v6, 0xffffff80
5544 ; VI-GISEL-NEXT: v_mov_b32_e32 v7, 0x260
5545 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v6, 0, v6, vcc
5546 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[2:3], v7
5547 ; VI-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v6
5548 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc
5549 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc
5550 ; VI-GISEL-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5551 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
5552 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5553 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5554 ; VI-GISEL-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5555 ; VI-GISEL-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5556 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5557 ; VI-GISEL-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
5558 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5559 ; VI-GISEL-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5560 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5561 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
5562 %sqrt = call contract double @llvm.sqrt.f64(double %y)
5563 %rsq = fdiv contract arcp double %x, %sqrt
5567 define double @v_div_const_contract_sqrt_f64(double %x) {
5568 ; SI-SDAG-LABEL: v_div_const_contract_sqrt_f64:
5570 ; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5571 ; SI-SDAG-NEXT: s_mov_b32 s4, 0
5572 ; SI-SDAG-NEXT: s_brev_b32 s5, 8
5573 ; SI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
5574 ; SI-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff80
5575 ; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
5576 ; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
5577 ; SI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
5578 ; SI-SDAG-NEXT: v_mov_b32_e32 v9, 0x260
5579 ; SI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
5580 ; SI-SDAG-NEXT: s_mov_b32 s6, 0
5581 ; SI-SDAG-NEXT: s_mov_b32 s7, 0x40700000
5582 ; SI-SDAG-NEXT: s_mov_b32 s8, 0x40700000
5583 ; SI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
5584 ; SI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
5585 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
5586 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5587 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
5588 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
5589 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
5590 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
5591 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
5592 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
5593 ; SI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5594 ; SI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
5595 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
5596 ; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
5597 ; SI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], s[6:7]
5598 ; SI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
5599 ; SI-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, v1, v3
5600 ; SI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5601 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5602 ; SI-SDAG-NEXT: v_div_scale_f64 v[6:7], s[4:5], s[6:7], v[0:1], s[6:7]
5603 ; SI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
5604 ; SI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5605 ; SI-SDAG-NEXT: v_cmp_eq_u32_e64 s[4:5], s8, v7
5606 ; SI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
5607 ; SI-SDAG-NEXT: s_xor_b64 vcc, s[4:5], vcc
5608 ; SI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
5609 ; SI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
5610 ; SI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], s[6:7]
5611 ; SI-SDAG-NEXT: s_setpc_b64 s[30:31]
5613 ; SI-GISEL-LABEL: v_div_const_contract_sqrt_f64:
5614 ; SI-GISEL: ; %bb.0:
5615 ; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5616 ; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0
5617 ; SI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
5618 ; SI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
5619 ; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
5620 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
5621 ; SI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
5622 ; SI-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff80
5623 ; SI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
5624 ; SI-GISEL-NEXT: v_mov_b32_e32 v9, 0x260
5625 ; SI-GISEL-NEXT: s_mov_b32 s6, 0
5626 ; SI-GISEL-NEXT: s_mov_b32 s7, 0x40700000
5627 ; SI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
5628 ; SI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
5629 ; SI-GISEL-NEXT: v_mov_b32_e32 v10, 0x40700000
5630 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
5631 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
5632 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5633 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
5634 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
5635 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
5636 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
5637 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v8, vcc
5638 ; SI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5639 ; SI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v9
5640 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
5641 ; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
5642 ; SI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], s[6:7]
5643 ; SI-GISEL-NEXT: v_div_scale_f64 v[8:9], s[4:5], s[6:7], v[0:1], s[6:7]
5644 ; SI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
5645 ; SI-GISEL-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
5646 ; SI-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
5647 ; SI-GISEL-NEXT: s_xor_b64 vcc, vcc, s[4:5]
5648 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5649 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5650 ; SI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5651 ; SI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5652 ; SI-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
5653 ; SI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
5654 ; SI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
5655 ; SI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], s[6:7]
5656 ; SI-GISEL-NEXT: s_setpc_b64 s[30:31]
5658 ; VI-SDAG-LABEL: v_div_const_contract_sqrt_f64:
5660 ; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5661 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
5662 ; VI-SDAG-NEXT: s_brev_b32 s5, 8
5663 ; VI-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
5664 ; VI-SDAG-NEXT: s_mov_b32 s4, 0
5665 ; VI-SDAG-NEXT: s_mov_b32 s5, 0x40700000
5666 ; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc
5667 ; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
5668 ; VI-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
5669 ; VI-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
5670 ; VI-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]
5671 ; VI-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5
5672 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
5673 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5674 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
5675 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
5676 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
5677 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
5678 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
5679 ; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80
5680 ; VI-SDAG-NEXT: v_mov_b32_e32 v5, 0x260
5681 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
5682 ; VI-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
5683 ; VI-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5684 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
5685 ; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
5686 ; VI-SDAG-NEXT: v_div_scale_f64 v[2:3], s[6:7], v[0:1], v[0:1], s[4:5]
5687 ; VI-SDAG-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
5688 ; VI-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5689 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5690 ; VI-SDAG-NEXT: v_div_scale_f64 v[6:7], vcc, s[4:5], v[0:1], s[4:5]
5691 ; VI-SDAG-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
5692 ; VI-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5693 ; VI-SDAG-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
5694 ; VI-SDAG-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
5695 ; VI-SDAG-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
5696 ; VI-SDAG-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], s[4:5]
5697 ; VI-SDAG-NEXT: s_setpc_b64 s[30:31]
5699 ; VI-GISEL-LABEL: v_div_const_contract_sqrt_f64:
5700 ; VI-GISEL: ; %bb.0:
5701 ; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5702 ; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0
5703 ; VI-GISEL-NEXT: v_bfrev_b32_e32 v3, 8
5704 ; VI-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
5705 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x100
5706 ; VI-GISEL-NEXT: s_mov_b32 s4, 0
5707 ; VI-GISEL-NEXT: s_mov_b32 s5, 0x40700000
5708 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
5709 ; VI-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2
5710 ; VI-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]
5711 ; VI-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5
5712 ; VI-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]
5713 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
5714 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
5715 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5716 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
5717 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
5718 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
5719 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
5720 ; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80
5721 ; VI-GISEL-NEXT: v_mov_b32_e32 v5, 0x260
5722 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc
5723 ; VI-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5
5724 ; VI-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4
5725 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc
5726 ; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc
5727 ; VI-GISEL-NEXT: v_div_scale_f64 v[2:3], s[6:7], v[0:1], v[0:1], s[4:5]
5728 ; VI-GISEL-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
5729 ; VI-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5730 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5731 ; VI-GISEL-NEXT: v_div_scale_f64 v[6:7], vcc, s[4:5], v[0:1], s[4:5]
5732 ; VI-GISEL-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
5733 ; VI-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5734 ; VI-GISEL-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
5735 ; VI-GISEL-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
5736 ; VI-GISEL-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
5737 ; VI-GISEL-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], s[4:5]
5738 ; VI-GISEL-NEXT: s_setpc_b64 s[30:31]
5739 %sqrt = call contract double @llvm.sqrt.f64(double %x)
5740 %rsq = fdiv contract double 256.0, %sqrt
5744 attributes #0 = { "unsafe-fp-math"="true" }
5745 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: