Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / rsq.f64.ll
blobbd6e1f54e636d898fbecff4644f7596952f6780a
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,SDAG,SI-SDAG %s
3 ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GISEL,SI-GISEL %s
5 ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=fiji < %s | FileCheck -check-prefixes=GCN,SDAG,VI-SDAG %s
6 ; RUN: llc -global-isel=1 -mtriple=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:
17 ; SI-SDAG:       ; %bb.0:
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:
61 ; SI-GISEL:       ; %bb.0:
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 v8, 0xffffff80
66 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
67 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
68 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
69 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
70 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
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:
105 ; VI-SDAG:       ; %bb.0:
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:
145 ; VI-GISEL:       ; %bb.0:
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_cndmask_b32_e64 v0, 0, 1, vcc
150 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
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:
197 ; SI-SDAG:       ; %bb.0:
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:
241 ; SI-GISEL:       ; %bb.0:
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 v8, 0xffffff80
246 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
247 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
248 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], |s[0:1]|, v0
249 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
250 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
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:
285 ; VI-SDAG:       ; %bb.0:
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:
325 ; VI-GISEL:       ; %bb.0:
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_cndmask_b32_e64 v0, 0, 1, vcc
330 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
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:
378 ; SI-SDAG:       ; %bb.0:
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:
422 ; SI-GISEL:       ; %bb.0:
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 v8, 0xffffff80
427 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
428 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
429 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
430 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
431 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
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:
466 ; VI-SDAG:       ; %bb.0:
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:
506 ; VI-GISEL:       ; %bb.0:
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_cndmask_b32_e64 v0, 0, 1, vcc
511 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
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:
558 ; SI-SDAG:       ; %bb.0:
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:
602 ; SI-GISEL:       ; %bb.0:
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 v8, 0xffffff80
607 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
608 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
609 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], -s[0:1], v0
610 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
611 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
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:
646 ; VI-SDAG:       ; %bb.0:
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:
686 ; VI-GISEL:       ; %bb.0:
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_cndmask_b32_e64 v0, 0, 1, vcc
691 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
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:
739 ; SI-SDAG:       ; %bb.0:
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:
782 ; SI-GISEL:       ; %bb.0:
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 v8, 0xffffff80
788 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
789 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
790 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
791 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
792 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
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:
825 ; VI-SDAG:       ; %bb.0:
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:
864 ; VI-GISEL:       ; %bb.0:
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_cndmask_b32_e64 v2, 0, 1, vcc
870 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
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
903   ret double %rsq
906 define double @v_rsq_f64_fabs(double %x) {
907 ; SI-SDAG-LABEL: v_rsq_f64_fabs:
908 ; SI-SDAG:       ; %bb.0:
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:
951 ; SI-GISEL:       ; %bb.0:
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 v8, 0xffffff80
957 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
958 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
959 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], |v[0:1]|, v2
960 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
961 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
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:
994 ; VI-SDAG:       ; %bb.0:
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_cndmask_b32_e64 v2, 0, 1, vcc
1039 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
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
1073   ret double %rsq
1076 define double @v_rsq_f64_missing_contract0(double %x) {
1077 ; SI-SDAG-LABEL: v_rsq_f64_missing_contract0:
1078 ; SI-SDAG:       ; %bb.0:
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 v8, 0xffffff80
1127 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1128 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
1129 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1130 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
1131 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
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:
1164 ; VI-SDAG:       ; %bb.0:
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_cndmask_b32_e64 v2, 0, 1, vcc
1209 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
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
1242   ret double %rsq
1245 define double @v_rsq_f64_missing_contract1(double %x) {
1246 ; SI-SDAG-LABEL: v_rsq_f64_missing_contract1:
1247 ; SI-SDAG:       ; %bb.0:
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 v8, 0xffffff80
1296 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1297 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
1298 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1299 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
1300 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
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:
1333 ; VI-SDAG:       ; %bb.0:
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_cndmask_b32_e64 v2, 0, 1, vcc
1378 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
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
1411   ret double %rsq
1414 define double @v_neg_rsq_f64(double %x) {
1415 ; SI-SDAG-LABEL: v_neg_rsq_f64:
1416 ; SI-SDAG:       ; %bb.0:
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 v8, 0xffffff80
1465 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1466 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
1467 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
1468 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
1469 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
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:
1502 ; VI-SDAG:       ; %bb.0:
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_cndmask_b32_e64 v2, 0, 1, vcc
1547 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
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
1580   ret double %rsq
1583 define <2 x double> @v_rsq_v2f64(<2 x double> %x) {
1584 ; SI-SDAG-LABEL: v_rsq_v2f64:
1585 ; SI-SDAG:       ; %bb.0:
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 v10, s4
1668 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1669 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1670 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
1671 ; SI-GISEL-NEXT:    v_mov_b32_e32 v11, s5
1672 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
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_mov_b32_e32 v15, 0x260
1676 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
1677 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
1678 ; SI-GISEL-NEXT:    v_mov_b32_e32 v20, 0x3ff00000
1679 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
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, 1, s[4:5]
1687 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
1688 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v6
1689 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v14, vcc
1690 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
1691 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v8
1692 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v15
1693 ; SI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], 0.5
1694 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
1695 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
1696 ; SI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[8:9], v[6:7], 0.5
1697 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
1698 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[6:7], v[10:11], v[6:7]
1699 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[8:9], v[10:11], v[8:9]
1700 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
1701 ; SI-GISEL-NEXT:    v_div_scale_f64 v[10:11], s[6:7], v[0:1], v[0:1], 1.0
1702 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
1703 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v15
1704 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
1705 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[12:13], v[10:11]
1706 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
1707 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, v14, s[4:5]
1708 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
1709 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[10:11], v[12:13], 1.0
1710 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
1711 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
1712 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[12:13], v[6:7], v[12:13]
1713 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[4:5], v[2:3], v[2:3], 1.0
1714 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[10:11], v[6:7], 1.0
1715 ; SI-GISEL-NEXT:    v_div_scale_f64 v[12:13], s[4:5], 1.0, v[0:1], 1.0
1716 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[6:7], v[4:5], v[6:7]
1717 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[8:9]
1718 ; SI-GISEL-NEXT:    v_mul_f64 v[14:15], v[12:13], v[4:5]
1719 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v20, v13
1720 ; SI-GISEL-NEXT:    v_fma_f64 v[16:17], -v[10:11], v[14:15], v[12:13]
1721 ; SI-GISEL-NEXT:    v_fma_f64 v[18:19], -v[8:9], v[6:7], 1.0
1722 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[18:19], v[6:7]
1723 ; SI-GISEL-NEXT:    v_div_scale_f64 v[18:19], s[4:5], 1.0, v[2:3], 1.0
1724 ; SI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[6:7], 1.0
1725 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v11
1726 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
1727 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
1728 ; SI-GISEL-NEXT:    v_mul_f64 v[10:11], v[18:19], v[6:7]
1729 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
1730 ; SI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[10:11], v[18:19]
1731 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v20, v19
1732 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v3, v9
1733 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
1734 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1735 ; SI-GISEL-NEXT:    s_nop 0
1736 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[10:11]
1737 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1738 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
1740 ; VI-SDAG-LABEL: v_rsq_v2f64:
1741 ; VI-SDAG:       ; %bb.0:
1742 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1743 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
1744 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
1745 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
1746 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
1747 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1748 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1749 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1750 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
1751 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1752 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
1753 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
1754 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[6:7], v[0:1]
1755 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[2:3], v[4:5]
1756 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
1757 ; VI-SDAG-NEXT:    v_mul_f64 v[10:11], v[0:1], v[6:7]
1758 ; VI-SDAG-NEXT:    v_mul_f64 v[6:7], v[6:7], 0.5
1759 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
1760 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
1761 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1762 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1763 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1764 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1765 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
1766 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
1767 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
1768 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
1769 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
1770 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
1771 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
1772 ; VI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
1773 ; VI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
1774 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
1775 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
1776 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
1777 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
1778 ; VI-SDAG-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
1779 ; VI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
1780 ; VI-SDAG-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
1781 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v3, v5, v3, s[4:5]
1782 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v4, v2, s[4:5]
1783 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v7, v1, vcc
1784 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v6, v0, vcc
1785 ; VI-SDAG-NEXT:    v_div_scale_f64 v[5:6], s[6:7], v[0:1], v[0:1], 1.0
1786 ; VI-SDAG-NEXT:    v_div_scale_f64 v[7:8], s[4:5], v[2:3], v[2:3], 1.0
1787 ; VI-SDAG-NEXT:    v_div_scale_f64 v[17:18], s[4:5], 1.0, v[2:3], 1.0
1788 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[9:10], v[5:6]
1789 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[11:12], v[7:8]
1790 ; VI-SDAG-NEXT:    v_fma_f64 v[13:14], -v[5:6], v[9:10], 1.0
1791 ; VI-SDAG-NEXT:    v_fma_f64 v[15:16], -v[7:8], v[11:12], 1.0
1792 ; VI-SDAG-NEXT:    v_fma_f64 v[9:10], v[9:10], v[13:14], v[9:10]
1793 ; VI-SDAG-NEXT:    v_div_scale_f64 v[13:14], vcc, 1.0, v[0:1], 1.0
1794 ; VI-SDAG-NEXT:    v_fma_f64 v[11:12], v[11:12], v[15:16], v[11:12]
1795 ; VI-SDAG-NEXT:    v_fma_f64 v[15:16], -v[5:6], v[9:10], 1.0
1796 ; VI-SDAG-NEXT:    v_fma_f64 v[19:20], -v[7:8], v[11:12], 1.0
1797 ; VI-SDAG-NEXT:    v_fma_f64 v[9:10], v[9:10], v[15:16], v[9:10]
1798 ; VI-SDAG-NEXT:    v_fma_f64 v[11:12], v[11:12], v[19:20], v[11:12]
1799 ; VI-SDAG-NEXT:    v_mul_f64 v[15:16], v[13:14], v[9:10]
1800 ; VI-SDAG-NEXT:    v_mul_f64 v[19:20], v[17:18], v[11:12]
1801 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[5:6], v[15:16], v[13:14]
1802 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[7:8], v[19:20], v[17:18]
1803 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[9:10], v[15:16]
1804 ; VI-SDAG-NEXT:    s_mov_b64 vcc, s[4:5]
1805 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[6:7], v[6:7], v[11:12], v[19:20]
1806 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1807 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1808 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
1810 ; VI-GISEL-LABEL: v_rsq_v2f64:
1811 ; VI-GISEL:       ; %bb.0:
1812 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1813 ; VI-GISEL-NEXT:    s_mov_b32 s4, 0
1814 ; VI-GISEL-NEXT:    s_brev_b32 s5, 8
1815 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, s4
1816 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, s5
1817 ; VI-GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1818 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
1819 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1820 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
1821 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
1822 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v6
1823 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1824 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1825 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
1826 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
1827 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[4:5], 0.5
1828 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
1829 ; VI-GISEL-NEXT:    v_mul_f64 v[10:11], v[6:7], 0.5
1830 ; VI-GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
1831 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
1832 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
1833 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1834 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1835 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1836 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1837 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
1838 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
1839 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
1840 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
1841 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
1842 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
1843 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
1844 ; VI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
1845 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
1846 ; VI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
1847 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
1848 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
1849 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
1850 ; VI-GISEL-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
1851 ; VI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
1852 ; VI-GISEL-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
1853 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
1854 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
1855 ; VI-GISEL-NEXT:    v_div_scale_f64 v[4:5], s[6:7], v[0:1], v[0:1], 1.0
1856 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
1857 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
1858 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0
1859 ; VI-GISEL-NEXT:    v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1860 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[8:9], v[4:5]
1861 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[10:11], v[6:7]
1862 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1863 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1864 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1865 ; VI-GISEL-NEXT:    v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0
1866 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1867 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
1868 ; VI-GISEL-NEXT:    v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
1869 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
1870 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
1871 ; VI-GISEL-NEXT:    v_mul_f64 v[14:15], v[12:13], v[8:9]
1872 ; VI-GISEL-NEXT:    v_mul_f64 v[18:19], v[16:17], v[10:11]
1873 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
1874 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
1875 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1876 ; VI-GISEL-NEXT:    s_mov_b64 vcc, s[4:5]
1877 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1878 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1879 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1880 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
1881   %sqrt = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
1882   %rsq = fdiv <2 x double> <double 1.0, double 1.0>, %sqrt
1883   ret <2 x double> %rsq
1886 define <2 x double> @v_neg_rsq_v2f64(<2 x double> %x) {
1887 ; SI-SDAG-LABEL: v_neg_rsq_v2f64:
1888 ; SI-SDAG:       ; %bb.0:
1889 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1890 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
1891 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
1892 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
1893 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
1894 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1895 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v6, 0, 1, s[4:5]
1896 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
1897 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v6
1898 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1899 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[6:7], v[0:1]
1900 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
1901 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0xbff00000
1902 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
1903 ; SI-SDAG-NEXT:    v_mul_f64 v[10:11], v[0:1], v[6:7]
1904 ; SI-SDAG-NEXT:    v_mul_f64 v[6:7], v[6:7], 0.5
1905 ; SI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
1906 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[2:3], v[4:5]
1907 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1908 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
1909 ; SI-SDAG-NEXT:    v_fma_f64 v[18:19], -v[10:11], v[10:11], v[0:1]
1910 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
1911 ; SI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
1912 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], v[18:19], v[6:7], v[10:11]
1913 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1914 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
1915 ; SI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[10:11], v[10:11], v[0:1]
1916 ; SI-SDAG-NEXT:    v_mov_b32_e32 v14, 0xffffff80
1917 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[12:13], v[6:7], v[10:11]
1918 ; SI-SDAG-NEXT:    v_mov_b32_e32 v15, 0x260
1919 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v10, 0, v14, s[4:5]
1920 ; SI-SDAG-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v10
1921 ; SI-SDAG-NEXT:    v_cmp_class_f64_e64 s[4:5], v[0:1], v15
1922 ; SI-SDAG-NEXT:    v_fma_f64 v[16:17], -v[8:9], v[8:9], v[2:3]
1923 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v1, v7, v1, s[4:5]
1924 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v6, v0, s[4:5]
1925 ; SI-SDAG-NEXT:    v_div_scale_f64 v[6:7], s[4:5], v[0:1], v[0:1], -1.0
1926 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], v[16:17], v[4:5], v[8:9]
1927 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[8:9], v[8:9], v[2:3]
1928 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[12:13], v[6:7]
1929 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[10:11], v[4:5], v[8:9]
1930 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v8, 0, v14, vcc
1931 ; SI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v8
1932 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v15
1933 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[12:13], 1.0
1934 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
1935 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
1936 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], v[12:13], v[8:9], v[12:13]
1937 ; SI-SDAG-NEXT:    v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], -1.0
1938 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[6:7], v[8:9], 1.0
1939 ; SI-SDAG-NEXT:    v_div_scale_f64 v[12:13], s[4:5], -1.0, v[0:1], -1.0
1940 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[8:9]
1941 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[8:9], v[10:11]
1942 ; SI-SDAG-NEXT:    v_mul_f64 v[14:15], v[12:13], v[4:5]
1943 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v7
1944 ; SI-SDAG-NEXT:    v_fma_f64 v[16:17], -v[6:7], v[14:15], v[12:13]
1945 ; SI-SDAG-NEXT:    v_fma_f64 v[18:19], -v[10:11], v[8:9], 1.0
1946 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[8:9], v[18:19], v[8:9]
1947 ; SI-SDAG-NEXT:    v_div_scale_f64 v[18:19], s[4:5], -1.0, v[2:3], -1.0
1948 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[10:11], v[6:7], 1.0
1949 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s6, v13
1950 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
1951 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
1952 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[18:19], v[6:7]
1953 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
1954 ; SI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[10:11], v[8:9], v[18:19]
1955 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v11
1956 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s6, v19
1957 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
1958 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
1959 ; SI-SDAG-NEXT:    s_nop 0
1960 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[8:9]
1961 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], -1.0
1962 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
1964 ; SI-GISEL-LABEL: v_neg_rsq_v2f64:
1965 ; SI-GISEL:       ; %bb.0:
1966 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1967 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0
1968 ; SI-GISEL-NEXT:    s_brev_b32 s5, 8
1969 ; SI-GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
1970 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, s4
1971 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1972 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
1973 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
1974 ; SI-GISEL-NEXT:    v_mov_b32_e32 v11, s5
1975 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
1976 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[10:11]
1977 ; SI-GISEL-NEXT:    v_mov_b32_e32 v14, 0xffffff80
1978 ; SI-GISEL-NEXT:    v_mov_b32_e32 v15, 0x260
1979 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
1980 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
1981 ; SI-GISEL-NEXT:    v_mov_b32_e32 v20, 0xbff00000
1982 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
1983 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
1984 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
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_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
1988 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
1989 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, s[4:5]
1990 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
1991 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v6
1992 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v14, vcc
1993 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
1994 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v8
1995 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v15
1996 ; SI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], 0.5
1997 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
1998 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
1999 ; SI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[8:9], v[6:7], 0.5
2000 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
2001 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[6:7], v[10:11], v[6:7]
2002 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[8:9], v[10:11], v[8:9]
2003 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2004 ; SI-GISEL-NEXT:    v_div_scale_f64 v[10:11], s[6:7], v[0:1], v[0:1], -1.0
2005 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2006 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v15
2007 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2008 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[12:13], v[10:11]
2009 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2010 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, v14, s[4:5]
2011 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
2012 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[10:11], v[12:13], 1.0
2013 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
2014 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
2015 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[12:13], v[6:7], v[12:13]
2016 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[4:5], v[2:3], v[2:3], -1.0
2017 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[10:11], v[6:7], 1.0
2018 ; SI-GISEL-NEXT:    v_div_scale_f64 v[12:13], s[4:5], -1.0, v[0:1], -1.0
2019 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[6:7], v[4:5], v[6:7]
2020 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[8:9]
2021 ; SI-GISEL-NEXT:    v_mul_f64 v[14:15], v[12:13], v[4:5]
2022 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v20, v13
2023 ; SI-GISEL-NEXT:    v_fma_f64 v[16:17], -v[10:11], v[14:15], v[12:13]
2024 ; SI-GISEL-NEXT:    v_fma_f64 v[18:19], -v[8:9], v[6:7], 1.0
2025 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[18:19], v[6:7]
2026 ; SI-GISEL-NEXT:    v_div_scale_f64 v[18:19], s[4:5], -1.0, v[2:3], -1.0
2027 ; SI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[6:7], 1.0
2028 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v11
2029 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
2030 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
2031 ; SI-GISEL-NEXT:    v_mul_f64 v[10:11], v[18:19], v[6:7]
2032 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
2033 ; SI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[10:11], v[18:19]
2034 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v20, v19
2035 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v3, v9
2036 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
2037 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2038 ; SI-GISEL-NEXT:    s_nop 0
2039 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[10:11]
2040 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], -1.0
2041 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2043 ; VI-SDAG-LABEL: v_neg_rsq_v2f64:
2044 ; VI-SDAG:       ; %bb.0:
2045 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2046 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
2047 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
2048 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
2049 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
2050 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2051 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
2052 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2053 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2054 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
2055 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
2056 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
2057 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[6:7], v[0:1]
2058 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[2:3], v[4:5]
2059 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
2060 ; VI-SDAG-NEXT:    v_mul_f64 v[10:11], v[0:1], v[6:7]
2061 ; VI-SDAG-NEXT:    v_mul_f64 v[6:7], v[6:7], 0.5
2062 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
2063 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
2064 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2065 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2066 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2067 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2068 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
2069 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
2070 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
2071 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
2072 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
2073 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
2074 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
2075 ; VI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
2076 ; VI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
2077 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
2078 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
2079 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
2080 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
2081 ; VI-SDAG-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
2082 ; VI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
2083 ; VI-SDAG-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
2084 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v3, v5, v3, s[4:5]
2085 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v4, v2, s[4:5]
2086 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v7, v1, vcc
2087 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v6, v0, vcc
2088 ; VI-SDAG-NEXT:    v_div_scale_f64 v[5:6], s[6:7], v[0:1], v[0:1], -1.0
2089 ; VI-SDAG-NEXT:    v_div_scale_f64 v[7:8], s[4:5], v[2:3], v[2:3], -1.0
2090 ; VI-SDAG-NEXT:    v_div_scale_f64 v[17:18], s[4:5], -1.0, v[2:3], -1.0
2091 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[9:10], v[5:6]
2092 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[11:12], v[7:8]
2093 ; VI-SDAG-NEXT:    v_fma_f64 v[13:14], -v[5:6], v[9:10], 1.0
2094 ; VI-SDAG-NEXT:    v_fma_f64 v[15:16], -v[7:8], v[11:12], 1.0
2095 ; VI-SDAG-NEXT:    v_fma_f64 v[9:10], v[9:10], v[13:14], v[9:10]
2096 ; VI-SDAG-NEXT:    v_div_scale_f64 v[13:14], vcc, -1.0, v[0:1], -1.0
2097 ; VI-SDAG-NEXT:    v_fma_f64 v[11:12], v[11:12], v[15:16], v[11:12]
2098 ; VI-SDAG-NEXT:    v_fma_f64 v[15:16], -v[5:6], v[9:10], 1.0
2099 ; VI-SDAG-NEXT:    v_fma_f64 v[19:20], -v[7:8], v[11:12], 1.0
2100 ; VI-SDAG-NEXT:    v_fma_f64 v[9:10], v[9:10], v[15:16], v[9:10]
2101 ; VI-SDAG-NEXT:    v_fma_f64 v[11:12], v[11:12], v[19:20], v[11:12]
2102 ; VI-SDAG-NEXT:    v_mul_f64 v[15:16], v[13:14], v[9:10]
2103 ; VI-SDAG-NEXT:    v_mul_f64 v[19:20], v[17:18], v[11:12]
2104 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[5:6], v[15:16], v[13:14]
2105 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[7:8], v[19:20], v[17:18]
2106 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[9:10], v[15:16]
2107 ; VI-SDAG-NEXT:    s_mov_b64 vcc, s[4:5]
2108 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[6:7], v[6:7], v[11:12], v[19:20]
2109 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2110 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], -1.0
2111 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2113 ; VI-GISEL-LABEL: v_neg_rsq_v2f64:
2114 ; VI-GISEL:       ; %bb.0:
2115 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2116 ; VI-GISEL-NEXT:    s_mov_b32 s4, 0
2117 ; VI-GISEL-NEXT:    s_brev_b32 s5, 8
2118 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, s4
2119 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, s5
2120 ; VI-GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2121 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
2122 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2123 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
2124 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2125 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v6
2126 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
2127 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2128 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
2129 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
2130 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[4:5], 0.5
2131 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
2132 ; VI-GISEL-NEXT:    v_mul_f64 v[10:11], v[6:7], 0.5
2133 ; VI-GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
2134 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
2135 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
2136 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2137 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2138 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2139 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
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_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2144 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2145 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2146 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2147 ; VI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
2148 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2149 ; VI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
2150 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
2151 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
2152 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
2153 ; VI-GISEL-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
2154 ; VI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
2155 ; VI-GISEL-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
2156 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
2157 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
2158 ; VI-GISEL-NEXT:    v_div_scale_f64 v[4:5], s[6:7], v[0:1], v[0:1], -1.0
2159 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
2160 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
2161 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], -1.0
2162 ; VI-GISEL-NEXT:    v_div_scale_f64 v[16:17], s[4:5], -1.0, v[2:3], -1.0
2163 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[8:9], v[4:5]
2164 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[10:11], v[6:7]
2165 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
2166 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
2167 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2168 ; VI-GISEL-NEXT:    v_div_scale_f64 v[12:13], vcc, -1.0, v[0:1], -1.0
2169 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2170 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
2171 ; VI-GISEL-NEXT:    v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
2172 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
2173 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
2174 ; VI-GISEL-NEXT:    v_mul_f64 v[14:15], v[12:13], v[8:9]
2175 ; VI-GISEL-NEXT:    v_mul_f64 v[18:19], v[16:17], v[10:11]
2176 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
2177 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
2178 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
2179 ; VI-GISEL-NEXT:    s_mov_b64 vcc, s[4:5]
2180 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
2181 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2182 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], -1.0
2183 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2184   %sqrt = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
2185   %rsq = fdiv <2 x double> <double -1.0, double -1.0>, %sqrt
2186   ret <2 x double> %rsq
2189 define <2 x double> @v_neg_rsq_v2f64_poisonelt(<2 x double> %x) {
2190 ; SI-SDAG-LABEL: v_neg_rsq_v2f64_poisonelt:
2191 ; SI-SDAG:       ; %bb.0:
2192 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2193 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
2194 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
2195 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2196 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
2197 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2198 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
2199 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
2200 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
2201 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
2202 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0xbff00000
2203 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
2204 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
2205 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2206 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2207 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2208 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2209 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
2210 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2211 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
2212 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
2213 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2214 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
2215 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
2216 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
2217 ; SI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
2218 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
2219 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v3
2220 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2221 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2222 ; SI-SDAG-NEXT:    v_div_scale_f64 v[6:7], s[4:5], -1.0, v[0:1], -1.0
2223 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2224 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2225 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s6, v7
2226 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
2227 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
2228 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2229 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2230 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
2231 ; SI-SDAG-NEXT:    v_mov_b32_e32 v2, 0
2232 ; SI-SDAG-NEXT:    v_mov_b32_e32 v3, 0x7ff80000
2233 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2235 ; SI-GISEL-LABEL: v_neg_rsq_v2f64_poisonelt:
2236 ; SI-GISEL:       ; %bb.0:
2237 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2238 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0
2239 ; SI-GISEL-NEXT:    s_brev_b32 s5, 8
2240 ; SI-GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2241 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, s4
2242 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2243 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
2244 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
2245 ; SI-GISEL-NEXT:    v_mov_b32_e32 v11, s5
2246 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
2247 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[10:11]
2248 ; SI-GISEL-NEXT:    v_mov_b32_e32 v14, 0xffffff80
2249 ; SI-GISEL-NEXT:    v_mov_b32_e32 v15, 0x260
2250 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
2251 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
2252 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
2253 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2254 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
2255 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
2256 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2257 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
2258 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2259 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, s[4:5]
2260 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
2261 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v6
2262 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v14, vcc
2263 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
2264 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v8
2265 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v15
2266 ; SI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], 0.5
2267 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
2268 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
2269 ; SI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[8:9], v[6:7], 0.5
2270 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
2271 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[6:7], v[10:11], v[6:7]
2272 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[8:9], v[10:11], v[8:9]
2273 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2274 ; SI-GISEL-NEXT:    v_div_scale_f64 v[10:11], s[6:7], v[0:1], v[0:1], -1.0
2275 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2276 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v15
2277 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2278 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[12:13], v[10:11]
2279 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2280 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, v14, s[4:5]
2281 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
2282 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[10:11], v[12:13], 1.0
2283 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
2284 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
2285 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[12:13], v[6:7], v[12:13]
2286 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[4:5], v[2:3], v[2:3], s[4:5]
2287 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[10:11], v[6:7], 1.0
2288 ; SI-GISEL-NEXT:    v_div_scale_f64 v[12:13], s[4:5], -1.0, v[0:1], -1.0
2289 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[6:7], v[4:5], v[6:7]
2290 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[8:9]
2291 ; SI-GISEL-NEXT:    v_mul_f64 v[14:15], v[12:13], v[4:5]
2292 ; SI-GISEL-NEXT:    v_fma_f64 v[16:17], -v[10:11], v[14:15], v[12:13]
2293 ; SI-GISEL-NEXT:    v_fma_f64 v[18:19], -v[8:9], v[6:7], 1.0
2294 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0xbff00000
2295 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[18:19], v[6:7]
2296 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v10, v13
2297 ; SI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[6:7], 1.0
2298 ; SI-GISEL-NEXT:    v_div_scale_f64 v[18:19], s[4:5], s[4:5], v[2:3], s[4:5]
2299 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
2300 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v11
2301 ; SI-GISEL-NEXT:    v_mul_f64 v[10:11], v[18:19], v[6:7]
2302 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
2303 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
2304 ; SI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[10:11], v[18:19]
2305 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, s4, v19
2306 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v3, v9
2307 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
2308 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2309 ; SI-GISEL-NEXT:    s_nop 0
2310 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[10:11]
2311 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], s[4:5]
2312 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2314 ; VI-SDAG-LABEL: v_neg_rsq_v2f64_poisonelt:
2315 ; VI-SDAG:       ; %bb.0:
2316 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2317 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
2318 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
2319 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2320 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2321 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
2322 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
2323 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
2324 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
2325 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
2326 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2327 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2328 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2329 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2330 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
2331 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2332 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
2333 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
2334 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
2335 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
2336 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
2337 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2338 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
2339 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
2340 ; VI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
2341 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
2342 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2343 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2344 ; VI-SDAG-NEXT:    v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
2345 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2346 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2347 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
2348 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2349 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2350 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
2351 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0
2352 ; VI-SDAG-NEXT:    v_mov_b32_e32 v3, 0x7ff80000
2353 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2355 ; VI-GISEL-LABEL: v_neg_rsq_v2f64_poisonelt:
2356 ; VI-GISEL:       ; %bb.0:
2357 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2358 ; VI-GISEL-NEXT:    s_mov_b32 s4, 0
2359 ; VI-GISEL-NEXT:    s_brev_b32 s5, 8
2360 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, s4
2361 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, s5
2362 ; VI-GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2363 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
2364 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2365 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
2366 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2367 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v6
2368 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
2369 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2370 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
2371 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
2372 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[4:5], 0.5
2373 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
2374 ; VI-GISEL-NEXT:    v_mul_f64 v[10:11], v[6:7], 0.5
2375 ; VI-GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
2376 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
2377 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
2378 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2379 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2380 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2381 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2382 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2383 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2384 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2385 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2386 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2387 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2388 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2389 ; VI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
2390 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2391 ; VI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
2392 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
2393 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
2394 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
2395 ; VI-GISEL-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
2396 ; VI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
2397 ; VI-GISEL-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
2398 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
2399 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
2400 ; VI-GISEL-NEXT:    v_div_scale_f64 v[4:5], s[6:7], v[0:1], v[0:1], -1.0
2401 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
2402 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
2403 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], s[4:5]
2404 ; VI-GISEL-NEXT:    v_div_scale_f64 v[16:17], s[4:5], s[4:5], v[2:3], s[4:5]
2405 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[8:9], v[4:5]
2406 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[10:11], v[6:7]
2407 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
2408 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
2409 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2410 ; VI-GISEL-NEXT:    v_div_scale_f64 v[12:13], vcc, -1.0, v[0:1], -1.0
2411 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2412 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
2413 ; VI-GISEL-NEXT:    v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
2414 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
2415 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
2416 ; VI-GISEL-NEXT:    v_mul_f64 v[14:15], v[12:13], v[8:9]
2417 ; VI-GISEL-NEXT:    v_mul_f64 v[18:19], v[16:17], v[10:11]
2418 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
2419 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
2420 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
2421 ; VI-GISEL-NEXT:    s_mov_b64 vcc, s[4:5]
2422 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
2423 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2424 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], s[4:5]
2425 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2426   %sqrt = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
2427   %rsq = fdiv <2 x double> <double -1.0, double poison>, %sqrt
2428   ret <2 x double> %rsq
2431 define <2 x double> @v_neg_pos_rsq_v2f64(<2 x double> %x) {
2432 ; SI-SDAG-LABEL: v_neg_pos_rsq_v2f64:
2433 ; SI-SDAG:       ; %bb.0:
2434 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2435 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
2436 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
2437 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
2438 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
2439 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2440 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v6, 0, 1, s[4:5]
2441 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
2442 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v6
2443 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
2444 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[6:7], v[0:1]
2445 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2446 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0xbff00000
2447 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
2448 ; SI-SDAG-NEXT:    v_mul_f64 v[10:11], v[0:1], v[6:7]
2449 ; SI-SDAG-NEXT:    v_mul_f64 v[6:7], v[6:7], 0.5
2450 ; SI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
2451 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[2:3], v[4:5]
2452 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2453 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
2454 ; SI-SDAG-NEXT:    v_fma_f64 v[18:19], -v[10:11], v[10:11], v[0:1]
2455 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2456 ; SI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
2457 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], v[18:19], v[6:7], v[10:11]
2458 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2459 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2460 ; SI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[10:11], v[10:11], v[0:1]
2461 ; SI-SDAG-NEXT:    v_mov_b32_e32 v14, 0xffffff80
2462 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[12:13], v[6:7], v[10:11]
2463 ; SI-SDAG-NEXT:    v_mov_b32_e32 v15, 0x260
2464 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v10, 0, v14, s[4:5]
2465 ; SI-SDAG-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v10
2466 ; SI-SDAG-NEXT:    v_cmp_class_f64_e64 s[4:5], v[0:1], v15
2467 ; SI-SDAG-NEXT:    v_fma_f64 v[16:17], -v[8:9], v[8:9], v[2:3]
2468 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v1, v7, v1, s[4:5]
2469 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v6, v0, s[4:5]
2470 ; SI-SDAG-NEXT:    v_div_scale_f64 v[6:7], s[4:5], v[0:1], v[0:1], -1.0
2471 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], v[16:17], v[4:5], v[8:9]
2472 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[8:9], v[8:9], v[2:3]
2473 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[12:13], v[6:7]
2474 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[10:11], v[4:5], v[8:9]
2475 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v8, 0, v14, vcc
2476 ; SI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v8
2477 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v15
2478 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[12:13], 1.0
2479 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
2480 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
2481 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], v[12:13], v[8:9], v[12:13]
2482 ; SI-SDAG-NEXT:    v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], 1.0
2483 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[6:7], v[8:9], 1.0
2484 ; SI-SDAG-NEXT:    v_div_scale_f64 v[12:13], s[4:5], -1.0, v[0:1], -1.0
2485 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[8:9]
2486 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[8:9], v[10:11]
2487 ; SI-SDAG-NEXT:    v_mul_f64 v[14:15], v[12:13], v[4:5]
2488 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v7
2489 ; SI-SDAG-NEXT:    v_fma_f64 v[16:17], -v[6:7], v[14:15], v[12:13]
2490 ; SI-SDAG-NEXT:    v_fma_f64 v[18:19], -v[10:11], v[8:9], 1.0
2491 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[8:9], v[18:19], v[8:9]
2492 ; SI-SDAG-NEXT:    v_div_scale_f64 v[18:19], s[4:5], 1.0, v[2:3], 1.0
2493 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[10:11], v[6:7], 1.0
2494 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s6, v13
2495 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
2496 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
2497 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[18:19], v[6:7]
2498 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3ff00000
2499 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
2500 ; SI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[10:11], v[8:9], v[18:19]
2501 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v11
2502 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s4, v19
2503 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
2504 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2505 ; SI-SDAG-NEXT:    s_nop 0
2506 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[8:9]
2507 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
2508 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2510 ; SI-GISEL-LABEL: v_neg_pos_rsq_v2f64:
2511 ; SI-GISEL:       ; %bb.0:
2512 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2513 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0
2514 ; SI-GISEL-NEXT:    s_brev_b32 s5, 8
2515 ; SI-GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2516 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, s4
2517 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2518 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
2519 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
2520 ; SI-GISEL-NEXT:    v_mov_b32_e32 v11, s5
2521 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
2522 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[10:11]
2523 ; SI-GISEL-NEXT:    v_mov_b32_e32 v14, 0xffffff80
2524 ; SI-GISEL-NEXT:    v_mov_b32_e32 v15, 0x260
2525 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
2526 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
2527 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
2528 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2529 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
2530 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
2531 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2532 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
2533 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2534 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, s[4:5]
2535 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
2536 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v6
2537 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v14, vcc
2538 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
2539 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v8
2540 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v15
2541 ; SI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], 0.5
2542 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
2543 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
2544 ; SI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[8:9], v[6:7], 0.5
2545 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
2546 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[6:7], v[10:11], v[6:7]
2547 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[8:9], v[10:11], v[8:9]
2548 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2549 ; SI-GISEL-NEXT:    v_div_scale_f64 v[10:11], s[6:7], v[0:1], v[0:1], -1.0
2550 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2551 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v15
2552 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
2553 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[12:13], v[10:11]
2554 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
2555 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, v14, s[4:5]
2556 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
2557 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[10:11], v[12:13], 1.0
2558 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
2559 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
2560 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[12:13], v[6:7], v[12:13]
2561 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[4:5], v[2:3], v[2:3], 1.0
2562 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[10:11], v[6:7], 1.0
2563 ; SI-GISEL-NEXT:    v_div_scale_f64 v[12:13], s[4:5], -1.0, v[0:1], -1.0
2564 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[6:7], v[4:5], v[6:7]
2565 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[8:9]
2566 ; SI-GISEL-NEXT:    v_mul_f64 v[14:15], v[12:13], v[4:5]
2567 ; SI-GISEL-NEXT:    v_fma_f64 v[16:17], -v[10:11], v[14:15], v[12:13]
2568 ; SI-GISEL-NEXT:    v_fma_f64 v[18:19], -v[8:9], v[6:7], 1.0
2569 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0xbff00000
2570 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[18:19], v[6:7]
2571 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v10, v13
2572 ; SI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[6:7], 1.0
2573 ; SI-GISEL-NEXT:    v_div_scale_f64 v[18:19], s[4:5], 1.0, v[2:3], 1.0
2574 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
2575 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v11
2576 ; SI-GISEL-NEXT:    v_mul_f64 v[10:11], v[18:19], v[6:7]
2577 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
2578 ; SI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[10:11], v[18:19]
2579 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0x3ff00000
2580 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[16:17], v[4:5], v[14:15]
2581 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v8, v19
2582 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v3, v9
2583 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
2584 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2585 ; SI-GISEL-NEXT:    s_nop 0
2586 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[6:7], v[12:13], v[6:7], v[10:11]
2587 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
2588 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2590 ; VI-SDAG-LABEL: v_neg_pos_rsq_v2f64:
2591 ; VI-SDAG:       ; %bb.0:
2592 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2593 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
2594 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
2595 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
2596 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
2597 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
2598 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
2599 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2600 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2601 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
2602 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
2603 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
2604 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[6:7], v[0:1]
2605 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[2:3], v[4:5]
2606 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
2607 ; VI-SDAG-NEXT:    v_mul_f64 v[10:11], v[0:1], v[6:7]
2608 ; VI-SDAG-NEXT:    v_mul_f64 v[6:7], v[6:7], 0.5
2609 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
2610 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
2611 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2612 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2613 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2614 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2615 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
2616 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
2617 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
2618 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
2619 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
2620 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
2621 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
2622 ; VI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
2623 ; VI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
2624 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
2625 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
2626 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
2627 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
2628 ; VI-SDAG-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
2629 ; VI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
2630 ; VI-SDAG-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
2631 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v3, v5, v3, s[4:5]
2632 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v4, v2, s[4:5]
2633 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v7, v1, vcc
2634 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v6, v0, vcc
2635 ; VI-SDAG-NEXT:    v_div_scale_f64 v[5:6], s[6:7], v[0:1], v[0:1], -1.0
2636 ; VI-SDAG-NEXT:    v_div_scale_f64 v[7:8], s[4:5], v[2:3], v[2:3], 1.0
2637 ; VI-SDAG-NEXT:    v_div_scale_f64 v[17:18], s[4:5], 1.0, v[2:3], 1.0
2638 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[9:10], v[5:6]
2639 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[11:12], v[7:8]
2640 ; VI-SDAG-NEXT:    v_fma_f64 v[13:14], -v[5:6], v[9:10], 1.0
2641 ; VI-SDAG-NEXT:    v_fma_f64 v[15:16], -v[7:8], v[11:12], 1.0
2642 ; VI-SDAG-NEXT:    v_fma_f64 v[9:10], v[9:10], v[13:14], v[9:10]
2643 ; VI-SDAG-NEXT:    v_div_scale_f64 v[13:14], vcc, -1.0, v[0:1], -1.0
2644 ; VI-SDAG-NEXT:    v_fma_f64 v[11:12], v[11:12], v[15:16], v[11:12]
2645 ; VI-SDAG-NEXT:    v_fma_f64 v[15:16], -v[5:6], v[9:10], 1.0
2646 ; VI-SDAG-NEXT:    v_fma_f64 v[19:20], -v[7:8], v[11:12], 1.0
2647 ; VI-SDAG-NEXT:    v_fma_f64 v[9:10], v[9:10], v[15:16], v[9:10]
2648 ; VI-SDAG-NEXT:    v_fma_f64 v[11:12], v[11:12], v[19:20], v[11:12]
2649 ; VI-SDAG-NEXT:    v_mul_f64 v[15:16], v[13:14], v[9:10]
2650 ; VI-SDAG-NEXT:    v_mul_f64 v[19:20], v[17:18], v[11:12]
2651 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[5:6], v[15:16], v[13:14]
2652 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[7:8], v[19:20], v[17:18]
2653 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[9:10], v[15:16]
2654 ; VI-SDAG-NEXT:    s_mov_b64 vcc, s[4:5]
2655 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[6:7], v[6:7], v[11:12], v[19:20]
2656 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2657 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
2658 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2660 ; VI-GISEL-LABEL: v_neg_pos_rsq_v2f64:
2661 ; VI-GISEL:       ; %bb.0:
2662 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2663 ; VI-GISEL-NEXT:    s_mov_b32 s4, 0
2664 ; VI-GISEL-NEXT:    s_brev_b32 s5, 8
2665 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, s4
2666 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, s5
2667 ; VI-GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2668 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
2669 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
2670 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
2671 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
2672 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v6
2673 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
2674 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2675 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
2676 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
2677 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[4:5], 0.5
2678 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
2679 ; VI-GISEL-NEXT:    v_mul_f64 v[10:11], v[6:7], 0.5
2680 ; VI-GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
2681 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
2682 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
2683 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
2684 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2685 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
2686 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2687 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2688 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2689 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2690 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2691 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
2692 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
2693 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
2694 ; VI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
2695 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
2696 ; VI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
2697 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
2698 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
2699 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
2700 ; VI-GISEL-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
2701 ; VI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
2702 ; VI-GISEL-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
2703 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
2704 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
2705 ; VI-GISEL-NEXT:    v_div_scale_f64 v[4:5], s[6:7], v[0:1], v[0:1], -1.0
2706 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
2707 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
2708 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0
2709 ; VI-GISEL-NEXT:    v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
2710 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[8:9], v[4:5]
2711 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[10:11], v[6:7]
2712 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
2713 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
2714 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
2715 ; VI-GISEL-NEXT:    v_div_scale_f64 v[12:13], vcc, -1.0, v[0:1], -1.0
2716 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
2717 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
2718 ; VI-GISEL-NEXT:    v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
2719 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
2720 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
2721 ; VI-GISEL-NEXT:    v_mul_f64 v[14:15], v[12:13], v[8:9]
2722 ; VI-GISEL-NEXT:    v_mul_f64 v[18:19], v[16:17], v[10:11]
2723 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
2724 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
2725 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
2726 ; VI-GISEL-NEXT:    s_mov_b64 vcc, s[4:5]
2727 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
2728 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[0:1], -1.0
2729 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
2730 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2731   %sqrt = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
2732   %rsq = fdiv <2 x double> <double -1.0, double 1.0>, %sqrt
2733   ret <2 x double> %rsq
2736 define double @v_rsq_f64_fneg_fabs(double %x) {
2737 ; SI-SDAG-LABEL: v_rsq_f64_fneg_fabs:
2738 ; SI-SDAG:       ; %bb.0:
2739 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2740 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
2741 ; SI-SDAG-NEXT:    s_brev_b32 s5, 9
2742 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e64 vcc, |v[0:1]|, s[4:5]
2743 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
2744 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2745 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
2746 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], -|v[0:1]|, v2
2747 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
2748 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
2749 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0x3ff00000
2750 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
2751 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
2752 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2753 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2754 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2755 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2756 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
2757 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2758 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
2759 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
2760 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2761 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
2762 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
2763 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
2764 ; SI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2765 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
2766 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v3
2767 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2768 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2769 ; SI-SDAG-NEXT:    v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
2770 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2771 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2772 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s6, v7
2773 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
2774 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
2775 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2776 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2777 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2778 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2780 ; SI-GISEL-LABEL: v_rsq_f64_fneg_fabs:
2781 ; SI-GISEL:       ; %bb.0:
2782 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2783 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2784 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
2785 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, -|v[0:1]|, v[2:3]
2786 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
2787 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2788 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
2789 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], -|v[0:1]|, v2
2790 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
2791 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
2792 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0x3ff00000
2793 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
2794 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
2795 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
2796 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2797 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2798 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2799 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2800 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2801 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2802 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
2803 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2804 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
2805 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
2806 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
2807 ; SI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2808 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
2809 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
2810 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v3
2811 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v10, v9
2812 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
2813 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2814 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2815 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2816 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2817 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[8:9], v[4:5]
2818 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
2819 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
2820 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2821 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2823 ; VI-SDAG-LABEL: v_rsq_f64_fneg_fabs:
2824 ; VI-SDAG:       ; %bb.0:
2825 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2826 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
2827 ; VI-SDAG-NEXT:    s_brev_b32 s5, 9
2828 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e64 vcc, |v[0:1]|, s[4:5]
2829 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2830 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
2831 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], -|v[0:1]|, v2
2832 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
2833 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
2834 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
2835 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2836 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2837 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2838 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2839 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
2840 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2841 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
2842 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
2843 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
2844 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
2845 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
2846 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2847 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
2848 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
2849 ; VI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2850 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
2851 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2852 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2853 ; VI-SDAG-NEXT:    v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
2854 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2855 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2856 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
2857 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2858 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2859 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2860 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2862 ; VI-GISEL-LABEL: v_rsq_f64_fneg_fabs:
2863 ; VI-GISEL:       ; %bb.0:
2864 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2865 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2866 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
2867 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, -|v[0:1]|, v[2:3]
2868 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2869 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
2870 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], -|v[0:1]|, v2
2871 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
2872 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
2873 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
2874 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
2875 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2876 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2877 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2878 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2879 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2880 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2881 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
2882 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
2883 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
2884 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
2885 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2886 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
2887 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
2888 ; VI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2889 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
2890 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2891 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2892 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
2893 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2894 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2895 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
2896 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2897 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2898 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2899 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2900   %fabs = call double @llvm.fabs.f64(double %x)
2901   %fneg.fabs = fneg double %fabs
2902   %sqrt = call contract double @llvm.sqrt.f64(double %fneg.fabs)
2903   %rsq = fdiv contract double 1.0, %sqrt
2904   ret double %rsq
2907 define double @v_rsq_f64__afn_sqrt(double %x) {
2908 ; SI-SDAG-LABEL: v_rsq_f64__afn_sqrt:
2909 ; SI-SDAG:       ; %bb.0:
2910 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2911 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
2912 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
2913 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
2914 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
2915 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2916 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
2917 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
2918 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
2919 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
2920 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0x3ff00000
2921 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
2922 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
2923 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
2924 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2925 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2926 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2927 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
2928 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
2929 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
2930 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
2931 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2932 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
2933 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
2934 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
2935 ; SI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2936 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
2937 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v3
2938 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2939 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2940 ; SI-SDAG-NEXT:    v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
2941 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
2942 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
2943 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s6, v7
2944 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
2945 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
2946 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
2947 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
2948 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2949 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2951 ; SI-GISEL-LABEL: v_rsq_f64__afn_sqrt:
2952 ; SI-GISEL:       ; %bb.0:
2953 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2954 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2955 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
2956 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
2957 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
2958 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
2959 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
2960 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
2961 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
2962 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
2963 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0x3ff00000
2964 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
2965 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
2966 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
2967 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
2968 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2969 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2970 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2971 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
2972 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
2973 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
2974 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
2975 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
2976 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
2977 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
2978 ; SI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
2979 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
2980 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
2981 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v3
2982 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v10, v9
2983 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
2984 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2985 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2986 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
2987 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
2988 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[8:9], v[4:5]
2989 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
2990 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
2991 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
2992 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2994 ; VI-SDAG-LABEL: v_rsq_f64__afn_sqrt:
2995 ; VI-SDAG:       ; %bb.0:
2996 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2997 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
2998 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
2999 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3000 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3001 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3002 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3003 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3004 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3005 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3006 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3007 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3008 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3009 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3010 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3011 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3012 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3013 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3014 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
3015 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3016 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3017 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3018 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3019 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3020 ; VI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
3021 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
3022 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
3023 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3024 ; VI-SDAG-NEXT:    v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
3025 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
3026 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
3027 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
3028 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
3029 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
3030 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
3031 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3033 ; VI-GISEL-LABEL: v_rsq_f64__afn_sqrt:
3034 ; VI-GISEL:       ; %bb.0:
3035 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3036 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3037 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3038 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3039 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3040 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3041 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3042 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3043 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3044 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3045 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3046 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3047 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3048 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3049 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3050 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3051 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3052 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3053 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
3054 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3055 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3056 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3057 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3058 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3059 ; VI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
3060 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
3061 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
3062 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3063 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
3064 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
3065 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
3066 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
3067 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
3068 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
3069 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
3070 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3071   %sqrt = call contract afn double @llvm.sqrt.f64(double %x)
3072   %rsq = fdiv contract double 1.0, %sqrt
3073   ret double %rsq
3076 define double @v_rsq_f64__afn_fdiv(double %x) {
3077 ; SI-SDAG-LABEL: v_rsq_f64__afn_fdiv:
3078 ; SI-SDAG:       ; %bb.0:
3079 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3080 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
3081 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
3082 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3083 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3084 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3085 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3086 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3087 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
3088 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3089 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3090 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3091 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3092 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3093 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3094 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3095 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3096 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3097 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3098 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3099 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3100 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3101 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3102 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3103 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3104 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3105 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3106 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3107 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3108 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3109 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3110 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3112 ; SI-GISEL-LABEL: v_rsq_f64__afn_fdiv:
3113 ; SI-GISEL:       ; %bb.0:
3114 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3115 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3116 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3117 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3118 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3119 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3120 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3121 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3122 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
3123 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3124 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3125 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3126 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3127 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3128 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3129 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3130 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3131 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3132 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3133 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3134 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3135 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3136 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3137 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3138 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3139 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3140 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3141 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3142 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3143 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3144 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3145 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3147 ; VI-SDAG-LABEL: v_rsq_f64__afn_fdiv:
3148 ; VI-SDAG:       ; %bb.0:
3149 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3150 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
3151 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
3152 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3153 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3154 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3155 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3156 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3157 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3158 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3159 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3160 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3161 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3162 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3163 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3164 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3165 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3166 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3167 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
3168 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3169 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3170 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3171 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3172 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3173 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3174 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3175 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3176 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3177 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3178 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3179 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3180 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3182 ; VI-GISEL-LABEL: v_rsq_f64__afn_fdiv:
3183 ; VI-GISEL:       ; %bb.0:
3184 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3185 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3186 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3187 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3188 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3189 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3190 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3191 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3192 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3193 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3194 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3195 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3196 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3197 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3198 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3199 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3200 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3201 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3202 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
3203 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3204 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3205 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3206 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3207 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3208 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3209 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3210 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3211 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3212 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3213 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3214 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3215 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3216   %sqrt = call contract double @llvm.sqrt.f64(double %x)
3217   %rsq = fdiv contract afn double 1.0, %sqrt
3218   ret double %rsq
3221 define double @v_rsq_f64__afn(double %x) {
3222 ; SI-SDAG-LABEL: v_rsq_f64__afn:
3223 ; SI-SDAG:       ; %bb.0:
3224 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3225 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
3226 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
3227 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3228 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3229 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3230 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3231 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3232 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
3233 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3234 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3235 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3236 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3237 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3238 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3239 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3240 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3241 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3242 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3243 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3244 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3245 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3246 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3247 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3248 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3249 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3250 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3251 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3252 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3253 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3254 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3255 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3257 ; SI-GISEL-LABEL: v_rsq_f64__afn:
3258 ; SI-GISEL:       ; %bb.0:
3259 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3260 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3261 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3262 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3263 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3264 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3265 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3266 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3267 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
3268 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3269 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3270 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3271 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3272 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3273 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3274 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3275 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3276 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3277 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3278 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3279 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3280 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3281 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3282 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3283 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3284 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3285 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3286 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3287 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3288 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3289 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3290 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3292 ; VI-SDAG-LABEL: v_rsq_f64__afn:
3293 ; VI-SDAG:       ; %bb.0:
3294 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3295 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
3296 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
3297 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3298 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3299 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3300 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3301 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3302 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3303 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3304 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3305 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3306 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3307 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3308 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3309 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3310 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3311 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3312 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
3313 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3314 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3315 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3316 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3317 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3318 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3319 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3320 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3321 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3322 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3323 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3324 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3325 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3327 ; VI-GISEL-LABEL: v_rsq_f64__afn:
3328 ; VI-GISEL:       ; %bb.0:
3329 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3330 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3331 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3332 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3333 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3334 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3335 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3336 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3337 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3338 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3339 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3340 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3341 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3342 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3343 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3344 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3345 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3346 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3347 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
3348 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3349 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3350 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3351 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3352 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3353 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3354 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3355 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3356 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3357 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3358 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3359 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3360 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3361   %sqrt = call contract afn double @llvm.sqrt.f64(double %x)
3362   %rsq = fdiv contract afn double 1.0, %sqrt
3363   ret double %rsq
3366 define double @v_neg_rsq_f64__afn(double %x) {
3367 ; SI-SDAG-LABEL: v_neg_rsq_f64__afn:
3368 ; SI-SDAG:       ; %bb.0:
3369 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3370 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
3371 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
3372 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3373 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3374 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3375 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3376 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3377 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
3378 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3379 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3380 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3381 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3382 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3383 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3384 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3385 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3386 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3387 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3388 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3389 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3390 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3391 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3392 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3393 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3394 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3395 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3396 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3397 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3398 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[2:3], -1.0
3399 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
3400 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
3401 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3403 ; SI-GISEL-LABEL: v_neg_rsq_f64__afn:
3404 ; SI-GISEL:       ; %bb.0:
3405 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3406 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3407 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3408 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3409 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3410 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3411 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3412 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3413 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
3414 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3415 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3416 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3417 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3418 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3419 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3420 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3421 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3422 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3423 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3424 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3425 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3426 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3427 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3428 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3429 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3430 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3431 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3432 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3433 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3434 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], -1.0
3435 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], -v[2:3]
3436 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3438 ; VI-SDAG-LABEL: v_neg_rsq_f64__afn:
3439 ; VI-SDAG:       ; %bb.0:
3440 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3441 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
3442 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
3443 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3444 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3445 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3446 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3447 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3448 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3449 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3450 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3451 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3452 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3453 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3454 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3455 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3456 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3457 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3458 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
3459 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3460 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3461 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3462 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3463 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3464 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3465 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3466 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3467 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3468 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3469 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[2:3], -1.0
3470 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
3471 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
3472 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3474 ; VI-GISEL-LABEL: v_neg_rsq_f64__afn:
3475 ; VI-GISEL:       ; %bb.0:
3476 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3477 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3478 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3479 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3480 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3481 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3482 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3483 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3484 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3485 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3486 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3487 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3488 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3489 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3490 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3491 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3492 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3493 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3494 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
3495 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3496 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3497 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3498 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3499 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3500 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3501 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3502 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3503 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3504 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3505 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], -1.0
3506 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], -v[2:3]
3507 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3508   %sqrt = call contract afn double @llvm.sqrt.f64(double %x)
3509   %rsq = fdiv contract afn double -1.0, %sqrt
3510   ret double %rsq
3513 define double @v_rsq_f64__afn_ninf(double %x) {
3514 ; SI-SDAG-LABEL: v_rsq_f64__afn_ninf:
3515 ; SI-SDAG:       ; %bb.0:
3516 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3517 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
3518 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
3519 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3520 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3521 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3522 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3523 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3524 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
3525 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3526 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3527 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3528 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3529 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3530 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3531 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3532 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3533 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3534 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3535 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3536 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3537 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3538 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3539 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3540 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3541 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3542 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3543 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3544 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3545 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3546 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3547 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3549 ; SI-GISEL-LABEL: v_rsq_f64__afn_ninf:
3550 ; SI-GISEL:       ; %bb.0:
3551 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3552 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3553 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3554 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3555 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3556 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3557 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3558 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3559 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
3560 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3561 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3562 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3563 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3564 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3565 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3566 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3567 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3568 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3569 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3570 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3571 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3572 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3573 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3574 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3575 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3576 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3577 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3578 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3579 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3580 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3581 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3582 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3584 ; VI-SDAG-LABEL: v_rsq_f64__afn_ninf:
3585 ; VI-SDAG:       ; %bb.0:
3586 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3587 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
3588 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
3589 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3590 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3591 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3592 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3593 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3594 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3595 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3596 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3597 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3598 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3599 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3600 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3601 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3602 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3603 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3604 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
3605 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3606 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3607 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3608 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3609 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3610 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3611 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3612 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3613 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3614 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3615 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3616 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3617 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3619 ; VI-GISEL-LABEL: v_rsq_f64__afn_ninf:
3620 ; VI-GISEL:       ; %bb.0:
3621 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3622 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3623 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3624 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3625 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3626 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3627 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3628 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3629 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3630 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3631 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3632 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3633 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3634 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3635 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3636 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3637 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3638 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3639 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
3640 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3641 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3642 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3643 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3644 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3645 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3646 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3647 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3648 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3649 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3650 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3651 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3652 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3653   %sqrt = call contract afn ninf double @llvm.sqrt.f64(double %x)
3654   %rsq = fdiv contract afn ninf double 1.0, %sqrt
3655   ret double %rsq
3658 define double @v_rsq_f64__afn_nnan(double %x) {
3659 ; SI-SDAG-LABEL: v_rsq_f64__afn_nnan:
3660 ; SI-SDAG:       ; %bb.0:
3661 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3662 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
3663 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
3664 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3665 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3666 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3667 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3668 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3669 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
3670 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3671 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3672 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3673 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3674 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3675 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3676 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3677 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3678 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3679 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3680 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3681 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3682 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3683 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3684 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3685 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3686 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3687 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3688 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3689 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3690 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3691 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3692 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3694 ; SI-GISEL-LABEL: v_rsq_f64__afn_nnan:
3695 ; SI-GISEL:       ; %bb.0:
3696 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3697 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3698 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3699 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3700 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3701 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3702 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3703 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3704 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
3705 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3706 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3707 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3708 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3709 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3710 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3711 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3712 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3713 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3714 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3715 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3716 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3717 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3718 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3719 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3720 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3721 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3722 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3723 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3724 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3725 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3726 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3727 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3729 ; VI-SDAG-LABEL: v_rsq_f64__afn_nnan:
3730 ; VI-SDAG:       ; %bb.0:
3731 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3732 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
3733 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
3734 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3735 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3736 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3737 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3738 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3739 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3740 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3741 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3742 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3743 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3744 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3745 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3746 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3747 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3748 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3749 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
3750 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3751 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3752 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3753 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3754 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3755 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3756 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3757 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3758 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3759 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3760 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3761 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3762 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3764 ; VI-GISEL-LABEL: v_rsq_f64__afn_nnan:
3765 ; VI-GISEL:       ; %bb.0:
3766 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3767 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3768 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3769 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3770 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3771 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3772 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3773 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3774 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3775 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3776 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3777 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3778 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3779 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3780 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3781 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3782 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3783 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3784 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
3785 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3786 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3787 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3788 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3789 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3790 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3791 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3792 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3793 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3794 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3795 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3796 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3797 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3798   %sqrt = call contract afn nnan double @llvm.sqrt.f64(double %x)
3799   %rsq = fdiv contract afn nnan double 1.0, %sqrt
3800   ret double %rsq
3803 define double @v_rsq_f64__afn_nnan_ninf(double %x) {
3804 ; SI-SDAG-LABEL: v_rsq_f64__afn_nnan_ninf:
3805 ; SI-SDAG:       ; %bb.0:
3806 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3807 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
3808 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
3809 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3810 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3811 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3812 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3813 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3814 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
3815 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3816 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3817 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3818 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3819 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3820 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3821 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3822 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3823 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3824 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3825 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3826 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3827 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3828 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3829 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3830 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3831 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3832 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3833 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3834 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3835 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3836 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3837 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3839 ; SI-GISEL-LABEL: v_rsq_f64__afn_nnan_ninf:
3840 ; SI-GISEL:       ; %bb.0:
3841 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3842 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3843 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3844 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3845 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3846 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3847 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3848 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3849 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
3850 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3851 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3852 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3853 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3854 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3855 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3856 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3857 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3858 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3859 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3860 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3861 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3862 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3863 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3864 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3865 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3866 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3867 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3868 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3869 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3870 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3871 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3872 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3874 ; VI-SDAG-LABEL: v_rsq_f64__afn_nnan_ninf:
3875 ; VI-SDAG:       ; %bb.0:
3876 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3877 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
3878 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
3879 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3880 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3881 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3882 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3883 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3884 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3885 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3886 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3887 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3888 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3889 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3890 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3891 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3892 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3893 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3894 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
3895 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3896 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3897 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3898 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3899 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3900 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3901 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3902 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3903 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3904 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3905 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3906 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3907 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3909 ; VI-GISEL-LABEL: v_rsq_f64__afn_nnan_ninf:
3910 ; VI-GISEL:       ; %bb.0:
3911 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3912 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3913 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3914 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3915 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3916 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3917 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3918 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3919 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3920 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3921 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
3922 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3923 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3924 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3925 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3926 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
3927 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
3928 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
3929 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
3930 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
3931 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
3932 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3933 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3934 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3935 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3936 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3937 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3938 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3939 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3940 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
3941 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
3942 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3943   %sqrt = call contract afn nnan ninf double @llvm.sqrt.f64(double %x)
3944   %rsq = fdiv contract afn nnan ninf double 1.0, %sqrt
3945   ret double %rsq
3948 define double @v_neg_rsq_f64__afn_nnan_ninf(double %x) {
3949 ; SI-SDAG-LABEL: v_neg_rsq_f64__afn_nnan_ninf:
3950 ; SI-SDAG:       ; %bb.0:
3951 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3952 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
3953 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
3954 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
3955 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3956 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3957 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3958 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3959 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
3960 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3961 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
3962 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
3963 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
3964 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
3965 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
3966 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3967 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
3968 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
3969 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
3970 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
3971 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
3972 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
3973 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
3974 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
3975 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
3976 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3977 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3978 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
3979 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
3980 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[2:3], -1.0
3981 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
3982 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
3983 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3985 ; SI-GISEL-LABEL: v_neg_rsq_f64__afn_nnan_ninf:
3986 ; SI-GISEL:       ; %bb.0:
3987 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3988 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3989 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
3990 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
3991 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
3992 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
3993 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3994 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
3995 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
3996 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
3997 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
3998 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
3999 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4000 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4001 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4002 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4003 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4004 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4005 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4006 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
4007 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4008 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
4009 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4010 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4011 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4012 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4013 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4014 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4015 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4016 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], -1.0
4017 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], -v[2:3]
4018 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4020 ; VI-SDAG-LABEL: v_neg_rsq_f64__afn_nnan_ninf:
4021 ; VI-SDAG:       ; %bb.0:
4022 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4023 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
4024 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
4025 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4026 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
4027 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
4028 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
4029 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4030 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
4031 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
4032 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4033 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4034 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4035 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4036 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4037 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4038 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4039 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
4040 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
4041 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
4042 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
4043 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4044 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4045 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4046 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4047 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4048 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4049 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4050 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4051 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[2:3], -1.0
4052 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[4:5], -1.0
4053 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]
4054 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4056 ; VI-GISEL-LABEL: v_neg_rsq_f64__afn_nnan_ninf:
4057 ; VI-GISEL:       ; %bb.0:
4058 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4059 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4060 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
4061 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
4062 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
4063 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
4064 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
4065 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4066 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
4067 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
4068 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4069 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4070 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4071 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4072 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4073 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4074 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4075 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
4076 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
4077 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
4078 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
4079 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4080 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4081 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4082 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4083 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4084 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4085 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4086 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4087 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], -1.0
4088 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], -v[2:3]
4089 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4090   %sqrt = call contract afn nnan ninf double @llvm.sqrt.f64(double %x)
4091   %rsq = fdiv contract afn nnan ninf double -1.0, %sqrt
4092   ret double %rsq
4095 define double @v_rsq_f64__nnan_ninf(double %x) {
4096 ; SI-SDAG-LABEL: v_rsq_f64__nnan_ninf:
4097 ; SI-SDAG:       ; %bb.0:
4098 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4099 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
4100 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
4101 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4102 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
4103 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
4104 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
4105 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
4106 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
4107 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4108 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0x3ff00000
4109 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
4110 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
4111 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4112 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4113 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4114 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4115 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4116 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4117 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4118 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
4119 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4120 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
4121 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4122 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4123 ; SI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4124 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4125 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v3
4126 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4127 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4128 ; SI-SDAG-NEXT:    v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
4129 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4130 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4131 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s6, v7
4132 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
4133 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
4134 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4135 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4136 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4137 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4139 ; SI-GISEL-LABEL: v_rsq_f64__nnan_ninf:
4140 ; SI-GISEL:       ; %bb.0:
4141 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4142 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4143 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
4144 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
4145 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
4146 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
4147 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
4148 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
4149 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
4150 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4151 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0x3ff00000
4152 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
4153 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
4154 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4155 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4156 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4157 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4158 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4159 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4160 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4161 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
4162 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4163 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
4164 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4165 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4166 ; SI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4167 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
4168 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4169 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v3
4170 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v10, v9
4171 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
4172 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4173 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4174 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4175 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4176 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[8:9], v[4:5]
4177 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
4178 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
4179 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4180 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4182 ; VI-SDAG-LABEL: v_rsq_f64__nnan_ninf:
4183 ; VI-SDAG:       ; %bb.0:
4184 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4185 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
4186 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
4187 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4188 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
4189 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
4190 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
4191 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4192 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
4193 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
4194 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4195 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4196 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4197 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4198 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4199 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4200 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4201 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
4202 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
4203 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
4204 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
4205 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4206 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4207 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4208 ; VI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4209 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4210 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4211 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4212 ; VI-SDAG-NEXT:    v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
4213 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4214 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4215 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
4216 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4217 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4218 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4219 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4221 ; VI-GISEL-LABEL: v_rsq_f64__nnan_ninf:
4222 ; VI-GISEL:       ; %bb.0:
4223 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4224 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4225 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
4226 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
4227 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
4228 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
4229 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
4230 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4231 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
4232 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
4233 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4234 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4235 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4236 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4237 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4238 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4239 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4240 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
4241 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
4242 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
4243 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
4244 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4245 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4246 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4247 ; VI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4248 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4249 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4250 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4251 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
4252 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4253 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4254 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
4255 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4256 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4257 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4258 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4259   %sqrt = call contract nnan ninf double @llvm.sqrt.f64(double %x)
4260   %rsq = fdiv contract nnan ninf double 1.0, %sqrt
4261   ret double %rsq
4264 define <2 x double> @v_rsq_v2f64__afn_nnan_ninf(<2 x double> %x) {
4265 ; SI-SDAG-LABEL: v_rsq_v2f64__afn_nnan_ninf:
4266 ; SI-SDAG:       ; %bb.0:
4267 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4268 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
4269 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
4270 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
4271 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
4272 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
4273 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
4274 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4275 ; SI-SDAG-NEXT:    v_mov_b32_e32 v14, 0xffffff80
4276 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
4277 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v12, 0, v14, vcc
4278 ; SI-SDAG-NEXT:    v_mov_b32_e32 v15, 0x260
4279 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v15
4280 ; SI-SDAG-NEXT:    v_mul_f64 v[6:7], v[2:3], v[4:5]
4281 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
4282 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
4283 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
4284 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4285 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v8, 0, 1, s[4:5]
4286 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v8, 8, v8
4287 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[6:7], v[6:7], v[2:3]
4288 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v8
4289 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[10:11], v[4:5], v[6:7]
4290 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[8:9], v[0:1]
4291 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[6:7], v[6:7], v[2:3]
4292 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[10:11], v[4:5], v[6:7]
4293 ; SI-SDAG-NEXT:    v_mul_f64 v[6:7], v[0:1], v[8:9]
4294 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[8:9], 0.5
4295 ; SI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v12
4296 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[8:9], v[6:7], 0.5
4297 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
4298 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
4299 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[10:11], v[8:9]
4300 ; SI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[6:7], v[6:7], v[0:1]
4301 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
4302 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[12:13], v[8:9], v[6:7]
4303 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v15
4304 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[6:7], v[6:7], v[0:1]
4305 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[10:11], v[8:9], v[6:7]
4306 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v6, 0, v14, s[4:5]
4307 ; SI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
4308 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[6:7], v[2:3]
4309 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
4310 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
4311 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[0:1]
4312 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
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[10:11], -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[6:7], v[10:11], v[6:7], v[6:7]
4318 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4319 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
4320 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4321 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
4322 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
4323 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
4324 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4326 ; SI-GISEL-LABEL: v_rsq_v2f64__afn_nnan_ninf:
4327 ; SI-GISEL:       ; %bb.0:
4328 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4329 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0
4330 ; SI-GISEL-NEXT:    s_brev_b32 s5, 8
4331 ; SI-GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4332 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, s4
4333 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
4334 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
4335 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
4336 ; SI-GISEL-NEXT:    v_mov_b32_e32 v11, s5
4337 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
4338 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[10:11]
4339 ; SI-GISEL-NEXT:    v_mov_b32_e32 v12, 0xffffff80
4340 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v13, 0, v12, vcc
4341 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
4342 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
4343 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
4344 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4345 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
4346 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
4347 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
4348 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, 1, s[4:5]
4349 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v8, 8, v8
4350 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v8
4351 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[0:1]
4352 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[10:11], v[2:3]
4353 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
4354 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v13
4355 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[10:11], 0.5
4356 ; SI-GISEL-NEXT:    v_mul_f64 v[8:9], v[2:3], v[10:11]
4357 ; SI-GISEL-NEXT:    v_mov_b32_e32 v13, 0x260
4358 ; SI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[6:7], v[8:9], 0.5
4359 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v13
4360 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[10:11], v[8:9]
4361 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
4362 ; SI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[8:9], v[8:9], v[2:3]
4363 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
4364 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], v[10:11], v[6:7], v[8:9]
4365 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
4366 ; SI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[8:9], v[8:9], v[2:3]
4367 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v13
4368 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[10:11], v[6:7], v[8:9]
4369 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, v12, s[4:5]
4370 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
4371 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
4372 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
4373 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[0:1]
4374 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[2:3]
4375 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4376 ; SI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4377 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4378 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4379 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4380 ; SI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4381 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4382 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4383 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
4384 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
4385 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
4386 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
4387 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4389 ; VI-SDAG-LABEL: v_rsq_v2f64__afn_nnan_ninf:
4390 ; VI-SDAG:       ; %bb.0:
4391 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4392 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
4393 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
4394 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
4395 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e64 s[4:5], s[4:5], v[0:1]
4396 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
4397 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
4398 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4399 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
4400 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
4401 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v4
4402 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
4403 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[6:7], v[0:1]
4404 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[2:3], v[4:5]
4405 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
4406 ; VI-SDAG-NEXT:    v_mul_f64 v[10:11], v[0:1], v[6:7]
4407 ; VI-SDAG-NEXT:    v_mul_f64 v[6:7], v[6:7], 0.5
4408 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.5
4409 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.5
4410 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
4411 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
4412 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
4413 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
4414 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
4415 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
4416 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]
4417 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]
4418 ; VI-SDAG-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[8:9], v[2:3]
4419 ; VI-SDAG-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[10:11], v[0:1]
4420 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]
4421 ; VI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
4422 ; VI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
4423 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]
4424 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
4425 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
4426 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
4427 ; VI-SDAG-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
4428 ; VI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
4429 ; VI-SDAG-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
4430 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v3, v5, v3, s[4:5]
4431 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v4, v2, s[4:5]
4432 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v7, v1, vcc
4433 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v6, v0, vcc
4434 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[5:6], v[0:1]
4435 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[7:8], v[2:3]
4436 ; VI-SDAG-NEXT:    v_fma_f64 v[9:10], -v[0:1], v[5:6], 1.0
4437 ; VI-SDAG-NEXT:    v_fma_f64 v[11:12], -v[2:3], v[7:8], 1.0
4438 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[9:10], v[5:6], v[5:6]
4439 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[11:12], v[7:8], v[7:8]
4440 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4441 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4442 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4443 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4444 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
4445 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
4446 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
4447 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
4448 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4450 ; VI-GISEL-LABEL: v_rsq_v2f64__afn_nnan_ninf:
4451 ; VI-GISEL:       ; %bb.0:
4452 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4453 ; VI-GISEL-NEXT:    s_mov_b32 s4, 0
4454 ; VI-GISEL-NEXT:    s_brev_b32 s5, 8
4455 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, s4
4456 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, s5
4457 ; VI-GISEL-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4458 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]
4459 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
4460 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, s[4:5]
4461 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v6, 8, v6
4462 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
4463 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v6
4464 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4465 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[0:1]
4466 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[6:7], v[2:3]
4467 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[4:5], 0.5
4468 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[0:1], v[4:5]
4469 ; VI-GISEL-NEXT:    v_mul_f64 v[10:11], v[6:7], 0.5
4470 ; VI-GISEL-NEXT:    v_mul_f64 v[6:7], v[2:3], v[6:7]
4471 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.5
4472 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.5
4473 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]
4474 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
4475 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]
4476 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
4477 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
4478 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
4479 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
4480 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
4481 ; VI-GISEL-NEXT:    v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]
4482 ; VI-GISEL-NEXT:    v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]
4483 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]
4484 ; VI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
4485 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]
4486 ; VI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
4487 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v10, 0, v8, vcc
4488 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, v8, s[4:5]
4489 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
4490 ; VI-GISEL-NEXT:    v_cmp_class_f64_e64 s[4:5], v[2:3], v9
4491 ; VI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v10
4492 ; VI-GISEL-NEXT:    v_ldexp_f64 v[6:7], v[6:7], v8
4493 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v4, v0, vcc
4494 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc
4495 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, v6, v2, s[4:5]
4496 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[4:5]
4497 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[0:1]
4498 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[2:3]
4499 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4500 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4501 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4502 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4503 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
4504 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
4505 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
4506 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
4507 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
4508 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
4509 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
4510 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
4511 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4512   %sqrt = call contract afn nnan ninf <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
4513   %rsq = fdiv contract afn nnan ninf <2 x double> <double 1.0, double 1.0>, %sqrt
4514   ret <2 x double> %rsq
4517 define amdgpu_ps <2 x i32> @s_rsq_f64_unsafe(double inreg %x) #0 {
4518 ; SI-SDAG-LABEL: s_rsq_f64_unsafe:
4519 ; SI-SDAG:       ; %bb.0:
4520 ; SI-SDAG-NEXT:    v_mov_b32_e32 v0, 0
4521 ; SI-SDAG-NEXT:    v_bfrev_b32_e32 v1, 8
4522 ; SI-SDAG-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
4523 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0x260
4524 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
4525 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
4526 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
4527 ; SI-SDAG-NEXT:    s_and_b64 s[0:1], vcc, exec
4528 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4529 ; SI-SDAG-NEXT:    s_cselect_b32 s0, 0xffffff80, 0
4530 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v8
4531 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
4532 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
4533 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4534 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4535 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4536 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4537 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4538 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4539 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4540 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], s0
4541 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4542 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4543 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4544 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4545 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4546 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4547 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4548 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4549 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4550 ; SI-SDAG-NEXT:    v_readfirstlane_b32 s0, v0
4551 ; SI-SDAG-NEXT:    v_readfirstlane_b32 s1, v1
4552 ; SI-SDAG-NEXT:    ; return to shader part epilog
4554 ; SI-GISEL-LABEL: s_rsq_f64_unsafe:
4555 ; SI-GISEL:       ; %bb.0:
4556 ; SI-GISEL-NEXT:    v_mov_b32_e32 v0, 0
4557 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v1, 8
4558 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
4559 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
4560 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
4561 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
4562 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
4563 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
4564 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4565 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
4566 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
4567 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4568 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4569 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4570 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4571 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4572 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4573 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4574 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
4575 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4576 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
4577 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4578 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4579 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4580 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4581 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4582 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4583 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4584 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4585 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4586 ; SI-GISEL-NEXT:    v_readfirstlane_b32 s0, v0
4587 ; SI-GISEL-NEXT:    v_readfirstlane_b32 s1, v1
4588 ; SI-GISEL-NEXT:    ; return to shader part epilog
4590 ; VI-SDAG-LABEL: s_rsq_f64_unsafe:
4591 ; VI-SDAG:       ; %bb.0:
4592 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, 0
4593 ; VI-SDAG-NEXT:    v_bfrev_b32_e32 v1, 8
4594 ; VI-SDAG-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
4595 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
4596 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
4597 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
4598 ; VI-SDAG-NEXT:    s_and_b64 s[0:1], vcc, exec
4599 ; VI-SDAG-NEXT:    s_cselect_b32 s0, 0xffffff80, 0
4600 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4601 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
4602 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
4603 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4604 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4605 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4606 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4607 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4608 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4609 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4610 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0x260
4611 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v4
4612 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], s0
4613 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4614 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4615 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4616 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4617 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4618 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4619 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4620 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4621 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4622 ; VI-SDAG-NEXT:    v_readfirstlane_b32 s0, v0
4623 ; VI-SDAG-NEXT:    v_readfirstlane_b32 s1, v1
4624 ; VI-SDAG-NEXT:    ; return to shader part epilog
4626 ; VI-GISEL-LABEL: s_rsq_f64_unsafe:
4627 ; VI-GISEL:       ; %bb.0:
4628 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, 0
4629 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v1, 8
4630 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]
4631 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
4632 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 8, v0
4633 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], s[0:1], v0
4634 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4635 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
4636 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
4637 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4638 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4639 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4640 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4641 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4642 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4643 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4644 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
4645 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
4646 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
4647 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
4648 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4649 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4650 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4651 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4652 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4653 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4654 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4655 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4656 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4657 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4658 ; VI-GISEL-NEXT:    v_readfirstlane_b32 s0, v0
4659 ; VI-GISEL-NEXT:    v_readfirstlane_b32 s1, v1
4660 ; VI-GISEL-NEXT:    ; return to shader part epilog
4661   %rsq = call contract double @llvm.sqrt.f64(double %x)
4662   %result = fdiv contract double 1.0, %rsq
4663   %cast = bitcast double %result to <2 x i32>
4664   %cast.0 = extractelement <2 x i32> %cast, i32 0
4665   %cast.1 = extractelement <2 x i32> %cast, i32 1
4666   %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
4667   %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
4668   %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
4669   %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
4670   ret <2 x i32> %insert.1
4673 define double @v_rsq_f64_unsafe(double %x) #0 {
4674 ; SI-SDAG-LABEL: v_rsq_f64_unsafe:
4675 ; SI-SDAG:       ; %bb.0:
4676 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4677 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
4678 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
4679 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4680 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
4681 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
4682 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
4683 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
4684 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
4685 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4686 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
4687 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
4688 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4689 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4690 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4691 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4692 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4693 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4694 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4695 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
4696 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4697 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
4698 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4699 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4700 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4701 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4702 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4703 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4704 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4705 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4706 ; SI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4707 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4709 ; SI-GISEL-LABEL: v_rsq_f64_unsafe:
4710 ; SI-GISEL:       ; %bb.0:
4711 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4712 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4713 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
4714 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
4715 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
4716 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
4717 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
4718 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
4719 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
4720 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4721 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
4722 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
4723 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4724 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4725 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4726 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4727 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4728 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4729 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4730 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
4731 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4732 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
4733 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4734 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4735 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4736 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4737 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4738 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4739 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4740 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4741 ; SI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4742 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4744 ; VI-SDAG-LABEL: v_rsq_f64_unsafe:
4745 ; VI-SDAG:       ; %bb.0:
4746 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4747 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
4748 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
4749 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
4750 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
4751 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
4752 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
4753 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4754 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
4755 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
4756 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
4757 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4758 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4759 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4760 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
4761 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
4762 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
4763 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
4764 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
4765 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
4766 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
4767 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4768 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4769 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4770 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4771 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4772 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4773 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4774 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4775 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4776 ; VI-SDAG-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4777 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4779 ; VI-GISEL-LABEL: v_rsq_f64_unsafe:
4780 ; VI-GISEL:       ; %bb.0:
4781 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4782 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4783 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
4784 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
4785 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
4786 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
4787 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
4788 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
4789 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
4790 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
4791 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
4792 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
4793 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4794 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4795 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4796 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
4797 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
4798 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
4799 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
4800 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
4801 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
4802 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
4803 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
4804 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
4805 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[2:3], v[0:1]
4806 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4807 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4808 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
4809 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
4810 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
4811 ; VI-GISEL-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
4812 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4813   %sqrt = call double @llvm.sqrt.f64(double %x)
4814   %rsq = fdiv double 1.0, %sqrt
4815   ret double %rsq
4818 define double @v_rsq_amdgcn_sqrt_f64(double %x) {
4819 ; SI-SDAG-LABEL: v_rsq_amdgcn_sqrt_f64:
4820 ; SI-SDAG:       ; %bb.0:
4821 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4822 ; SI-SDAG-NEXT:    v_sqrt_f64_e32 v[0:1], v[0:1]
4823 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0x3ff00000
4824 ; SI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4825 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4826 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v3
4827 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4828 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4829 ; SI-SDAG-NEXT:    v_div_scale_f64 v[6:7], s[4:5], 1.0, v[0:1], 1.0
4830 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4831 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4832 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s6, v7
4833 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
4834 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
4835 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4836 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4837 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4838 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4840 ; SI-GISEL-LABEL: v_rsq_amdgcn_sqrt_f64:
4841 ; SI-GISEL:       ; %bb.0:
4842 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4843 ; SI-GISEL-NEXT:    v_sqrt_f64_e32 v[0:1], v[0:1]
4844 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0x3ff00000
4845 ; SI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4846 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
4847 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4848 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v3
4849 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v10, v9
4850 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
4851 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4852 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4853 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4854 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4855 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[8:9], v[4:5]
4856 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
4857 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
4858 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4859 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4861 ; VI-SDAG-LABEL: v_rsq_amdgcn_sqrt_f64:
4862 ; VI-SDAG:       ; %bb.0:
4863 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4864 ; VI-SDAG-NEXT:    v_sqrt_f64_e32 v[0:1], v[0:1]
4865 ; VI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4866 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4867 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4868 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4869 ; VI-SDAG-NEXT:    v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
4870 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4871 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4872 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
4873 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4874 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4875 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4876 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4878 ; VI-GISEL-LABEL: v_rsq_amdgcn_sqrt_f64:
4879 ; VI-GISEL:       ; %bb.0:
4880 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4881 ; VI-GISEL-NEXT:    v_sqrt_f64_e32 v[0:1], v[0:1]
4882 ; VI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
4883 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4884 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4885 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4886 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
4887 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4888 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4889 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
4890 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4891 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4892 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4893 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4894   %sqrt = call contract double @llvm.amdgcn.sqrt.f64(double %x)
4895   %rsq = fdiv contract double 1.0, %sqrt
4896   ret double %rsq
4899 define double @v_neg_rsq_amdgcn_sqrt_f64(double %x) {
4900 ; SI-SDAG-LABEL: v_neg_rsq_amdgcn_sqrt_f64:
4901 ; SI-SDAG:       ; %bb.0:
4902 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4903 ; SI-SDAG-NEXT:    v_sqrt_f64_e32 v[0:1], v[0:1]
4904 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0xbff00000
4905 ; SI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
4906 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4907 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v3
4908 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4909 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4910 ; SI-SDAG-NEXT:    v_div_scale_f64 v[6:7], s[4:5], -1.0, v[0:1], -1.0
4911 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4912 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4913 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s6, v7
4914 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
4915 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
4916 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4917 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4918 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
4919 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4921 ; SI-GISEL-LABEL: v_neg_rsq_amdgcn_sqrt_f64:
4922 ; SI-GISEL:       ; %bb.0:
4923 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4924 ; SI-GISEL-NEXT:    v_sqrt_f64_e32 v[0:1], v[0:1]
4925 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0xbff00000
4926 ; SI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
4927 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[4:5], -1.0, v[0:1], -1.0
4928 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4929 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v3
4930 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v10, v9
4931 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
4932 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4933 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4934 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4935 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4936 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[8:9], v[4:5]
4937 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
4938 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
4939 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
4940 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4942 ; VI-SDAG-LABEL: v_neg_rsq_amdgcn_sqrt_f64:
4943 ; VI-SDAG:       ; %bb.0:
4944 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4945 ; VI-SDAG-NEXT:    v_sqrt_f64_e32 v[0:1], v[0:1]
4946 ; VI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
4947 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4948 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4949 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4950 ; VI-SDAG-NEXT:    v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
4951 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4952 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4953 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
4954 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4955 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4956 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
4957 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4959 ; VI-GISEL-LABEL: v_neg_rsq_amdgcn_sqrt_f64:
4960 ; VI-GISEL:       ; %bb.0:
4961 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4962 ; VI-GISEL-NEXT:    v_sqrt_f64_e32 v[0:1], v[0:1]
4963 ; VI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], -1.0
4964 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4965 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4966 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4967 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], vcc, -1.0, v[0:1], -1.0
4968 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4969 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4970 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
4971 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4972 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4973 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], -1.0
4974 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4975   %sqrt = call contract double @llvm.amdgcn.sqrt.f64(double %x)
4976   %rsq = fdiv contract double -1.0, %sqrt
4977   ret double %rsq
4980 define amdgpu_ps <2 x i32> @s_rsq_amdgcn_sqrt_f64(double inreg %x) {
4981 ; SI-SDAG-LABEL: s_rsq_amdgcn_sqrt_f64:
4982 ; SI-SDAG:       ; %bb.0:
4983 ; SI-SDAG-NEXT:    v_sqrt_f64_e32 v[0:1], s[0:1]
4984 ; SI-SDAG-NEXT:    s_mov_b32 s2, 0x3ff00000
4985 ; SI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
4986 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
4987 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v3
4988 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
4989 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
4990 ; SI-SDAG-NEXT:    v_div_scale_f64 v[6:7], s[0:1], 1.0, v[0:1], 1.0
4991 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
4992 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
4993 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[0:1], s2, v7
4994 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
4995 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[0:1], vcc
4996 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
4997 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
4998 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
4999 ; SI-SDAG-NEXT:    v_readfirstlane_b32 s0, v0
5000 ; SI-SDAG-NEXT:    v_readfirstlane_b32 s1, v1
5001 ; SI-SDAG-NEXT:    ; return to shader part epilog
5003 ; SI-GISEL-LABEL: s_rsq_amdgcn_sqrt_f64:
5004 ; SI-GISEL:       ; %bb.0:
5005 ; SI-GISEL-NEXT:    v_sqrt_f64_e32 v[0:1], s[0:1]
5006 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0x3ff00000
5007 ; SI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
5008 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[0:1], 1.0, v[0:1], 1.0
5009 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
5010 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[0:1], v1, v3
5011 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v10, v9
5012 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[0:1]
5013 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5014 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5015 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5016 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5017 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[8:9], v[4:5]
5018 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
5019 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
5020 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
5021 ; SI-GISEL-NEXT:    v_readfirstlane_b32 s0, v0
5022 ; SI-GISEL-NEXT:    v_readfirstlane_b32 s1, v1
5023 ; SI-GISEL-NEXT:    ; return to shader part epilog
5025 ; VI-SDAG-LABEL: s_rsq_amdgcn_sqrt_f64:
5026 ; VI-SDAG:       ; %bb.0:
5027 ; VI-SDAG-NEXT:    v_sqrt_f64_e32 v[0:1], s[0:1]
5028 ; VI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
5029 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
5030 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5031 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5032 ; VI-SDAG-NEXT:    v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
5033 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
5034 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5035 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
5036 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
5037 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
5038 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
5039 ; VI-SDAG-NEXT:    v_readfirstlane_b32 s0, v0
5040 ; VI-SDAG-NEXT:    v_readfirstlane_b32 s1, v1
5041 ; VI-SDAG-NEXT:    ; return to shader part epilog
5043 ; VI-GISEL-LABEL: s_rsq_amdgcn_sqrt_f64:
5044 ; VI-GISEL:       ; %bb.0:
5045 ; VI-GISEL-NEXT:    v_sqrt_f64_e32 v[0:1], s[0:1]
5046 ; VI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[0:1], v[0:1], v[0:1], 1.0
5047 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
5048 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5049 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5050 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
5051 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
5052 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5053 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
5054 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
5055 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
5056 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
5057 ; VI-GISEL-NEXT:    v_readfirstlane_b32 s0, v0
5058 ; VI-GISEL-NEXT:    v_readfirstlane_b32 s1, v1
5059 ; VI-GISEL-NEXT:    ; return to shader part epilog
5060   %rsq = call contract double @llvm.amdgcn.sqrt.f64(double %x)
5061   %result = fdiv contract double 1.0, %rsq
5062   %cast = bitcast double %result to <2 x i32>
5063   %cast.0 = extractelement <2 x i32> %cast, i32 0
5064   %cast.1 = extractelement <2 x i32> %cast, i32 1
5065   %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
5066   %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
5067   %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0
5068   %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1
5069   ret <2 x i32> %insert.1
5072 define double @v_div_contract_sqrt_f64(double %x, double %y) {
5073 ; SI-SDAG-LABEL: v_div_contract_sqrt_f64:
5074 ; SI-SDAG:       ; %bb.0:
5075 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5076 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
5077 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
5078 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5079 ; SI-SDAG-NEXT:    v_mov_b32_e32 v10, 0xffffff80
5080 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5081 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5082 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5083 ; SI-SDAG-NEXT:    v_mov_b32_e32 v11, 0x260
5084 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5085 ; SI-SDAG-NEXT:    v_mul_f64 v[6:7], v[2:3], v[4:5]
5086 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
5087 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5088 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5089 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5090 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5091 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5092 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5093 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5094 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 0, v10, vcc
5095 ; SI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5096 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v11
5097 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5098 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5099 ; SI-SDAG-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5100 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5101 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v5
5102 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5103 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5104 ; SI-SDAG-NEXT:    v_div_scale_f64 v[8:9], s[4:5], v[0:1], v[2:3], v[0:1]
5105 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5106 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5107 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v9
5108 ; SI-SDAG-NEXT:    v_mul_f64 v[10:11], v[8:9], v[6:7]
5109 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
5110 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5111 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5112 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5113 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5115 ; SI-GISEL-LABEL: v_div_contract_sqrt_f64:
5116 ; SI-GISEL:       ; %bb.0:
5117 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5118 ; SI-GISEL-NEXT:    v_mov_b32_e32 v4, 0
5119 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v5, 8
5120 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5121 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0xffffff80
5122 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5123 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5124 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5125 ; SI-GISEL-NEXT:    v_mov_b32_e32 v11, 0x260
5126 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5127 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
5128 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], v[4:5]
5129 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5130 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5131 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5132 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5133 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5134 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5135 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5136 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v6, 0, v10, vcc
5137 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5138 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v11
5139 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5140 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5141 ; SI-GISEL-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5142 ; SI-GISEL-NEXT:    v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1]
5143 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5144 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v3, v5
5145 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v11
5146 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
5147 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5148 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5149 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5150 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5151 ; SI-GISEL-NEXT:    v_mul_f64 v[8:9], v[10:11], v[6:7]
5152 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
5153 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
5154 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5155 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5157 ; VI-SDAG-LABEL: v_div_contract_sqrt_f64:
5158 ; VI-SDAG:       ; %bb.0:
5159 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5160 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
5161 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
5162 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5163 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5164 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5165 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5166 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5167 ; VI-SDAG-NEXT:    v_mul_f64 v[6:7], v[2:3], v[4:5]
5168 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
5169 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5170 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5171 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5172 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5173 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5174 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5175 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5176 ; VI-SDAG-NEXT:    v_mov_b32_e32 v6, 0xffffff80
5177 ; VI-SDAG-NEXT:    v_mov_b32_e32 v7, 0x260
5178 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 0, v6, vcc
5179 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v7
5180 ; VI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5181 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5182 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5183 ; VI-SDAG-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5184 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5185 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5186 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5187 ; VI-SDAG-NEXT:    v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5188 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5189 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5190 ; VI-SDAG-NEXT:    v_mul_f64 v[10:11], v[8:9], v[6:7]
5191 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5192 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5193 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5194 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5196 ; VI-GISEL-LABEL: v_div_contract_sqrt_f64:
5197 ; VI-GISEL:       ; %bb.0:
5198 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5199 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0
5200 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v5, 8
5201 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5202 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5203 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5204 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5205 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5206 ; VI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
5207 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], v[4:5]
5208 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5209 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5210 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5211 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5212 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5213 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5214 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5215 ; VI-GISEL-NEXT:    v_mov_b32_e32 v6, 0xffffff80
5216 ; VI-GISEL-NEXT:    v_mov_b32_e32 v7, 0x260
5217 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v6, 0, v6, vcc
5218 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v7
5219 ; VI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5220 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5221 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5222 ; VI-GISEL-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5223 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5224 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5225 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5226 ; VI-GISEL-NEXT:    v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5227 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5228 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5229 ; VI-GISEL-NEXT:    v_mul_f64 v[10:11], v[8:9], v[6:7]
5230 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5231 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5232 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5233 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5234   %sqrt = call contract double @llvm.sqrt.f64(double %y)
5235   %rsq = fdiv contract double %x, %sqrt
5236   ret double %rsq
5239 define double @v_div_arcp_sqrt_f64(double %x, double %y) {
5240 ; SI-SDAG-LABEL: v_div_arcp_sqrt_f64:
5241 ; SI-SDAG:       ; %bb.0:
5242 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5243 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
5244 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
5245 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5246 ; SI-SDAG-NEXT:    v_mov_b32_e32 v10, 0xffffff80
5247 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5248 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5249 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5250 ; SI-SDAG-NEXT:    v_mov_b32_e32 v11, 0x260
5251 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5252 ; SI-SDAG-NEXT:    v_mul_f64 v[6:7], v[2:3], v[4:5]
5253 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
5254 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5255 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5256 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5257 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5258 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5259 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5260 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5261 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 0, v10, vcc
5262 ; SI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5263 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v11
5264 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5265 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5266 ; SI-SDAG-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5267 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5268 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v5
5269 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5270 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5271 ; SI-SDAG-NEXT:    v_div_scale_f64 v[8:9], s[4:5], v[0:1], v[2:3], v[0:1]
5272 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5273 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5274 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v9
5275 ; SI-SDAG-NEXT:    v_mul_f64 v[10:11], v[8:9], v[6:7]
5276 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
5277 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5278 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5279 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5280 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5282 ; SI-GISEL-LABEL: v_div_arcp_sqrt_f64:
5283 ; SI-GISEL:       ; %bb.0:
5284 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5285 ; SI-GISEL-NEXT:    v_mov_b32_e32 v4, 0
5286 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v5, 8
5287 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5288 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0xffffff80
5289 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5290 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5291 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5292 ; SI-GISEL-NEXT:    v_mov_b32_e32 v11, 0x260
5293 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5294 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
5295 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], v[4:5]
5296 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5297 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5298 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5299 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5300 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5301 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5302 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5303 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v6, 0, v10, vcc
5304 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5305 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v11
5306 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5307 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5308 ; SI-GISEL-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5309 ; SI-GISEL-NEXT:    v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1]
5310 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5311 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v3, v5
5312 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v11
5313 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
5314 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5315 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5316 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5317 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5318 ; SI-GISEL-NEXT:    v_mul_f64 v[8:9], v[10:11], v[6:7]
5319 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
5320 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
5321 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5322 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5324 ; VI-SDAG-LABEL: v_div_arcp_sqrt_f64:
5325 ; VI-SDAG:       ; %bb.0:
5326 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5327 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
5328 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
5329 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5330 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5331 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5332 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5333 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5334 ; VI-SDAG-NEXT:    v_mul_f64 v[6:7], v[2:3], v[4:5]
5335 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
5336 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5337 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5338 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5339 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5340 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5341 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5342 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5343 ; VI-SDAG-NEXT:    v_mov_b32_e32 v6, 0xffffff80
5344 ; VI-SDAG-NEXT:    v_mov_b32_e32 v7, 0x260
5345 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 0, v6, vcc
5346 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v7
5347 ; VI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5348 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5349 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5350 ; VI-SDAG-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5351 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5352 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5353 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5354 ; VI-SDAG-NEXT:    v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5355 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5356 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5357 ; VI-SDAG-NEXT:    v_mul_f64 v[10:11], v[8:9], v[6:7]
5358 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5359 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5360 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5361 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5363 ; VI-GISEL-LABEL: v_div_arcp_sqrt_f64:
5364 ; VI-GISEL:       ; %bb.0:
5365 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5366 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0
5367 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v5, 8
5368 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5369 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5370 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5371 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5372 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5373 ; VI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
5374 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], v[4:5]
5375 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5376 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5377 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5378 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5379 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5380 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5381 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5382 ; VI-GISEL-NEXT:    v_mov_b32_e32 v6, 0xffffff80
5383 ; VI-GISEL-NEXT:    v_mov_b32_e32 v7, 0x260
5384 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v6, 0, v6, vcc
5385 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v7
5386 ; VI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5387 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5388 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5389 ; VI-GISEL-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5390 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5391 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5392 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5393 ; VI-GISEL-NEXT:    v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5394 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5395 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5396 ; VI-GISEL-NEXT:    v_mul_f64 v[10:11], v[8:9], v[6:7]
5397 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5398 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5399 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5400 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5401   %sqrt = call double @llvm.sqrt.f64(double %y)
5402   %rsq = fdiv arcp double %x, %sqrt
5403   ret double %rsq
5406 define double @v_div_contract_arcp_sqrt_f64(double %x, double %y) {
5407 ; SI-SDAG-LABEL: v_div_contract_arcp_sqrt_f64:
5408 ; SI-SDAG:       ; %bb.0:
5409 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5410 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
5411 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
5412 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5413 ; SI-SDAG-NEXT:    v_mov_b32_e32 v10, 0xffffff80
5414 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5415 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5416 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5417 ; SI-SDAG-NEXT:    v_mov_b32_e32 v11, 0x260
5418 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5419 ; SI-SDAG-NEXT:    v_mul_f64 v[6:7], v[2:3], v[4:5]
5420 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
5421 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5422 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5423 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5424 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5425 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5426 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5427 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5428 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 0, v10, vcc
5429 ; SI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5430 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v11
5431 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5432 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5433 ; SI-SDAG-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5434 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5435 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v5
5436 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5437 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5438 ; SI-SDAG-NEXT:    v_div_scale_f64 v[8:9], s[4:5], v[0:1], v[2:3], v[0:1]
5439 ; SI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5440 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5441 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v9
5442 ; SI-SDAG-NEXT:    v_mul_f64 v[10:11], v[8:9], v[6:7]
5443 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
5444 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5445 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5446 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5447 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5449 ; SI-GISEL-LABEL: v_div_contract_arcp_sqrt_f64:
5450 ; SI-GISEL:       ; %bb.0:
5451 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5452 ; SI-GISEL-NEXT:    v_mov_b32_e32 v4, 0
5453 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v5, 8
5454 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5455 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0xffffff80
5456 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5457 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5458 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5459 ; SI-GISEL-NEXT:    v_mov_b32_e32 v11, 0x260
5460 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5461 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
5462 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], v[4:5]
5463 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5464 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5465 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5466 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5467 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5468 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5469 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5470 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v6, 0, v10, vcc
5471 ; SI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5472 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v11
5473 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5474 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5475 ; SI-GISEL-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5476 ; SI-GISEL-NEXT:    v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1]
5477 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5478 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v3, v5
5479 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v11
5480 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
5481 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5482 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5483 ; SI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5484 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5485 ; SI-GISEL-NEXT:    v_mul_f64 v[8:9], v[10:11], v[6:7]
5486 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
5487 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
5488 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5489 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5491 ; VI-SDAG-LABEL: v_div_contract_arcp_sqrt_f64:
5492 ; VI-SDAG:       ; %bb.0:
5493 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5494 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
5495 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
5496 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[2:3]
5497 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5498 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5499 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5500 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5501 ; VI-SDAG-NEXT:    v_mul_f64 v[6:7], v[2:3], v[4:5]
5502 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[4:5], 0.5
5503 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 0.5
5504 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5505 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5506 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5507 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[8:9], v[4:5], v[6:7]
5508 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[6:7], v[2:3]
5509 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[8:9], v[4:5], v[6:7]
5510 ; VI-SDAG-NEXT:    v_mov_b32_e32 v6, 0xffffff80
5511 ; VI-SDAG-NEXT:    v_mov_b32_e32 v7, 0x260
5512 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 0, v6, vcc
5513 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v7
5514 ; VI-SDAG-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5515 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5516 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5517 ; VI-SDAG-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5518 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5519 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5520 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5521 ; VI-SDAG-NEXT:    v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5522 ; VI-SDAG-NEXT:    v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5523 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5524 ; VI-SDAG-NEXT:    v_mul_f64 v[10:11], v[8:9], v[6:7]
5525 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5526 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5527 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5528 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5530 ; VI-GISEL-LABEL: v_div_contract_arcp_sqrt_f64:
5531 ; VI-GISEL:       ; %bb.0:
5532 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5533 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0
5534 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v5, 8
5535 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[2:3], v[4:5]
5536 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
5537 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v4, 8, v4
5538 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5539 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[4:5], v[2:3]
5540 ; VI-GISEL-NEXT:    v_mul_f64 v[6:7], v[4:5], 0.5
5541 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], v[4:5]
5542 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[6:7], v[4:5], 0.5
5543 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5544 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5545 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5546 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5547 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[4:5], v[2:3]
5548 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[8:9], v[6:7], v[4:5]
5549 ; VI-GISEL-NEXT:    v_mov_b32_e32 v6, 0xffffff80
5550 ; VI-GISEL-NEXT:    v_mov_b32_e32 v7, 0x260
5551 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v6, 0, v6, vcc
5552 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[2:3], v7
5553 ; VI-GISEL-NEXT:    v_ldexp_f64 v[4:5], v[4:5], v6
5554 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
5555 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v5, v3, vcc
5556 ; VI-GISEL-NEXT:    v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
5557 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[6:7], v[4:5]
5558 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
5559 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
5560 ; VI-GISEL-NEXT:    v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
5561 ; VI-GISEL-NEXT:    v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
5562 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
5563 ; VI-GISEL-NEXT:    v_mul_f64 v[10:11], v[8:9], v[6:7]
5564 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
5565 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
5566 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
5567 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5568   %sqrt = call contract double @llvm.sqrt.f64(double %y)
5569   %rsq = fdiv contract arcp double %x, %sqrt
5570   ret double %rsq
5573 define double @v_div_const_contract_sqrt_f64(double %x) {
5574 ; SI-SDAG-LABEL: v_div_const_contract_sqrt_f64:
5575 ; SI-SDAG:       ; %bb.0:
5576 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5577 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0
5578 ; SI-SDAG-NEXT:    s_brev_b32 s5, 8
5579 ; SI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
5580 ; SI-SDAG-NEXT:    v_mov_b32_e32 v8, 0xffffff80
5581 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
5582 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
5583 ; SI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
5584 ; SI-SDAG-NEXT:    v_mov_b32_e32 v9, 0x260
5585 ; SI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
5586 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0
5587 ; SI-SDAG-NEXT:    s_mov_b32 s7, 0x40700000
5588 ; SI-SDAG-NEXT:    s_mov_b32 s8, 0x40700000
5589 ; SI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
5590 ; SI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
5591 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
5592 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5593 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
5594 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
5595 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
5596 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
5597 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
5598 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
5599 ; SI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5600 ; SI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
5601 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
5602 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
5603 ; SI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], s[6:7]
5604 ; SI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
5605 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v3
5606 ; SI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5607 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5608 ; SI-SDAG-NEXT:    v_div_scale_f64 v[6:7], s[4:5], s[6:7], v[0:1], s[6:7]
5609 ; SI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
5610 ; SI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5611 ; SI-SDAG-NEXT:    v_cmp_eq_u32_e64 s[4:5], s8, v7
5612 ; SI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
5613 ; SI-SDAG-NEXT:    s_xor_b64 vcc, s[4:5], vcc
5614 ; SI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
5615 ; SI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
5616 ; SI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], s[6:7]
5617 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5619 ; SI-GISEL-LABEL: v_div_const_contract_sqrt_f64:
5620 ; SI-GISEL:       ; %bb.0:
5621 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5622 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5623 ; SI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
5624 ; SI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
5625 ; SI-GISEL-NEXT:    v_mov_b32_e32 v8, 0xffffff80
5626 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
5627 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
5628 ; SI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
5629 ; SI-GISEL-NEXT:    v_mov_b32_e32 v9, 0x260
5630 ; SI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
5631 ; SI-GISEL-NEXT:    s_mov_b32 s6, 0
5632 ; SI-GISEL-NEXT:    s_mov_b32 s7, 0x40700000
5633 ; SI-GISEL-NEXT:    v_mov_b32_e32 v10, 0x40700000
5634 ; SI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
5635 ; SI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
5636 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
5637 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
5638 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5639 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
5640 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
5641 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
5642 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
5643 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v8, vcc
5644 ; SI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5645 ; SI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v9
5646 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
5647 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
5648 ; SI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], s[6:7]
5649 ; SI-GISEL-NEXT:    v_div_scale_f64 v[8:9], s[4:5], s[6:7], v[0:1], s[6:7]
5650 ; SI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
5651 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e64 s[4:5], v1, v3
5652 ; SI-GISEL-NEXT:    v_cmp_eq_u32_e32 vcc, v10, v9
5653 ; SI-GISEL-NEXT:    s_xor_b64 vcc, vcc, s[4:5]
5654 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5655 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5656 ; SI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5657 ; SI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5658 ; SI-GISEL-NEXT:    v_mul_f64 v[6:7], v[8:9], v[4:5]
5659 ; SI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
5660 ; SI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
5661 ; SI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], s[6:7]
5662 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5664 ; VI-SDAG-LABEL: v_div_const_contract_sqrt_f64:
5665 ; VI-SDAG:       ; %bb.0:
5666 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5667 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
5668 ; VI-SDAG-NEXT:    s_brev_b32 s5, 8
5669 ; VI-SDAG-NEXT:    v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]
5670 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0
5671 ; VI-SDAG-NEXT:    s_mov_b32 s5, 0x40700000
5672 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
5673 ; VI-SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
5674 ; VI-SDAG-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
5675 ; VI-SDAG-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
5676 ; VI-SDAG-NEXT:    v_mul_f64 v[4:5], v[0:1], v[2:3]
5677 ; VI-SDAG-NEXT:    v_mul_f64 v[2:3], v[2:3], 0.5
5678 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5
5679 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5680 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
5681 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
5682 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]
5683 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]
5684 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]
5685 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0xffffff80
5686 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x260
5687 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
5688 ; VI-SDAG-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
5689 ; VI-SDAG-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5690 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
5691 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
5692 ; VI-SDAG-NEXT:    v_div_scale_f64 v[2:3], s[6:7], v[0:1], v[0:1], s[4:5]
5693 ; VI-SDAG-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
5694 ; VI-SDAG-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5695 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5696 ; VI-SDAG-NEXT:    v_div_scale_f64 v[6:7], vcc, s[4:5], v[0:1], s[4:5]
5697 ; VI-SDAG-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
5698 ; VI-SDAG-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5699 ; VI-SDAG-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
5700 ; VI-SDAG-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
5701 ; VI-SDAG-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
5702 ; VI-SDAG-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], s[4:5]
5703 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5705 ; VI-GISEL-LABEL: v_div_const_contract_sqrt_f64:
5706 ; VI-GISEL:       ; %bb.0:
5707 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5708 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5709 ; VI-GISEL-NEXT:    v_bfrev_b32_e32 v3, 8
5710 ; VI-GISEL-NEXT:    v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]
5711 ; VI-GISEL-NEXT:    s_mov_b32 s4, 0
5712 ; VI-GISEL-NEXT:    s_mov_b32 s5, 0x40700000
5713 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
5714 ; VI-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
5715 ; VI-GISEL-NEXT:    v_ldexp_f64 v[0:1], v[0:1], v2
5716 ; VI-GISEL-NEXT:    v_rsq_f64_e32 v[2:3], v[0:1]
5717 ; VI-GISEL-NEXT:    v_mul_f64 v[4:5], v[2:3], 0.5
5718 ; VI-GISEL-NEXT:    v_mul_f64 v[2:3], v[0:1], v[2:3]
5719 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5
5720 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]
5721 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5722 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
5723 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
5724 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]
5725 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]
5726 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0xffffff80
5727 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x260
5728 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc
5729 ; VI-GISEL-NEXT:    v_cmp_class_f64_e32 vcc, v[0:1], v5
5730 ; VI-GISEL-NEXT:    v_ldexp_f64 v[2:3], v[2:3], v4
5731 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
5732 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc
5733 ; VI-GISEL-NEXT:    v_div_scale_f64 v[2:3], s[6:7], v[0:1], v[0:1], s[4:5]
5734 ; VI-GISEL-NEXT:    v_rcp_f64_e32 v[4:5], v[2:3]
5735 ; VI-GISEL-NEXT:    v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
5736 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
5737 ; VI-GISEL-NEXT:    v_div_scale_f64 v[6:7], vcc, s[4:5], v[0:1], s[4:5]
5738 ; VI-GISEL-NEXT:    v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
5739 ; VI-GISEL-NEXT:    v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
5740 ; VI-GISEL-NEXT:    v_mul_f64 v[8:9], v[6:7], v[4:5]
5741 ; VI-GISEL-NEXT:    v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
5742 ; VI-GISEL-NEXT:    v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
5743 ; VI-GISEL-NEXT:    v_div_fixup_f64 v[0:1], v[2:3], v[0:1], s[4:5]
5744 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5745   %sqrt = call contract double @llvm.sqrt.f64(double %x)
5746   %rsq = fdiv contract double 256.0, %sqrt
5747   ret double %rsq
5750 attributes #0 = { "unsafe-fp-math"="true" }
5751 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
5752 ; GCN: {{.*}}
5753 ; GISEL: {{.*}}
5754 ; SDAG: {{.*}}