1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=tahiti -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX6 %s
3 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=tahiti -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX6 %s
5 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=fiji -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX8 %s
6 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=fiji -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX8 %s
8 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9 %s
9 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9 %s
11 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10 %s
12 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10 %s
14 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1100 -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11 %s
15 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1100 -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11 %s
17 define double @v_fdiv_f64(double %a, double %b) {
18 ; GFX6-LABEL: v_fdiv_f64:
20 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21 ; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
22 ; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1]
23 ; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
24 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v5
25 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v11
26 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
27 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
28 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
29 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
30 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
31 ; GFX6-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
32 ; GFX6-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
33 ; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
34 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
35 ; GFX6-NEXT: s_setpc_b64 s[30:31]
37 ; GFX8-LABEL: v_fdiv_f64:
39 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40 ; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
41 ; GFX8-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
42 ; GFX8-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
43 ; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
44 ; GFX8-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
45 ; GFX8-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
46 ; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
47 ; GFX8-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
48 ; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
49 ; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
50 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
51 ; GFX8-NEXT: s_setpc_b64 s[30:31]
53 ; GFX9-LABEL: v_fdiv_f64:
55 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
56 ; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
57 ; GFX9-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
58 ; GFX9-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
59 ; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
60 ; GFX9-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
61 ; GFX9-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
62 ; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
63 ; GFX9-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
64 ; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
65 ; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
66 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
67 ; GFX9-NEXT: s_setpc_b64 s[30:31]
69 ; GFX10-LABEL: v_fdiv_f64:
71 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
72 ; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[2:3], v[2:3], v[0:1]
73 ; GFX10-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1]
74 ; GFX10-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
75 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
76 ; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
77 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
78 ; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
79 ; GFX10-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
80 ; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
81 ; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
82 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
83 ; GFX10-NEXT: s_setpc_b64 s[30:31]
85 ; GFX11-LABEL: v_fdiv_f64:
87 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
88 ; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[2:3], v[2:3], v[0:1]
89 ; GFX11-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1]
90 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
91 ; GFX11-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
92 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
93 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
94 ; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
95 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
96 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
97 ; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
98 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
99 ; GFX11-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
100 ; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
101 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
102 ; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
103 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
104 ; GFX11-NEXT: s_setpc_b64 s[30:31]
105 %fdiv = fdiv double %a, %b
109 define double @v_fdiv_f64_afn(double %a, double %b) {
110 ; GCN-LABEL: v_fdiv_f64_afn:
112 ; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
113 ; GCN-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
114 ; GCN-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
115 ; GCN-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
116 ; GCN-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
117 ; GCN-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
118 ; GCN-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5]
119 ; GCN-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1]
120 ; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7]
121 ; GCN-NEXT: s_setpc_b64 s[30:31]
123 ; GFX10-LABEL: v_fdiv_f64_afn:
125 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
126 ; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
127 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
128 ; GFX10-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
129 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
130 ; GFX10-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
131 ; GFX10-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5]
132 ; GFX10-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1]
133 ; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7]
134 ; GFX10-NEXT: s_setpc_b64 s[30:31]
136 ; GFX11-LABEL: v_fdiv_f64_afn:
138 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
139 ; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
140 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
141 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
142 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
143 ; GFX11-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
144 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
145 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
146 ; GFX11-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
147 ; GFX11-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5]
148 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
149 ; GFX11-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1]
150 ; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7]
151 ; GFX11-NEXT: s_setpc_b64 s[30:31]
152 %fdiv = fdiv afn double %a, %b
156 define double @v_fdiv_f64_ulp25(double %a, double %b) {
157 ; GFX6-LABEL: v_fdiv_f64_ulp25:
159 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
160 ; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
161 ; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1]
162 ; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
163 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v5
164 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v11
165 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
166 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
167 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
168 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
169 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
170 ; GFX6-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
171 ; GFX6-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
172 ; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
173 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
174 ; GFX6-NEXT: s_setpc_b64 s[30:31]
176 ; GFX8-LABEL: v_fdiv_f64_ulp25:
178 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
179 ; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
180 ; GFX8-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
181 ; GFX8-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
182 ; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
183 ; GFX8-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
184 ; GFX8-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
185 ; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
186 ; GFX8-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
187 ; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
188 ; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
189 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
190 ; GFX8-NEXT: s_setpc_b64 s[30:31]
192 ; GFX9-LABEL: v_fdiv_f64_ulp25:
194 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
195 ; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
196 ; GFX9-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
197 ; GFX9-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
198 ; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
199 ; GFX9-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
200 ; GFX9-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
201 ; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
202 ; GFX9-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
203 ; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
204 ; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
205 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
206 ; GFX9-NEXT: s_setpc_b64 s[30:31]
208 ; GFX10-LABEL: v_fdiv_f64_ulp25:
210 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
211 ; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[2:3], v[2:3], v[0:1]
212 ; GFX10-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1]
213 ; GFX10-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
214 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
215 ; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
216 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
217 ; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
218 ; GFX10-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
219 ; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
220 ; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
221 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
222 ; GFX10-NEXT: s_setpc_b64 s[30:31]
224 ; GFX11-LABEL: v_fdiv_f64_ulp25:
226 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
227 ; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[2:3], v[2:3], v[0:1]
228 ; GFX11-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1]
229 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
230 ; GFX11-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
231 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
232 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
233 ; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
234 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
235 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
236 ; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
237 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
238 ; GFX11-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
239 ; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
240 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
241 ; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
242 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
243 ; GFX11-NEXT: s_setpc_b64 s[30:31]
244 %fdiv = fdiv double %a, %b, !fpmath !0
248 define double @v_rcp_f64(double %x) {
249 ; GFX6-LABEL: v_rcp_f64:
251 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
252 ; GFX6-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
253 ; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
254 ; GFX6-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
255 ; GFX6-NEXT: v_mov_b32_e32 v10, 0x3ff00000
256 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
257 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
258 ; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
259 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
260 ; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
261 ; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
262 ; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
263 ; GFX6-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
264 ; GFX6-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
265 ; GFX6-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
266 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
267 ; GFX6-NEXT: s_setpc_b64 s[30:31]
269 ; GFX8-LABEL: v_rcp_f64:
271 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
272 ; GFX8-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
273 ; GFX8-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
274 ; GFX8-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
275 ; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
276 ; GFX8-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
277 ; GFX8-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
278 ; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
279 ; GFX8-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
280 ; GFX8-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
281 ; GFX8-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
282 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
283 ; GFX8-NEXT: s_setpc_b64 s[30:31]
285 ; GFX9-LABEL: v_rcp_f64:
287 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
288 ; GFX9-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
289 ; GFX9-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
290 ; GFX9-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
291 ; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
292 ; GFX9-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
293 ; GFX9-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
294 ; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
295 ; GFX9-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
296 ; GFX9-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
297 ; GFX9-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
298 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
299 ; GFX9-NEXT: s_setpc_b64 s[30:31]
301 ; GFX10-LABEL: v_rcp_f64:
303 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
304 ; GFX10-NEXT: v_div_scale_f64 v[2:3], s4, v[0:1], v[0:1], 1.0
305 ; GFX10-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0
306 ; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
307 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
308 ; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
309 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
310 ; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
311 ; GFX10-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
312 ; GFX10-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
313 ; GFX10-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
314 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
315 ; GFX10-NEXT: s_setpc_b64 s[30:31]
317 ; GFX11-LABEL: v_rcp_f64:
319 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
320 ; GFX11-NEXT: v_div_scale_f64 v[2:3], null, v[0:1], v[0:1], 1.0
321 ; GFX11-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0
322 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
323 ; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
324 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
325 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
326 ; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
327 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
328 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
329 ; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
330 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
331 ; GFX11-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
332 ; GFX11-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
333 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
334 ; GFX11-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
335 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
336 ; GFX11-NEXT: s_setpc_b64 s[30:31]
337 %fdiv = fdiv double 1.0, %x
341 define double @v_rcp_f64_arcp(double %x) {
342 ; GFX6-LABEL: v_rcp_f64_arcp:
344 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
345 ; GFX6-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
346 ; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
347 ; GFX6-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
348 ; GFX6-NEXT: v_mov_b32_e32 v10, 0x3ff00000
349 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
350 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
351 ; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
352 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
353 ; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
354 ; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
355 ; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
356 ; GFX6-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
357 ; GFX6-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
358 ; GFX6-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
359 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
360 ; GFX6-NEXT: s_setpc_b64 s[30:31]
362 ; GFX8-LABEL: v_rcp_f64_arcp:
364 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
365 ; GFX8-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
366 ; GFX8-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
367 ; GFX8-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
368 ; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
369 ; GFX8-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
370 ; GFX8-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
371 ; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
372 ; GFX8-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
373 ; GFX8-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
374 ; GFX8-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
375 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
376 ; GFX8-NEXT: s_setpc_b64 s[30:31]
378 ; GFX9-LABEL: v_rcp_f64_arcp:
380 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
381 ; GFX9-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
382 ; GFX9-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
383 ; GFX9-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
384 ; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
385 ; GFX9-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
386 ; GFX9-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
387 ; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
388 ; GFX9-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
389 ; GFX9-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
390 ; GFX9-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
391 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
392 ; GFX9-NEXT: s_setpc_b64 s[30:31]
394 ; GFX10-LABEL: v_rcp_f64_arcp:
396 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
397 ; GFX10-NEXT: v_div_scale_f64 v[2:3], s4, v[0:1], v[0:1], 1.0
398 ; GFX10-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0
399 ; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
400 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
401 ; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
402 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
403 ; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
404 ; GFX10-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
405 ; GFX10-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
406 ; GFX10-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
407 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
408 ; GFX10-NEXT: s_setpc_b64 s[30:31]
410 ; GFX11-LABEL: v_rcp_f64_arcp:
412 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
413 ; GFX11-NEXT: v_div_scale_f64 v[2:3], null, v[0:1], v[0:1], 1.0
414 ; GFX11-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0
415 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
416 ; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
417 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
418 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
419 ; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
420 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
421 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
422 ; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
423 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
424 ; GFX11-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
425 ; GFX11-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
426 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
427 ; GFX11-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
428 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
429 ; GFX11-NEXT: s_setpc_b64 s[30:31]
430 %fdiv = fdiv arcp double 1.0, %x
434 define double @v_rcp_f64_arcp_afn(double %x) {
435 ; GCN-LABEL: v_rcp_f64_arcp_afn:
437 ; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
438 ; GCN-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
439 ; GCN-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
440 ; GCN-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
441 ; GCN-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
442 ; GCN-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
443 ; GCN-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
444 ; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
445 ; GCN-NEXT: s_setpc_b64 s[30:31]
447 ; GFX10-LABEL: v_rcp_f64_arcp_afn:
449 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
450 ; GFX10-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
451 ; GFX10-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
452 ; GFX10-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
453 ; GFX10-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
454 ; GFX10-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
455 ; GFX10-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
456 ; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
457 ; GFX10-NEXT: s_setpc_b64 s[30:31]
459 ; GFX11-LABEL: v_rcp_f64_arcp_afn:
461 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
462 ; GFX11-NEXT: v_rcp_f64_e32 v[2:3], v[0:1]
463 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
464 ; GFX11-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
465 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
466 ; GFX11-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
467 ; GFX11-NEXT: v_fma_f64 v[4:5], -v[0:1], v[2:3], 1.0
468 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
469 ; GFX11-NEXT: v_fma_f64 v[2:3], v[4:5], v[2:3], v[2:3]
470 ; GFX11-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], 1.0
471 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
472 ; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], v[2:3]
473 ; GFX11-NEXT: s_setpc_b64 s[30:31]
474 %fdiv = fdiv arcp afn double 1.0, %x
478 define double @v_rcp_f64_ulp25(double %x) {
479 ; GFX6-LABEL: v_rcp_f64_ulp25:
481 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
482 ; GFX6-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
483 ; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
484 ; GFX6-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
485 ; GFX6-NEXT: v_mov_b32_e32 v10, 0x3ff00000
486 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v10, v9
487 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v3
488 ; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
489 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
490 ; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
491 ; GFX6-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
492 ; GFX6-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
493 ; GFX6-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
494 ; GFX6-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
495 ; GFX6-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
496 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
497 ; GFX6-NEXT: s_setpc_b64 s[30:31]
499 ; GFX8-LABEL: v_rcp_f64_ulp25:
501 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
502 ; GFX8-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
503 ; GFX8-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
504 ; GFX8-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
505 ; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
506 ; GFX8-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
507 ; GFX8-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
508 ; GFX8-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
509 ; GFX8-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
510 ; GFX8-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
511 ; GFX8-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
512 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
513 ; GFX8-NEXT: s_setpc_b64 s[30:31]
515 ; GFX9-LABEL: v_rcp_f64_ulp25:
517 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
518 ; GFX9-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], 1.0
519 ; GFX9-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
520 ; GFX9-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
521 ; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
522 ; GFX9-NEXT: v_div_scale_f64 v[6:7], vcc, 1.0, v[0:1], 1.0
523 ; GFX9-NEXT: v_fma_f64 v[8:9], -v[2:3], v[4:5], 1.0
524 ; GFX9-NEXT: v_fma_f64 v[4:5], v[4:5], v[8:9], v[4:5]
525 ; GFX9-NEXT: v_mul_f64 v[8:9], v[6:7], v[4:5]
526 ; GFX9-NEXT: v_fma_f64 v[2:3], -v[2:3], v[8:9], v[6:7]
527 ; GFX9-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[8:9]
528 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
529 ; GFX9-NEXT: s_setpc_b64 s[30:31]
531 ; GFX10-LABEL: v_rcp_f64_ulp25:
533 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
534 ; GFX10-NEXT: v_div_scale_f64 v[2:3], s4, v[0:1], v[0:1], 1.0
535 ; GFX10-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0
536 ; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
537 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
538 ; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
539 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
540 ; GFX10-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
541 ; GFX10-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
542 ; GFX10-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
543 ; GFX10-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
544 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
545 ; GFX10-NEXT: s_setpc_b64 s[30:31]
547 ; GFX11-LABEL: v_rcp_f64_ulp25:
549 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
550 ; GFX11-NEXT: v_div_scale_f64 v[2:3], null, v[0:1], v[0:1], 1.0
551 ; GFX11-NEXT: v_div_scale_f64 v[8:9], vcc_lo, 1.0, v[0:1], 1.0
552 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
553 ; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
554 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
555 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
556 ; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
557 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
558 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
559 ; GFX11-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]
560 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
561 ; GFX11-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]
562 ; GFX11-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]
563 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
564 ; GFX11-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]
565 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[2:3], v[0:1], 1.0
566 ; GFX11-NEXT: s_setpc_b64 s[30:31]
567 %fdiv = fdiv double 1.0, %x, !fpmath !0
571 define double @v_fdiv_f64_afn_ulp25(double %a, double %b) {
572 ; GCN-LABEL: v_fdiv_f64_afn_ulp25:
574 ; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
575 ; GCN-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
576 ; GCN-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
577 ; GCN-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
578 ; GCN-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
579 ; GCN-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
580 ; GCN-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5]
581 ; GCN-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1]
582 ; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7]
583 ; GCN-NEXT: s_setpc_b64 s[30:31]
585 ; GFX10-LABEL: v_fdiv_f64_afn_ulp25:
587 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
588 ; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
589 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
590 ; GFX10-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
591 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
592 ; GFX10-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
593 ; GFX10-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5]
594 ; GFX10-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1]
595 ; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7]
596 ; GFX10-NEXT: s_setpc_b64 s[30:31]
598 ; GFX11-LABEL: v_fdiv_f64_afn_ulp25:
600 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
601 ; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]
602 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
603 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
604 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
605 ; GFX11-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
606 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0
607 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
608 ; GFX11-NEXT: v_fma_f64 v[4:5], v[6:7], v[4:5], v[4:5]
609 ; GFX11-NEXT: v_mul_f64 v[6:7], v[0:1], v[4:5]
610 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
611 ; GFX11-NEXT: v_fma_f64 v[0:1], -v[2:3], v[6:7], v[0:1]
612 ; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[6:7]
613 ; GFX11-NEXT: s_setpc_b64 s[30:31]
614 %fdiv = fdiv afn double %a, %b, !fpmath !0
618 define double @v_fdiv_f64_arcp_ulp25(double %a, double %b) {
619 ; GFX6-LABEL: v_fdiv_f64_arcp_ulp25:
621 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
622 ; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
623 ; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[0:1], v[2:3], v[0:1]
624 ; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
625 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v5
626 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v11
627 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
628 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
629 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
630 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
631 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
632 ; GFX6-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
633 ; GFX6-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
634 ; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
635 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
636 ; GFX6-NEXT: s_setpc_b64 s[30:31]
638 ; GFX8-LABEL: v_fdiv_f64_arcp_ulp25:
640 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
641 ; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
642 ; GFX8-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
643 ; GFX8-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
644 ; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
645 ; GFX8-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
646 ; GFX8-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
647 ; GFX8-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
648 ; GFX8-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
649 ; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
650 ; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
651 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
652 ; GFX8-NEXT: s_setpc_b64 s[30:31]
654 ; GFX9-LABEL: v_fdiv_f64_arcp_ulp25:
656 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
657 ; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[2:3], v[2:3], v[0:1]
658 ; GFX9-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
659 ; GFX9-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
660 ; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
661 ; GFX9-NEXT: v_div_scale_f64 v[8:9], vcc, v[0:1], v[2:3], v[0:1]
662 ; GFX9-NEXT: v_fma_f64 v[10:11], -v[4:5], v[6:7], 1.0
663 ; GFX9-NEXT: v_fma_f64 v[6:7], v[6:7], v[10:11], v[6:7]
664 ; GFX9-NEXT: v_mul_f64 v[10:11], v[8:9], v[6:7]
665 ; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[10:11], v[8:9]
666 ; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[10:11]
667 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
668 ; GFX9-NEXT: s_setpc_b64 s[30:31]
670 ; GFX10-LABEL: v_fdiv_f64_arcp_ulp25:
672 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
673 ; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[2:3], v[2:3], v[0:1]
674 ; GFX10-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1]
675 ; GFX10-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
676 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
677 ; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
678 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
679 ; GFX10-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
680 ; GFX10-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
681 ; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
682 ; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
683 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
684 ; GFX10-NEXT: s_setpc_b64 s[30:31]
686 ; GFX11-LABEL: v_fdiv_f64_arcp_ulp25:
688 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
689 ; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[2:3], v[2:3], v[0:1]
690 ; GFX11-NEXT: v_div_scale_f64 v[10:11], vcc_lo, v[0:1], v[2:3], v[0:1]
691 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
692 ; GFX11-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
693 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
694 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
695 ; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
696 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
697 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
698 ; GFX11-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
699 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
700 ; GFX11-NEXT: v_mul_f64 v[8:9], v[10:11], v[6:7]
701 ; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[8:9], v[10:11]
702 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
703 ; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[6:7], v[8:9]
704 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[2:3], v[0:1]
705 ; GFX11-NEXT: s_setpc_b64 s[30:31]
706 %fdiv = fdiv arcp double %a, %b, !fpmath !0
710 define <2 x double> @v_fdiv_v2f64(<2 x double> %a, <2 x double> %b) {
711 ; GFX6-LABEL: v_fdiv_v2f64:
713 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
714 ; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1]
715 ; GFX6-NEXT: v_div_scale_f64 v[16:17], s[4:5], v[0:1], v[4:5], v[0:1]
716 ; GFX6-NEXT: v_rcp_f64_e32 v[10:11], v[8:9]
717 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v17
718 ; GFX6-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], 1.0
719 ; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]
720 ; GFX6-NEXT: v_div_scale_f64 v[12:13], s[4:5], v[6:7], v[6:7], v[2:3]
721 ; GFX6-NEXT: v_fma_f64 v[14:15], -v[8:9], v[10:11], 1.0
722 ; GFX6-NEXT: v_rcp_f64_e32 v[18:19], v[12:13]
723 ; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
724 ; GFX6-NEXT: v_mul_f64 v[14:15], v[16:17], v[10:11]
725 ; GFX6-NEXT: v_fma_f64 v[20:21], -v[12:13], v[18:19], 1.0
726 ; GFX6-NEXT: v_fma_f64 v[22:23], -v[8:9], v[14:15], v[16:17]
727 ; GFX6-NEXT: v_fma_f64 v[18:19], v[18:19], v[20:21], v[18:19]
728 ; GFX6-NEXT: v_div_scale_f64 v[20:21], s[4:5], v[2:3], v[6:7], v[2:3]
729 ; GFX6-NEXT: v_fma_f64 v[16:17], -v[12:13], v[18:19], 1.0
730 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v5, v9
731 ; GFX6-NEXT: v_fma_f64 v[8:9], v[18:19], v[16:17], v[18:19]
732 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
733 ; GFX6-NEXT: v_mul_f64 v[16:17], v[20:21], v[8:9]
734 ; GFX6-NEXT: v_div_fmas_f64 v[10:11], v[22:23], v[10:11], v[14:15]
735 ; GFX6-NEXT: v_fma_f64 v[14:15], -v[12:13], v[16:17], v[20:21]
736 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v3, v21
737 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v7, v13
738 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
739 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[10:11], v[4:5], v[0:1]
741 ; GFX6-NEXT: v_div_fmas_f64 v[8:9], v[14:15], v[8:9], v[16:17]
742 ; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[8:9], v[6:7], v[2:3]
743 ; GFX6-NEXT: s_setpc_b64 s[30:31]
745 ; GFX8-LABEL: v_fdiv_v2f64:
747 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
748 ; GFX8-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1]
749 ; GFX8-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3]
750 ; GFX8-NEXT: v_div_scale_f64 v[20:21], s[4:5], v[2:3], v[6:7], v[2:3]
751 ; GFX8-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
752 ; GFX8-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
753 ; GFX8-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
754 ; GFX8-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
755 ; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
756 ; GFX8-NEXT: v_div_scale_f64 v[16:17], vcc, v[0:1], v[4:5], v[0:1]
757 ; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
758 ; GFX8-NEXT: v_fma_f64 v[18:19], -v[8:9], v[12:13], 1.0
759 ; GFX8-NEXT: v_fma_f64 v[22:23], -v[10:11], v[14:15], 1.0
760 ; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]
761 ; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[22:23], v[14:15]
762 ; GFX8-NEXT: v_mul_f64 v[18:19], v[16:17], v[12:13]
763 ; GFX8-NEXT: v_mul_f64 v[22:23], v[20:21], v[14:15]
764 ; GFX8-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[16:17]
765 ; GFX8-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[20:21]
766 ; GFX8-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
767 ; GFX8-NEXT: s_mov_b64 vcc, s[4:5]
768 ; GFX8-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
769 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
770 ; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
771 ; GFX8-NEXT: s_setpc_b64 s[30:31]
773 ; GFX9-LABEL: v_fdiv_v2f64:
775 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
776 ; GFX9-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1]
777 ; GFX9-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3]
778 ; GFX9-NEXT: v_div_scale_f64 v[20:21], s[4:5], v[2:3], v[6:7], v[2:3]
779 ; GFX9-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
780 ; GFX9-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
781 ; GFX9-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
782 ; GFX9-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
783 ; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
784 ; GFX9-NEXT: v_div_scale_f64 v[16:17], vcc, v[0:1], v[4:5], v[0:1]
785 ; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
786 ; GFX9-NEXT: v_fma_f64 v[18:19], -v[8:9], v[12:13], 1.0
787 ; GFX9-NEXT: v_fma_f64 v[22:23], -v[10:11], v[14:15], 1.0
788 ; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]
789 ; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[22:23], v[14:15]
790 ; GFX9-NEXT: v_mul_f64 v[18:19], v[16:17], v[12:13]
791 ; GFX9-NEXT: v_mul_f64 v[22:23], v[20:21], v[14:15]
792 ; GFX9-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[16:17]
793 ; GFX9-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[20:21]
794 ; GFX9-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
795 ; GFX9-NEXT: s_mov_b64 vcc, s[4:5]
796 ; GFX9-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
797 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
798 ; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
799 ; GFX9-NEXT: s_setpc_b64 s[30:31]
801 ; GFX10-LABEL: v_fdiv_v2f64:
803 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
804 ; GFX10-NEXT: v_div_scale_f64 v[8:9], s4, v[4:5], v[4:5], v[0:1]
805 ; GFX10-NEXT: v_div_scale_f64 v[10:11], s4, v[6:7], v[6:7], v[2:3]
806 ; GFX10-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1]
807 ; GFX10-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
808 ; GFX10-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
809 ; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
810 ; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
811 ; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
812 ; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
813 ; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
814 ; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
815 ; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
816 ; GFX10-NEXT: v_div_scale_f64 v[16:17], s4, v[2:3], v[6:7], v[2:3]
817 ; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
818 ; GFX10-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13]
819 ; GFX10-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15]
820 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21]
821 ; GFX10-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17]
822 ; GFX10-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
823 ; GFX10-NEXT: s_mov_b32 vcc_lo, s4
824 ; GFX10-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
825 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
826 ; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
827 ; GFX10-NEXT: s_setpc_b64 s[30:31]
829 ; GFX11-LABEL: v_fdiv_v2f64:
831 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
832 ; GFX11-NEXT: v_div_scale_f64 v[8:9], null, v[4:5], v[4:5], v[0:1]
833 ; GFX11-NEXT: v_div_scale_f64 v[10:11], null, v[6:7], v[6:7], v[2:3]
834 ; GFX11-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1]
835 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
836 ; GFX11-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
837 ; GFX11-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
838 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
839 ; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
840 ; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
841 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
842 ; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
843 ; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
844 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
845 ; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
846 ; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
847 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
848 ; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
849 ; GFX11-NEXT: v_div_scale_f64 v[16:17], s0, v[2:3], v[6:7], v[2:3]
850 ; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
851 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
852 ; GFX11-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13]
853 ; GFX11-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15]
854 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
855 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21]
856 ; GFX11-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17]
857 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
858 ; GFX11-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
859 ; GFX11-NEXT: s_mov_b32 vcc_lo, s0
860 ; GFX11-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
861 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
862 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
863 ; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
864 ; GFX11-NEXT: s_setpc_b64 s[30:31]
865 %fdiv = fdiv <2 x double> %a, %b
866 ret <2 x double> %fdiv
869 define <2 x double> @v_fdiv_v2f64_afn(<2 x double> %a, <2 x double> %b) {
870 ; GCN-LABEL: v_fdiv_v2f64_afn:
872 ; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
873 ; GCN-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
874 ; GCN-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
875 ; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
876 ; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
877 ; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
878 ; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
879 ; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
880 ; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
881 ; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
882 ; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
883 ; GCN-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9]
884 ; GCN-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11]
885 ; GCN-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1]
886 ; GCN-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3]
887 ; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13]
888 ; GCN-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15]
889 ; GCN-NEXT: s_setpc_b64 s[30:31]
891 ; GFX10-LABEL: v_fdiv_v2f64_afn:
893 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
894 ; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
895 ; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
896 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
897 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
898 ; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
899 ; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
900 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
901 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
902 ; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
903 ; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
904 ; GFX10-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9]
905 ; GFX10-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11]
906 ; GFX10-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1]
907 ; GFX10-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3]
908 ; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13]
909 ; GFX10-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15]
910 ; GFX10-NEXT: s_setpc_b64 s[30:31]
912 ; GFX11-LABEL: v_fdiv_v2f64_afn:
914 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
915 ; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
916 ; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
917 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
918 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
919 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
920 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
921 ; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
922 ; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
923 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
924 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
925 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
926 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
927 ; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
928 ; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
929 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
930 ; GFX11-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9]
931 ; GFX11-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11]
932 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
933 ; GFX11-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1]
934 ; GFX11-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3]
935 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
936 ; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13]
937 ; GFX11-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15]
938 ; GFX11-NEXT: s_setpc_b64 s[30:31]
939 %fdiv = fdiv afn <2 x double> %a, %b
940 ret <2 x double> %fdiv
943 define <2 x double> @v_fdiv_v2f64_ulp25(<2 x double> %a, <2 x double> %b) {
944 ; GFX6-LABEL: v_fdiv_v2f64_ulp25:
946 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
947 ; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1]
948 ; GFX6-NEXT: v_div_scale_f64 v[16:17], s[4:5], v[0:1], v[4:5], v[0:1]
949 ; GFX6-NEXT: v_rcp_f64_e32 v[10:11], v[8:9]
950 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v17
951 ; GFX6-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], 1.0
952 ; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]
953 ; GFX6-NEXT: v_div_scale_f64 v[12:13], s[4:5], v[6:7], v[6:7], v[2:3]
954 ; GFX6-NEXT: v_fma_f64 v[14:15], -v[8:9], v[10:11], 1.0
955 ; GFX6-NEXT: v_rcp_f64_e32 v[18:19], v[12:13]
956 ; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
957 ; GFX6-NEXT: v_mul_f64 v[14:15], v[16:17], v[10:11]
958 ; GFX6-NEXT: v_fma_f64 v[20:21], -v[12:13], v[18:19], 1.0
959 ; GFX6-NEXT: v_fma_f64 v[22:23], -v[8:9], v[14:15], v[16:17]
960 ; GFX6-NEXT: v_fma_f64 v[18:19], v[18:19], v[20:21], v[18:19]
961 ; GFX6-NEXT: v_div_scale_f64 v[20:21], s[4:5], v[2:3], v[6:7], v[2:3]
962 ; GFX6-NEXT: v_fma_f64 v[16:17], -v[12:13], v[18:19], 1.0
963 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v5, v9
964 ; GFX6-NEXT: v_fma_f64 v[8:9], v[18:19], v[16:17], v[18:19]
965 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
966 ; GFX6-NEXT: v_mul_f64 v[16:17], v[20:21], v[8:9]
967 ; GFX6-NEXT: v_div_fmas_f64 v[10:11], v[22:23], v[10:11], v[14:15]
968 ; GFX6-NEXT: v_fma_f64 v[14:15], -v[12:13], v[16:17], v[20:21]
969 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v3, v21
970 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v7, v13
971 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
972 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[10:11], v[4:5], v[0:1]
974 ; GFX6-NEXT: v_div_fmas_f64 v[8:9], v[14:15], v[8:9], v[16:17]
975 ; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[8:9], v[6:7], v[2:3]
976 ; GFX6-NEXT: s_setpc_b64 s[30:31]
978 ; GFX8-LABEL: v_fdiv_v2f64_ulp25:
980 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
981 ; GFX8-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1]
982 ; GFX8-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3]
983 ; GFX8-NEXT: v_div_scale_f64 v[20:21], s[4:5], v[2:3], v[6:7], v[2:3]
984 ; GFX8-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
985 ; GFX8-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
986 ; GFX8-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
987 ; GFX8-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
988 ; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
989 ; GFX8-NEXT: v_div_scale_f64 v[16:17], vcc, v[0:1], v[4:5], v[0:1]
990 ; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
991 ; GFX8-NEXT: v_fma_f64 v[18:19], -v[8:9], v[12:13], 1.0
992 ; GFX8-NEXT: v_fma_f64 v[22:23], -v[10:11], v[14:15], 1.0
993 ; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]
994 ; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[22:23], v[14:15]
995 ; GFX8-NEXT: v_mul_f64 v[18:19], v[16:17], v[12:13]
996 ; GFX8-NEXT: v_mul_f64 v[22:23], v[20:21], v[14:15]
997 ; GFX8-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[16:17]
998 ; GFX8-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[20:21]
999 ; GFX8-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
1000 ; GFX8-NEXT: s_mov_b64 vcc, s[4:5]
1001 ; GFX8-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
1002 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
1003 ; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
1004 ; GFX8-NEXT: s_setpc_b64 s[30:31]
1006 ; GFX9-LABEL: v_fdiv_v2f64_ulp25:
1008 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1009 ; GFX9-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1]
1010 ; GFX9-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3]
1011 ; GFX9-NEXT: v_div_scale_f64 v[20:21], s[4:5], v[2:3], v[6:7], v[2:3]
1012 ; GFX9-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
1013 ; GFX9-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
1014 ; GFX9-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1015 ; GFX9-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1016 ; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1017 ; GFX9-NEXT: v_div_scale_f64 v[16:17], vcc, v[0:1], v[4:5], v[0:1]
1018 ; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1019 ; GFX9-NEXT: v_fma_f64 v[18:19], -v[8:9], v[12:13], 1.0
1020 ; GFX9-NEXT: v_fma_f64 v[22:23], -v[10:11], v[14:15], 1.0
1021 ; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]
1022 ; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[22:23], v[14:15]
1023 ; GFX9-NEXT: v_mul_f64 v[18:19], v[16:17], v[12:13]
1024 ; GFX9-NEXT: v_mul_f64 v[22:23], v[20:21], v[14:15]
1025 ; GFX9-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[16:17]
1026 ; GFX9-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[20:21]
1027 ; GFX9-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
1028 ; GFX9-NEXT: s_mov_b64 vcc, s[4:5]
1029 ; GFX9-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
1030 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
1031 ; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
1032 ; GFX9-NEXT: s_setpc_b64 s[30:31]
1034 ; GFX10-LABEL: v_fdiv_v2f64_ulp25:
1036 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1037 ; GFX10-NEXT: v_div_scale_f64 v[8:9], s4, v[4:5], v[4:5], v[0:1]
1038 ; GFX10-NEXT: v_div_scale_f64 v[10:11], s4, v[6:7], v[6:7], v[2:3]
1039 ; GFX10-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1]
1040 ; GFX10-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
1041 ; GFX10-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
1042 ; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1043 ; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1044 ; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1045 ; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1046 ; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1047 ; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1048 ; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1049 ; GFX10-NEXT: v_div_scale_f64 v[16:17], s4, v[2:3], v[6:7], v[2:3]
1050 ; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1051 ; GFX10-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13]
1052 ; GFX10-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15]
1053 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21]
1054 ; GFX10-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17]
1055 ; GFX10-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
1056 ; GFX10-NEXT: s_mov_b32 vcc_lo, s4
1057 ; GFX10-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
1058 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
1059 ; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
1060 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1062 ; GFX11-LABEL: v_fdiv_v2f64_ulp25:
1064 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1065 ; GFX11-NEXT: v_div_scale_f64 v[8:9], null, v[4:5], v[4:5], v[0:1]
1066 ; GFX11-NEXT: v_div_scale_f64 v[10:11], null, v[6:7], v[6:7], v[2:3]
1067 ; GFX11-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1]
1068 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1069 ; GFX11-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
1070 ; GFX11-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
1071 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1072 ; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1073 ; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1074 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1075 ; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1076 ; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1077 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1078 ; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1079 ; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1080 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
1081 ; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1082 ; GFX11-NEXT: v_div_scale_f64 v[16:17], s0, v[2:3], v[6:7], v[2:3]
1083 ; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1084 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1085 ; GFX11-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13]
1086 ; GFX11-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15]
1087 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1088 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21]
1089 ; GFX11-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17]
1090 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1091 ; GFX11-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
1092 ; GFX11-NEXT: s_mov_b32 vcc_lo, s0
1093 ; GFX11-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
1094 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1095 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
1096 ; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
1097 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1098 %fdiv = fdiv <2 x double> %a, %b, !fpmath !0
1099 ret <2 x double> %fdiv
1102 define <2 x double> @v_rcp_v2f64(<2 x double> %x) {
1103 ; GFX6-LABEL: v_rcp_v2f64:
1105 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1106 ; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0
1107 ; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], 1.0
1108 ; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
1109 ; GFX6-NEXT: v_mov_b32_e32 v20, 0x3ff00000
1110 ; GFX6-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
1111 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
1112 ; GFX6-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0
1113 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
1114 ; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
1115 ; GFX6-NEXT: v_fma_f64 v[12:13], -v[4:5], v[6:7], 1.0
1116 ; GFX6-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15]
1117 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
1118 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v20, v9
1119 ; GFX6-NEXT: v_mul_f64 v[12:13], v[8:9], v[6:7]
1120 ; GFX6-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1121 ; GFX6-NEXT: v_fma_f64 v[18:19], -v[4:5], v[12:13], v[8:9]
1122 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[10:11], v[14:15], 1.0
1123 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v5
1124 ; GFX6-NEXT: v_fma_f64 v[4:5], v[14:15], v[8:9], v[14:15]
1125 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1126 ; GFX6-NEXT: v_mul_f64 v[8:9], v[16:17], v[4:5]
1127 ; GFX6-NEXT: v_div_fmas_f64 v[6:7], v[18:19], v[6:7], v[12:13]
1128 ; GFX6-NEXT: v_fma_f64 v[12:13], -v[10:11], v[8:9], v[16:17]
1129 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v20, v17
1130 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v11
1131 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1132 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[6:7], v[0:1], 1.0
1133 ; GFX6-NEXT: s_nop 0
1134 ; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[12:13], v[4:5], v[8:9]
1135 ; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[4:5], v[2:3], 1.0
1136 ; GFX6-NEXT: s_setpc_b64 s[30:31]
1138 ; GFX8-LABEL: v_rcp_v2f64:
1140 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1141 ; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0
1142 ; GFX8-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0
1143 ; GFX8-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1144 ; GFX8-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1145 ; GFX8-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1146 ; GFX8-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1147 ; GFX8-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1148 ; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1149 ; GFX8-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0
1150 ; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1151 ; GFX8-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
1152 ; GFX8-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
1153 ; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
1154 ; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
1155 ; GFX8-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9]
1156 ; GFX8-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11]
1157 ; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
1158 ; GFX8-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
1159 ; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1160 ; GFX8-NEXT: s_mov_b64 vcc, s[4:5]
1161 ; GFX8-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1162 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1163 ; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1164 ; GFX8-NEXT: s_setpc_b64 s[30:31]
1166 ; GFX9-LABEL: v_rcp_v2f64:
1168 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1169 ; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0
1170 ; GFX9-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0
1171 ; GFX9-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1172 ; GFX9-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1173 ; GFX9-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1174 ; GFX9-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1175 ; GFX9-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1176 ; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1177 ; GFX9-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0
1178 ; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1179 ; GFX9-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
1180 ; GFX9-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
1181 ; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
1182 ; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
1183 ; GFX9-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9]
1184 ; GFX9-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11]
1185 ; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
1186 ; GFX9-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
1187 ; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1188 ; GFX9-NEXT: s_mov_b64 vcc, s[4:5]
1189 ; GFX9-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1190 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1191 ; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1192 ; GFX9-NEXT: s_setpc_b64 s[30:31]
1194 ; GFX10-LABEL: v_rcp_v2f64:
1196 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1197 ; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[0:1], v[0:1], 1.0
1198 ; GFX10-NEXT: v_div_scale_f64 v[6:7], s4, v[2:3], v[2:3], 1.0
1199 ; GFX10-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0
1200 ; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1201 ; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1202 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1203 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1204 ; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1205 ; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1206 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1207 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1208 ; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1209 ; GFX10-NEXT: v_div_scale_f64 v[12:13], s4, 1.0, v[2:3], 1.0
1210 ; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1211 ; GFX10-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9]
1212 ; GFX10-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11]
1213 ; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17]
1214 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13]
1215 ; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1216 ; GFX10-NEXT: s_mov_b32 vcc_lo, s4
1217 ; GFX10-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1218 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1219 ; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1220 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1222 ; GFX11-LABEL: v_rcp_v2f64:
1224 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1225 ; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[0:1], v[0:1], 1.0
1226 ; GFX11-NEXT: v_div_scale_f64 v[6:7], null, v[2:3], v[2:3], 1.0
1227 ; GFX11-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0
1228 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1229 ; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1230 ; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1231 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1232 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1233 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1234 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1235 ; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1236 ; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1237 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1238 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1239 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1240 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
1241 ; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1242 ; GFX11-NEXT: v_div_scale_f64 v[12:13], s0, 1.0, v[2:3], 1.0
1243 ; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1244 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1245 ; GFX11-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9]
1246 ; GFX11-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11]
1247 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1248 ; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17]
1249 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13]
1250 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1251 ; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1252 ; GFX11-NEXT: s_mov_b32 vcc_lo, s0
1253 ; GFX11-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1254 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1255 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1256 ; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1257 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1258 %fdiv = fdiv <2 x double> <double 1.0, double 1.0>, %x
1259 ret <2 x double> %fdiv
1262 define <2 x double> @v_rcp_v2f64_arcp(<2 x double> %x) {
1263 ; GFX6-LABEL: v_rcp_v2f64_arcp:
1265 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1266 ; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0
1267 ; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], 1.0
1268 ; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
1269 ; GFX6-NEXT: v_mov_b32_e32 v20, 0x3ff00000
1270 ; GFX6-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
1271 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
1272 ; GFX6-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0
1273 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
1274 ; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
1275 ; GFX6-NEXT: v_fma_f64 v[12:13], -v[4:5], v[6:7], 1.0
1276 ; GFX6-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15]
1277 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
1278 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v20, v9
1279 ; GFX6-NEXT: v_mul_f64 v[12:13], v[8:9], v[6:7]
1280 ; GFX6-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1281 ; GFX6-NEXT: v_fma_f64 v[18:19], -v[4:5], v[12:13], v[8:9]
1282 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[10:11], v[14:15], 1.0
1283 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v5
1284 ; GFX6-NEXT: v_fma_f64 v[4:5], v[14:15], v[8:9], v[14:15]
1285 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1286 ; GFX6-NEXT: v_mul_f64 v[8:9], v[16:17], v[4:5]
1287 ; GFX6-NEXT: v_div_fmas_f64 v[6:7], v[18:19], v[6:7], v[12:13]
1288 ; GFX6-NEXT: v_fma_f64 v[12:13], -v[10:11], v[8:9], v[16:17]
1289 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v20, v17
1290 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v11
1291 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1292 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[6:7], v[0:1], 1.0
1293 ; GFX6-NEXT: s_nop 0
1294 ; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[12:13], v[4:5], v[8:9]
1295 ; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[4:5], v[2:3], 1.0
1296 ; GFX6-NEXT: s_setpc_b64 s[30:31]
1298 ; GFX8-LABEL: v_rcp_v2f64_arcp:
1300 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1301 ; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0
1302 ; GFX8-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0
1303 ; GFX8-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1304 ; GFX8-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1305 ; GFX8-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1306 ; GFX8-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1307 ; GFX8-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1308 ; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1309 ; GFX8-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0
1310 ; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1311 ; GFX8-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
1312 ; GFX8-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
1313 ; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
1314 ; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
1315 ; GFX8-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9]
1316 ; GFX8-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11]
1317 ; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
1318 ; GFX8-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
1319 ; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1320 ; GFX8-NEXT: s_mov_b64 vcc, s[4:5]
1321 ; GFX8-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1322 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1323 ; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1324 ; GFX8-NEXT: s_setpc_b64 s[30:31]
1326 ; GFX9-LABEL: v_rcp_v2f64_arcp:
1328 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1329 ; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0
1330 ; GFX9-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0
1331 ; GFX9-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1332 ; GFX9-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1333 ; GFX9-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1334 ; GFX9-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1335 ; GFX9-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1336 ; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1337 ; GFX9-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0
1338 ; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1339 ; GFX9-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
1340 ; GFX9-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
1341 ; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
1342 ; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
1343 ; GFX9-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9]
1344 ; GFX9-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11]
1345 ; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
1346 ; GFX9-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
1347 ; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1348 ; GFX9-NEXT: s_mov_b64 vcc, s[4:5]
1349 ; GFX9-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1350 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1351 ; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1352 ; GFX9-NEXT: s_setpc_b64 s[30:31]
1354 ; GFX10-LABEL: v_rcp_v2f64_arcp:
1356 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1357 ; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[0:1], v[0:1], 1.0
1358 ; GFX10-NEXT: v_div_scale_f64 v[6:7], s4, v[2:3], v[2:3], 1.0
1359 ; GFX10-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0
1360 ; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1361 ; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1362 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1363 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1364 ; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1365 ; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1366 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1367 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1368 ; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1369 ; GFX10-NEXT: v_div_scale_f64 v[12:13], s4, 1.0, v[2:3], 1.0
1370 ; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1371 ; GFX10-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9]
1372 ; GFX10-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11]
1373 ; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17]
1374 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13]
1375 ; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1376 ; GFX10-NEXT: s_mov_b32 vcc_lo, s4
1377 ; GFX10-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1378 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1379 ; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1380 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1382 ; GFX11-LABEL: v_rcp_v2f64_arcp:
1384 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1385 ; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[0:1], v[0:1], 1.0
1386 ; GFX11-NEXT: v_div_scale_f64 v[6:7], null, v[2:3], v[2:3], 1.0
1387 ; GFX11-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0
1388 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1389 ; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1390 ; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1391 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1392 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1393 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1394 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1395 ; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1396 ; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1397 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1398 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1399 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1400 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
1401 ; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1402 ; GFX11-NEXT: v_div_scale_f64 v[12:13], s0, 1.0, v[2:3], 1.0
1403 ; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1404 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1405 ; GFX11-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9]
1406 ; GFX11-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11]
1407 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1408 ; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17]
1409 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13]
1410 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1411 ; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1412 ; GFX11-NEXT: s_mov_b32 vcc_lo, s0
1413 ; GFX11-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1414 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1415 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1416 ; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1417 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1418 %fdiv = fdiv arcp <2 x double> <double 1.0, double 1.0>, %x
1419 ret <2 x double> %fdiv
1422 define <2 x double> @v_rcp_v2f64_arcp_afn(<2 x double> %x) {
1423 ; GCN-LABEL: v_rcp_v2f64_arcp_afn:
1425 ; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1426 ; GCN-NEXT: v_rcp_f64_e32 v[4:5], v[0:1]
1427 ; GCN-NEXT: v_rcp_f64_e32 v[6:7], v[2:3]
1428 ; GCN-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
1429 ; GCN-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
1430 ; GCN-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
1431 ; GCN-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
1432 ; GCN-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
1433 ; GCN-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
1434 ; GCN-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
1435 ; GCN-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
1436 ; GCN-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
1437 ; GCN-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
1438 ; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
1439 ; GCN-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
1440 ; GCN-NEXT: s_setpc_b64 s[30:31]
1442 ; GFX10-LABEL: v_rcp_v2f64_arcp_afn:
1444 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1445 ; GFX10-NEXT: v_rcp_f64_e32 v[4:5], v[0:1]
1446 ; GFX10-NEXT: v_rcp_f64_e32 v[6:7], v[2:3]
1447 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
1448 ; GFX10-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
1449 ; GFX10-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
1450 ; GFX10-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
1451 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
1452 ; GFX10-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
1453 ; GFX10-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
1454 ; GFX10-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
1455 ; GFX10-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
1456 ; GFX10-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
1457 ; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
1458 ; GFX10-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
1459 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1461 ; GFX11-LABEL: v_rcp_v2f64_arcp_afn:
1463 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1464 ; GFX11-NEXT: v_rcp_f64_e32 v[4:5], v[0:1]
1465 ; GFX11-NEXT: v_rcp_f64_e32 v[6:7], v[2:3]
1466 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1467 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
1468 ; GFX11-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
1469 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1470 ; GFX11-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
1471 ; GFX11-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
1472 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1473 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[0:1], v[4:5], 1.0
1474 ; GFX11-NEXT: v_fma_f64 v[10:11], -v[2:3], v[6:7], 1.0
1475 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1476 ; GFX11-NEXT: v_fma_f64 v[4:5], v[8:9], v[4:5], v[4:5]
1477 ; GFX11-NEXT: v_fma_f64 v[6:7], v[10:11], v[6:7], v[6:7]
1478 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1479 ; GFX11-NEXT: v_fma_f64 v[0:1], -v[0:1], v[4:5], 1.0
1480 ; GFX11-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], 1.0
1481 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1482 ; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[4:5], v[4:5]
1483 ; GFX11-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[6:7]
1484 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1485 %fdiv = fdiv arcp afn <2 x double> <double 1.0, double 1.0>, %x
1486 ret <2 x double> %fdiv
1489 define <2 x double> @v_rcp_v2f64_ulp25(<2 x double> %x) {
1490 ; GFX6-LABEL: v_rcp_v2f64_ulp25:
1492 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1493 ; GFX6-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0
1494 ; GFX6-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[2:3], v[2:3], 1.0
1495 ; GFX6-NEXT: v_rcp_f64_e32 v[6:7], v[4:5]
1496 ; GFX6-NEXT: v_mov_b32_e32 v20, 0x3ff00000
1497 ; GFX6-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
1498 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[4:5], v[6:7], 1.0
1499 ; GFX6-NEXT: v_fma_f64 v[16:17], -v[10:11], v[14:15], 1.0
1500 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[8:9], v[6:7]
1501 ; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], 1.0, v[0:1], 1.0
1502 ; GFX6-NEXT: v_fma_f64 v[12:13], -v[4:5], v[6:7], 1.0
1503 ; GFX6-NEXT: v_fma_f64 v[14:15], v[14:15], v[16:17], v[14:15]
1504 ; GFX6-NEXT: v_fma_f64 v[6:7], v[6:7], v[12:13], v[6:7]
1505 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v20, v9
1506 ; GFX6-NEXT: v_mul_f64 v[12:13], v[8:9], v[6:7]
1507 ; GFX6-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1508 ; GFX6-NEXT: v_fma_f64 v[18:19], -v[4:5], v[12:13], v[8:9]
1509 ; GFX6-NEXT: v_fma_f64 v[8:9], -v[10:11], v[14:15], 1.0
1510 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v1, v5
1511 ; GFX6-NEXT: v_fma_f64 v[4:5], v[14:15], v[8:9], v[14:15]
1512 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1513 ; GFX6-NEXT: v_mul_f64 v[8:9], v[16:17], v[4:5]
1514 ; GFX6-NEXT: v_div_fmas_f64 v[6:7], v[18:19], v[6:7], v[12:13]
1515 ; GFX6-NEXT: v_fma_f64 v[12:13], -v[10:11], v[8:9], v[16:17]
1516 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v20, v17
1517 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v3, v11
1518 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1519 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[6:7], v[0:1], 1.0
1520 ; GFX6-NEXT: s_nop 0
1521 ; GFX6-NEXT: v_div_fmas_f64 v[4:5], v[12:13], v[4:5], v[8:9]
1522 ; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[4:5], v[2:3], 1.0
1523 ; GFX6-NEXT: s_setpc_b64 s[30:31]
1525 ; GFX8-LABEL: v_rcp_v2f64_ulp25:
1527 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1528 ; GFX8-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0
1529 ; GFX8-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0
1530 ; GFX8-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1531 ; GFX8-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1532 ; GFX8-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1533 ; GFX8-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1534 ; GFX8-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1535 ; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1536 ; GFX8-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0
1537 ; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1538 ; GFX8-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
1539 ; GFX8-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
1540 ; GFX8-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
1541 ; GFX8-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
1542 ; GFX8-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9]
1543 ; GFX8-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11]
1544 ; GFX8-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
1545 ; GFX8-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
1546 ; GFX8-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1547 ; GFX8-NEXT: s_mov_b64 vcc, s[4:5]
1548 ; GFX8-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1549 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1550 ; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1551 ; GFX8-NEXT: s_setpc_b64 s[30:31]
1553 ; GFX9-LABEL: v_rcp_v2f64_ulp25:
1555 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1556 ; GFX9-NEXT: v_div_scale_f64 v[4:5], s[4:5], v[0:1], v[0:1], 1.0
1557 ; GFX9-NEXT: v_div_scale_f64 v[6:7], s[4:5], v[2:3], v[2:3], 1.0
1558 ; GFX9-NEXT: v_div_scale_f64 v[16:17], s[4:5], 1.0, v[2:3], 1.0
1559 ; GFX9-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1560 ; GFX9-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1561 ; GFX9-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1562 ; GFX9-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1563 ; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1564 ; GFX9-NEXT: v_div_scale_f64 v[12:13], vcc, 1.0, v[0:1], 1.0
1565 ; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1566 ; GFX9-NEXT: v_fma_f64 v[14:15], -v[4:5], v[8:9], 1.0
1567 ; GFX9-NEXT: v_fma_f64 v[18:19], -v[6:7], v[10:11], 1.0
1568 ; GFX9-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[8:9]
1569 ; GFX9-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]
1570 ; GFX9-NEXT: v_mul_f64 v[14:15], v[12:13], v[8:9]
1571 ; GFX9-NEXT: v_mul_f64 v[18:19], v[16:17], v[10:11]
1572 ; GFX9-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[12:13]
1573 ; GFX9-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[16:17]
1574 ; GFX9-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1575 ; GFX9-NEXT: s_mov_b64 vcc, s[4:5]
1576 ; GFX9-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1577 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1578 ; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1579 ; GFX9-NEXT: s_setpc_b64 s[30:31]
1581 ; GFX10-LABEL: v_rcp_v2f64_ulp25:
1583 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1584 ; GFX10-NEXT: v_div_scale_f64 v[4:5], s4, v[0:1], v[0:1], 1.0
1585 ; GFX10-NEXT: v_div_scale_f64 v[6:7], s4, v[2:3], v[2:3], 1.0
1586 ; GFX10-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0
1587 ; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1588 ; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1589 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1590 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1591 ; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1592 ; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1593 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1594 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1595 ; GFX10-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1596 ; GFX10-NEXT: v_div_scale_f64 v[12:13], s4, 1.0, v[2:3], 1.0
1597 ; GFX10-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1598 ; GFX10-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9]
1599 ; GFX10-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11]
1600 ; GFX10-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17]
1601 ; GFX10-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13]
1602 ; GFX10-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1603 ; GFX10-NEXT: s_mov_b32 vcc_lo, s4
1604 ; GFX10-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1605 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1606 ; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1607 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1609 ; GFX11-LABEL: v_rcp_v2f64_ulp25:
1611 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1612 ; GFX11-NEXT: v_div_scale_f64 v[4:5], null, v[0:1], v[0:1], 1.0
1613 ; GFX11-NEXT: v_div_scale_f64 v[6:7], null, v[2:3], v[2:3], 1.0
1614 ; GFX11-NEXT: v_div_scale_f64 v[16:17], vcc_lo, 1.0, v[0:1], 1.0
1615 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1616 ; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1617 ; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1618 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1619 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1620 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1621 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1622 ; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1623 ; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1624 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1625 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1626 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1627 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
1628 ; GFX11-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]
1629 ; GFX11-NEXT: v_div_scale_f64 v[12:13], s0, 1.0, v[2:3], 1.0
1630 ; GFX11-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1631 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1632 ; GFX11-NEXT: v_mul_f64 v[14:15], v[16:17], v[8:9]
1633 ; GFX11-NEXT: v_mul_f64 v[18:19], v[12:13], v[10:11]
1634 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1635 ; GFX11-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17]
1636 ; GFX11-NEXT: v_fma_f64 v[6:7], -v[6:7], v[18:19], v[12:13]
1637 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1638 ; GFX11-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[8:9], v[14:15]
1639 ; GFX11-NEXT: s_mov_b32 vcc_lo, s0
1640 ; GFX11-NEXT: v_div_fmas_f64 v[6:7], v[6:7], v[10:11], v[18:19]
1641 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1642 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[4:5], v[0:1], 1.0
1643 ; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[6:7], v[2:3], 1.0
1644 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1645 %fdiv = fdiv <2 x double> <double 1.0, double 1.0>, %x, !fpmath !0
1646 ret <2 x double> %fdiv
1649 define <2 x double> @v_fdiv_v2f64_afn_ulp25(<2 x double> %a, <2 x double> %b) {
1650 ; GCN-LABEL: v_fdiv_v2f64_afn_ulp25:
1652 ; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1653 ; GCN-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1654 ; GCN-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1655 ; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1656 ; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1657 ; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1658 ; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1659 ; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1660 ; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1661 ; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1662 ; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1663 ; GCN-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9]
1664 ; GCN-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11]
1665 ; GCN-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1]
1666 ; GCN-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3]
1667 ; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13]
1668 ; GCN-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15]
1669 ; GCN-NEXT: s_setpc_b64 s[30:31]
1671 ; GFX10-LABEL: v_fdiv_v2f64_afn_ulp25:
1673 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1674 ; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1675 ; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1676 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1677 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1678 ; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1679 ; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1680 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1681 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1682 ; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1683 ; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1684 ; GFX10-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9]
1685 ; GFX10-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11]
1686 ; GFX10-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1]
1687 ; GFX10-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3]
1688 ; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13]
1689 ; GFX10-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15]
1690 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1692 ; GFX11-LABEL: v_fdiv_v2f64_afn_ulp25:
1694 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1695 ; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1696 ; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1697 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1698 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1699 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1700 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1701 ; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1702 ; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1703 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1704 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1705 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1706 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1707 ; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1708 ; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1709 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1710 ; GFX11-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9]
1711 ; GFX11-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11]
1712 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1713 ; GFX11-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1]
1714 ; GFX11-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3]
1715 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1716 ; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13]
1717 ; GFX11-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15]
1718 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1719 %fdiv = fdiv afn <2 x double> %a, %b, !fpmath !0
1720 ret <2 x double> %fdiv
1723 define <2 x double> @v_fdiv_v2f64_arcp_ulp25(<2 x double> %a, <2 x double> %b) {
1724 ; GFX6-LABEL: v_fdiv_v2f64_arcp_ulp25:
1726 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1727 ; GFX6-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1]
1728 ; GFX6-NEXT: v_div_scale_f64 v[16:17], s[4:5], v[0:1], v[4:5], v[0:1]
1729 ; GFX6-NEXT: v_rcp_f64_e32 v[10:11], v[8:9]
1730 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v1, v17
1731 ; GFX6-NEXT: v_fma_f64 v[12:13], -v[8:9], v[10:11], 1.0
1732 ; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]
1733 ; GFX6-NEXT: v_div_scale_f64 v[12:13], s[4:5], v[6:7], v[6:7], v[2:3]
1734 ; GFX6-NEXT: v_fma_f64 v[14:15], -v[8:9], v[10:11], 1.0
1735 ; GFX6-NEXT: v_rcp_f64_e32 v[18:19], v[12:13]
1736 ; GFX6-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]
1737 ; GFX6-NEXT: v_mul_f64 v[14:15], v[16:17], v[10:11]
1738 ; GFX6-NEXT: v_fma_f64 v[20:21], -v[12:13], v[18:19], 1.0
1739 ; GFX6-NEXT: v_fma_f64 v[22:23], -v[8:9], v[14:15], v[16:17]
1740 ; GFX6-NEXT: v_fma_f64 v[18:19], v[18:19], v[20:21], v[18:19]
1741 ; GFX6-NEXT: v_div_scale_f64 v[20:21], s[4:5], v[2:3], v[6:7], v[2:3]
1742 ; GFX6-NEXT: v_fma_f64 v[16:17], -v[12:13], v[18:19], 1.0
1743 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v5, v9
1744 ; GFX6-NEXT: v_fma_f64 v[8:9], v[18:19], v[16:17], v[18:19]
1745 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1746 ; GFX6-NEXT: v_mul_f64 v[16:17], v[20:21], v[8:9]
1747 ; GFX6-NEXT: v_div_fmas_f64 v[10:11], v[22:23], v[10:11], v[14:15]
1748 ; GFX6-NEXT: v_fma_f64 v[14:15], -v[12:13], v[16:17], v[20:21]
1749 ; GFX6-NEXT: v_cmp_eq_u32_e32 vcc, v3, v21
1750 ; GFX6-NEXT: v_cmp_eq_u32_e64 s[4:5], v7, v13
1751 ; GFX6-NEXT: s_xor_b64 vcc, vcc, s[4:5]
1752 ; GFX6-NEXT: v_div_fixup_f64 v[0:1], v[10:11], v[4:5], v[0:1]
1753 ; GFX6-NEXT: s_nop 0
1754 ; GFX6-NEXT: v_div_fmas_f64 v[8:9], v[14:15], v[8:9], v[16:17]
1755 ; GFX6-NEXT: v_div_fixup_f64 v[2:3], v[8:9], v[6:7], v[2:3]
1756 ; GFX6-NEXT: s_setpc_b64 s[30:31]
1758 ; GFX8-LABEL: v_fdiv_v2f64_arcp_ulp25:
1760 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1761 ; GFX8-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1]
1762 ; GFX8-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3]
1763 ; GFX8-NEXT: v_div_scale_f64 v[20:21], s[4:5], v[2:3], v[6:7], v[2:3]
1764 ; GFX8-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
1765 ; GFX8-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
1766 ; GFX8-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1767 ; GFX8-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1768 ; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1769 ; GFX8-NEXT: v_div_scale_f64 v[16:17], vcc, v[0:1], v[4:5], v[0:1]
1770 ; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1771 ; GFX8-NEXT: v_fma_f64 v[18:19], -v[8:9], v[12:13], 1.0
1772 ; GFX8-NEXT: v_fma_f64 v[22:23], -v[10:11], v[14:15], 1.0
1773 ; GFX8-NEXT: v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]
1774 ; GFX8-NEXT: v_fma_f64 v[14:15], v[14:15], v[22:23], v[14:15]
1775 ; GFX8-NEXT: v_mul_f64 v[18:19], v[16:17], v[12:13]
1776 ; GFX8-NEXT: v_mul_f64 v[22:23], v[20:21], v[14:15]
1777 ; GFX8-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[16:17]
1778 ; GFX8-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[20:21]
1779 ; GFX8-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
1780 ; GFX8-NEXT: s_mov_b64 vcc, s[4:5]
1781 ; GFX8-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
1782 ; GFX8-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
1783 ; GFX8-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
1784 ; GFX8-NEXT: s_setpc_b64 s[30:31]
1786 ; GFX9-LABEL: v_fdiv_v2f64_arcp_ulp25:
1788 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1789 ; GFX9-NEXT: v_div_scale_f64 v[8:9], s[4:5], v[4:5], v[4:5], v[0:1]
1790 ; GFX9-NEXT: v_div_scale_f64 v[10:11], s[4:5], v[6:7], v[6:7], v[2:3]
1791 ; GFX9-NEXT: v_div_scale_f64 v[20:21], s[4:5], v[2:3], v[6:7], v[2:3]
1792 ; GFX9-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
1793 ; GFX9-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
1794 ; GFX9-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1795 ; GFX9-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1796 ; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1797 ; GFX9-NEXT: v_div_scale_f64 v[16:17], vcc, v[0:1], v[4:5], v[0:1]
1798 ; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1799 ; GFX9-NEXT: v_fma_f64 v[18:19], -v[8:9], v[12:13], 1.0
1800 ; GFX9-NEXT: v_fma_f64 v[22:23], -v[10:11], v[14:15], 1.0
1801 ; GFX9-NEXT: v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]
1802 ; GFX9-NEXT: v_fma_f64 v[14:15], v[14:15], v[22:23], v[14:15]
1803 ; GFX9-NEXT: v_mul_f64 v[18:19], v[16:17], v[12:13]
1804 ; GFX9-NEXT: v_mul_f64 v[22:23], v[20:21], v[14:15]
1805 ; GFX9-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[16:17]
1806 ; GFX9-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[20:21]
1807 ; GFX9-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
1808 ; GFX9-NEXT: s_mov_b64 vcc, s[4:5]
1809 ; GFX9-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
1810 ; GFX9-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
1811 ; GFX9-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
1812 ; GFX9-NEXT: s_setpc_b64 s[30:31]
1814 ; GFX10-LABEL: v_fdiv_v2f64_arcp_ulp25:
1816 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1817 ; GFX10-NEXT: v_div_scale_f64 v[8:9], s4, v[4:5], v[4:5], v[0:1]
1818 ; GFX10-NEXT: v_div_scale_f64 v[10:11], s4, v[6:7], v[6:7], v[2:3]
1819 ; GFX10-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1]
1820 ; GFX10-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
1821 ; GFX10-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
1822 ; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1823 ; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1824 ; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1825 ; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1826 ; GFX10-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1827 ; GFX10-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1828 ; GFX10-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1829 ; GFX10-NEXT: v_div_scale_f64 v[16:17], s4, v[2:3], v[6:7], v[2:3]
1830 ; GFX10-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1831 ; GFX10-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13]
1832 ; GFX10-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15]
1833 ; GFX10-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21]
1834 ; GFX10-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17]
1835 ; GFX10-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
1836 ; GFX10-NEXT: s_mov_b32 vcc_lo, s4
1837 ; GFX10-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
1838 ; GFX10-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
1839 ; GFX10-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
1840 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1842 ; GFX11-LABEL: v_fdiv_v2f64_arcp_ulp25:
1844 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1845 ; GFX11-NEXT: v_div_scale_f64 v[8:9], null, v[4:5], v[4:5], v[0:1]
1846 ; GFX11-NEXT: v_div_scale_f64 v[10:11], null, v[6:7], v[6:7], v[2:3]
1847 ; GFX11-NEXT: v_div_scale_f64 v[20:21], vcc_lo, v[0:1], v[4:5], v[0:1]
1848 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1849 ; GFX11-NEXT: v_rcp_f64_e32 v[12:13], v[8:9]
1850 ; GFX11-NEXT: v_rcp_f64_e32 v[14:15], v[10:11]
1851 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1852 ; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1853 ; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1854 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1855 ; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1856 ; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1857 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1858 ; GFX11-NEXT: v_fma_f64 v[16:17], -v[8:9], v[12:13], 1.0
1859 ; GFX11-NEXT: v_fma_f64 v[18:19], -v[10:11], v[14:15], 1.0
1860 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
1861 ; GFX11-NEXT: v_fma_f64 v[12:13], v[12:13], v[16:17], v[12:13]
1862 ; GFX11-NEXT: v_div_scale_f64 v[16:17], s0, v[2:3], v[6:7], v[2:3]
1863 ; GFX11-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]
1864 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1865 ; GFX11-NEXT: v_mul_f64 v[18:19], v[20:21], v[12:13]
1866 ; GFX11-NEXT: v_mul_f64 v[22:23], v[16:17], v[14:15]
1867 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1868 ; GFX11-NEXT: v_fma_f64 v[8:9], -v[8:9], v[18:19], v[20:21]
1869 ; GFX11-NEXT: v_fma_f64 v[10:11], -v[10:11], v[22:23], v[16:17]
1870 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1871 ; GFX11-NEXT: v_div_fmas_f64 v[8:9], v[8:9], v[12:13], v[18:19]
1872 ; GFX11-NEXT: s_mov_b32 vcc_lo, s0
1873 ; GFX11-NEXT: v_div_fmas_f64 v[10:11], v[10:11], v[14:15], v[22:23]
1874 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1875 ; GFX11-NEXT: v_div_fixup_f64 v[0:1], v[8:9], v[4:5], v[0:1]
1876 ; GFX11-NEXT: v_div_fixup_f64 v[2:3], v[10:11], v[6:7], v[2:3]
1877 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1878 %fdiv = fdiv arcp <2 x double> %a, %b, !fpmath !0
1879 ret <2 x double> %fdiv
1882 define <2 x double> @v_fdiv_v2f64_arcp_afn_ulp25(<2 x double> %a, <2 x double> %b) {
1883 ; GCN-LABEL: v_fdiv_v2f64_arcp_afn_ulp25:
1885 ; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1886 ; GCN-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1887 ; GCN-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1888 ; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1889 ; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1890 ; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1891 ; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1892 ; GCN-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1893 ; GCN-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1894 ; GCN-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1895 ; GCN-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1896 ; GCN-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9]
1897 ; GCN-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11]
1898 ; GCN-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1]
1899 ; GCN-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3]
1900 ; GCN-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13]
1901 ; GCN-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15]
1902 ; GCN-NEXT: s_setpc_b64 s[30:31]
1904 ; GFX10-LABEL: v_fdiv_v2f64_arcp_afn_ulp25:
1906 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1907 ; GFX10-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1908 ; GFX10-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1909 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1910 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1911 ; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1912 ; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1913 ; GFX10-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1914 ; GFX10-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1915 ; GFX10-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1916 ; GFX10-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1917 ; GFX10-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9]
1918 ; GFX10-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11]
1919 ; GFX10-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1]
1920 ; GFX10-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3]
1921 ; GFX10-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13]
1922 ; GFX10-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15]
1923 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1925 ; GFX11-LABEL: v_fdiv_v2f64_arcp_afn_ulp25:
1927 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1928 ; GFX11-NEXT: v_rcp_f64_e32 v[8:9], v[4:5]
1929 ; GFX11-NEXT: v_rcp_f64_e32 v[10:11], v[6:7]
1930 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1931 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1932 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1933 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1934 ; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1935 ; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1936 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1937 ; GFX11-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 1.0
1938 ; GFX11-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 1.0
1939 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1940 ; GFX11-NEXT: v_fma_f64 v[8:9], v[12:13], v[8:9], v[8:9]
1941 ; GFX11-NEXT: v_fma_f64 v[10:11], v[14:15], v[10:11], v[10:11]
1942 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1943 ; GFX11-NEXT: v_mul_f64 v[12:13], v[0:1], v[8:9]
1944 ; GFX11-NEXT: v_mul_f64 v[14:15], v[2:3], v[10:11]
1945 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1946 ; GFX11-NEXT: v_fma_f64 v[0:1], -v[4:5], v[12:13], v[0:1]
1947 ; GFX11-NEXT: v_fma_f64 v[2:3], -v[6:7], v[14:15], v[2:3]
1948 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1949 ; GFX11-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], v[12:13]
1950 ; GFX11-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], v[14:15]
1951 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1952 %fdiv = fdiv afn arcp <2 x double> %a, %b, !fpmath !0
1953 ret <2 x double> %fdiv
1956 !0 = !{float 2.500000e+00}