Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / fdiv.f32.ll
blob146f344930a4ee7377ba22e954457981593ba834
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,GCN-IEEE,GFX6-IEEE,GFX6-IEEE-FASTFMA %s
3 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=tahiti -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GCN-FLUSH,GFX6-FLUSH,GFX6-FLUSH-FASTFMA %s
5 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=pitcairn -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GCN-IEEE,GFX6-IEEE,GFX6-IEEE-SLOWFMA %s
6 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=pitcairn -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GCN-FLUSH,GFX6-FLUSH,GFX6-FLUSH-SLOWFMA %s
8 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=fiji -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GCN-IEEE,GFX89-IEEE %s
9 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=fiji -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GCN-FLUSH,GFX89-FLUSH %s
11 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GCN-IEEE,GFX89-IEEE %s
12 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GCN-FLUSH,GFX89-FLUSH %s
14 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10,GFX10-IEEE %s
15 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10,GFX10-FLUSH %s
17 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1100 -denormal-fp-math=ieee -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11,GFX11-IEEE %s
18 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1100 -denormal-fp-math=preserve-sign -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11,GFX11-FLUSH %s
20 define float @v_fdiv_f32(float %a, float %b) {
21 ; GFX6-IEEE-FASTFMA-LABEL: v_fdiv_f32:
22 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
23 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
25 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
26 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
27 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
28 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
29 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
30 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
31 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
32 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
33 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
34 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
35 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
37 ; GFX6-FLUSH-FASTFMA-LABEL: v_fdiv_f32:
38 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
39 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
41 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
42 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
43 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
44 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
45 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
46 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
47 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
48 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
49 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
50 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
51 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
52 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
53 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
55 ; GFX6-IEEE-SLOWFMA-LABEL: v_fdiv_f32:
56 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
57 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
58 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
59 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
60 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
61 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
62 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
63 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
64 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
65 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
66 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
67 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
68 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
69 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
71 ; GFX6-FLUSH-SLOWFMA-LABEL: v_fdiv_f32:
72 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
73 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
74 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
75 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
76 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
77 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
78 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
79 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
80 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
81 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
82 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
83 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
84 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
85 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
86 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
87 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
89 ; GFX89-IEEE-LABEL: v_fdiv_f32:
90 ; GFX89-IEEE:       ; %bb.0:
91 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
92 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
93 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
94 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
95 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
96 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v4, v4
97 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v5, v3, v4
98 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v3
99 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, v6, v4, v5
100 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v3
101 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
102 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
103 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
105 ; GFX89-FLUSH-LABEL: v_fdiv_f32:
106 ; GFX89-FLUSH:       ; %bb.0:
107 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
108 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
109 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
110 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v2
111 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
112 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
113 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
114 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v3, v4
115 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v3
116 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
117 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v3
118 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
119 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
120 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
121 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
123 ; GFX10-IEEE-LABEL: v_fdiv_f32:
124 ; GFX10-IEEE:       ; %bb.0:
125 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
126 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
127 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v5, vcc_lo, v0, v1, v0
128 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v3, v2
129 ; GFX10-IEEE-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
130 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v3, v4, v3
131 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v4, v5, v3
132 ; GFX10-IEEE-NEXT:    v_fma_f32 v6, -v2, v4, v5
133 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v4, v6, v3
134 ; GFX10-IEEE-NEXT:    v_fma_f32 v2, -v2, v4, v5
135 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v3, v4
136 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
137 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
139 ; GFX10-FLUSH-LABEL: v_fdiv_f32:
140 ; GFX10-FLUSH:       ; %bb.0:
141 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
142 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
143 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
144 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
145 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
146 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
147 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
148 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
149 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
150 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
151 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
152 ; GFX10-FLUSH-NEXT:    s_denorm_mode 0
153 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
154 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
155 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
157 ; GFX11-IEEE-LABEL: v_fdiv_f32:
158 ; GFX11-IEEE:       ; %bb.0:
159 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
160 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
161 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v5, vcc_lo, v0, v1, v0
162 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
163 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v3, v2
164 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
165 ; GFX11-IEEE-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
166 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v3, v4, v3
167 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
168 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v4, v5, v3
169 ; GFX11-IEEE-NEXT:    v_fma_f32 v6, -v2, v4, v5
170 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
171 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v4, v6, v3
172 ; GFX11-IEEE-NEXT:    v_fma_f32 v2, -v2, v4, v5
173 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
174 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v3, v4
175 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
176 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
178 ; GFX11-FLUSH-LABEL: v_fdiv_f32:
179 ; GFX11-FLUSH:       ; %bb.0:
180 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
181 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
182 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
183 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
184 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
185 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
186 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
187 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
188 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
189 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
190 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
191 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
192 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
193 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
194 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
195 ; GFX11-FLUSH-NEXT:    s_denorm_mode 0
196 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
197 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
198 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
199 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
200   %fdiv = fdiv float %a, %b
201   ret float %fdiv
205 define float @v_fdiv_f32_dynamic_denorm(float %a, float %b) #0 {
206 ; GFX6-IEEE-FASTFMA-LABEL: v_fdiv_f32_dynamic_denorm:
207 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
208 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
209 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
210 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
211 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
212 ; GFX6-IEEE-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
213 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
214 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
215 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
216 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
217 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
218 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
219 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
220 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
221 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
222 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
223 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
225 ; GFX6-FLUSH-FASTFMA-LABEL: v_fdiv_f32_dynamic_denorm:
226 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
227 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
228 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
229 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
230 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
231 ; GFX6-FLUSH-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
232 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
233 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
234 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
235 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
236 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
237 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
238 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
239 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
240 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
241 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
242 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
244 ; GFX6-IEEE-SLOWFMA-LABEL: v_fdiv_f32_dynamic_denorm:
245 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
246 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
247 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
248 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
249 ; GFX6-IEEE-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
250 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
251 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
252 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
253 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
254 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
255 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
256 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
257 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
258 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
259 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
260 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
261 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
263 ; GFX6-FLUSH-SLOWFMA-LABEL: v_fdiv_f32_dynamic_denorm:
264 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
265 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
266 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
267 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
268 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
269 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
270 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
271 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
272 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
273 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
274 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
275 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
276 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
277 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
278 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
279 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
280 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
282 ; GFX89-IEEE-LABEL: v_fdiv_f32_dynamic_denorm:
283 ; GFX89-IEEE:       ; %bb.0:
284 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
285 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
286 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
287 ; GFX89-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
288 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
289 ; GFX89-IEEE-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
290 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
291 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v4, v4
292 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v5, v3, v4
293 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v3
294 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, v6, v4, v5
295 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v3
296 ; GFX89-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
297 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
298 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
299 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
301 ; GFX89-FLUSH-LABEL: v_fdiv_f32_dynamic_denorm:
302 ; GFX89-FLUSH:       ; %bb.0:
303 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
304 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
305 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
306 ; GFX89-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
307 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v2
308 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
309 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
310 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
311 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v3, v4
312 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v3
313 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
314 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v3
315 ; GFX89-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
316 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
317 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
318 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
320 ; GFX10-IEEE-LABEL: v_fdiv_f32_dynamic_denorm:
321 ; GFX10-IEEE:       ; %bb.0:
322 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
323 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
324 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
325 ; GFX10-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
326 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v3, v2
327 ; GFX10-IEEE-NEXT:    s_denorm_mode 15
328 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
329 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v3
330 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v5, v4, v3
331 ; GFX10-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v4
332 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v3
333 ; GFX10-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v4
334 ; GFX10-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
335 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
336 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
337 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
339 ; GFX10-FLUSH-LABEL: v_fdiv_f32_dynamic_denorm:
340 ; GFX10-FLUSH:       ; %bb.0:
341 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
342 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
343 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
344 ; GFX10-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
345 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
346 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
347 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
348 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
349 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
350 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
351 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
352 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
353 ; GFX10-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
354 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
355 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
356 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
358 ; GFX11-IEEE-LABEL: v_fdiv_f32_dynamic_denorm:
359 ; GFX11-IEEE:       ; %bb.0:
360 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
361 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
362 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
363 ; GFX11-IEEE-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
364 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
365 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v3, v2
366 ; GFX11-IEEE-NEXT:    s_denorm_mode 15
367 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
368 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
369 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v3
370 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
371 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v5, v4, v3
372 ; GFX11-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v4
373 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
374 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v3
375 ; GFX11-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v4
376 ; GFX11-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
377 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
378 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
379 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
380 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
382 ; GFX11-FLUSH-LABEL: v_fdiv_f32_dynamic_denorm:
383 ; GFX11-FLUSH:       ; %bb.0:
384 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
385 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
386 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
387 ; GFX11-FLUSH-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
388 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
389 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
390 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
391 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
392 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
393 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
394 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
395 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
396 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
397 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
398 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
399 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
400 ; GFX11-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
401 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
402 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
403 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
404 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
405   %fdiv = fdiv float %a, %b
406   ret float %fdiv
409 define float @v_fdiv_f32_afn(float %a, float %b) {
410 ; GCN-LABEL: v_fdiv_f32_afn:
411 ; GCN:       ; %bb.0:
412 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
413 ; GCN-NEXT:    v_rcp_f32_e32 v1, v1
414 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v1
415 ; GCN-NEXT:    s_setpc_b64 s[30:31]
417 ; GFX10-LABEL: v_fdiv_f32_afn:
418 ; GFX10:       ; %bb.0:
419 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
420 ; GFX10-NEXT:    v_rcp_f32_e32 v1, v1
421 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
422 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
424 ; GFX11-LABEL: v_fdiv_f32_afn:
425 ; GFX11:       ; %bb.0:
426 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
427 ; GFX11-NEXT:    v_rcp_f32_e32 v1, v1
428 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
429 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v1
430 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
431   %fdiv = fdiv afn float %a, %b
432   ret float %fdiv
435 define float @v_fdiv_f32_ulp25(float %a, float %b) {
436 ; GFX6-IEEE-LABEL: v_fdiv_f32_ulp25:
437 ; GFX6-IEEE:       ; %bb.0:
438 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
439 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
440 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
441 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
442 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
443 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
444 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
445 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
446 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
447 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v3, v0, v4, vcc
448 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
449 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
450 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
451 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
452 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
454 ; GCN-FLUSH-LABEL: v_fdiv_f32_ulp25:
455 ; GCN-FLUSH:       ; %bb.0:
456 ; GCN-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
457 ; GCN-FLUSH-NEXT:    v_mov_b32_e32 v2, 0x6f800000
458 ; GCN-FLUSH-NEXT:    v_mov_b32_e32 v3, 0x2f800000
459 ; GCN-FLUSH-NEXT:    v_cmp_gt_f32_e64 vcc, |v1|, v2
460 ; GCN-FLUSH-NEXT:    v_cndmask_b32_e32 v2, 1.0, v3, vcc
461 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v1, v1, v2
462 ; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1
463 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v1
464 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, v2, v0
465 ; GCN-FLUSH-NEXT:    s_setpc_b64 s[30:31]
467 ; GFX10-IEEE-LABEL: v_fdiv_f32_ulp25:
468 ; GFX10-IEEE:       ; %bb.0:
469 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
470 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
471 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
472 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v0
473 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
474 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
475 ; GFX10-IEEE-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
476 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
477 ; GFX10-IEEE-NEXT:    v_ldexp_f32 v0, v2, v0
478 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
480 ; GFX10-FLUSH-LABEL: v_fdiv_f32_ulp25:
481 ; GFX10-FLUSH:       ; %bb.0:
482 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
483 ; GFX10-FLUSH-NEXT:    v_cmp_lt_f32_e64 s4, 0x6f800000, |v1|
484 ; GFX10-FLUSH-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x2f800000, s4
485 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v1, v1, v2
486 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1
487 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v1
488 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v0, v2, v0
489 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
491 ; GFX11-IEEE-LABEL: v_fdiv_f32_ulp25:
492 ; GFX11-IEEE:       ; %bb.0:
493 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
494 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
495 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
496 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v0
497 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
498 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
499 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
500 ; GFX11-IEEE-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
501 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
502 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
503 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1)
504 ; GFX11-IEEE-NEXT:    v_ldexp_f32 v0, v2, v0
505 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
507 ; GFX11-FLUSH-LABEL: v_fdiv_f32_ulp25:
508 ; GFX11-FLUSH:       ; %bb.0:
509 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
510 ; GFX11-FLUSH-NEXT:    v_cmp_lt_f32_e64 s0, 0x6f800000, |v1|
511 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
512 ; GFX11-FLUSH-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x2f800000, s0
513 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v1, v1, v2
514 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
515 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1
516 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
517 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v1
518 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v0, v2, v0
519 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
520   %fdiv = fdiv float %a, %b, !fpmath !0
521   ret float %fdiv
524 define float @v_fdiv_f32_dynamic_25ulp(float %x, float %y) #0 {
525 ; GFX6-LABEL: v_fdiv_f32_dynamic_25ulp:
526 ; GFX6:       ; %bb.0:
527 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
528 ; GFX6-NEXT:    s_mov_b32 s4, 0x7f800000
529 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v2, v1
530 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
531 ; GFX6-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
532 ; GFX6-NEXT:    v_rcp_f32_e32 v2, v2
533 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v3, v0
534 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
535 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
536 ; GFX6-NEXT:    v_cndmask_b32_e32 v3, v0, v3, vcc
537 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
538 ; GFX6-NEXT:    v_mul_f32_e32 v2, v3, v2
539 ; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
540 ; GFX6-NEXT:    v_ldexp_f32_e32 v0, v2, v0
541 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
543 ; GFX7-LABEL: v_fdiv_f32_dynamic_25ulp:
544 ; GFX7:       ; %bb.0:
545 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
546 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v2, v1
547 ; GFX7-NEXT:    v_rcp_f32_e32 v2, v2
548 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
549 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0
550 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v0, v0
551 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v2
552 ; GFX7-NEXT:    v_sub_i32_e32 v1, vcc, v3, v1
553 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v1
554 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
556 ; GFX8-LABEL: v_fdiv_f32_dynamic_25ulp:
557 ; GFX8:       ; %bb.0:
558 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
559 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v2, v1
560 ; GFX8-NEXT:    v_rcp_f32_e32 v2, v2
561 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
562 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0
563 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v0, v0
564 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v2
565 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, v3, v1
566 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v1
567 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
569 ; GFX6-IEEE-LABEL: v_fdiv_f32_dynamic_25ulp:
570 ; GFX6-IEEE:       ; %bb.0:
571 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
572 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
573 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
574 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
575 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
576 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
577 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
578 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
579 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
580 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v3, v0, v4, vcc
581 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
582 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
583 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
584 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
585 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
587 ; GFX6-FLUSH-LABEL: v_fdiv_f32_dynamic_25ulp:
588 ; GFX6-FLUSH:       ; %bb.0:
589 ; GFX6-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
590 ; GFX6-FLUSH-NEXT:    v_mov_b32_e32 v3, 0x7f800000
591 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v2, v1
592 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
593 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
594 ; GFX6-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
595 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v4, v0
596 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
597 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
598 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v3, v0, v4, vcc
599 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
600 ; GFX6-FLUSH-NEXT:    v_mul_f32_e32 v2, v3, v2
601 ; GFX6-FLUSH-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
602 ; GFX6-FLUSH-NEXT:    v_ldexp_f32_e32 v0, v2, v0
603 ; GFX6-FLUSH-NEXT:    s_setpc_b64 s[30:31]
605 ; GFX10-LABEL: v_fdiv_f32_dynamic_25ulp:
606 ; GFX10:       ; %bb.0:
607 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
608 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v2, v1
609 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
610 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v3, v0
611 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
612 ; GFX10-NEXT:    v_rcp_f32_e32 v2, v2
613 ; GFX10-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
614 ; GFX10-NEXT:    v_mul_f32_e32 v2, v3, v2
615 ; GFX10-NEXT:    v_ldexp_f32 v0, v2, v0
616 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
618 ; GFX11-LABEL: v_fdiv_f32_dynamic_25ulp:
619 ; GFX11:       ; %bb.0:
620 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
621 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v2, v1
622 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
623 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v3, v0
624 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
625 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
626 ; GFX11-NEXT:    v_rcp_f32_e32 v2, v2
627 ; GFX11-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
628 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
629 ; GFX11-NEXT:    v_mul_f32_e32 v2, v3, v2
630 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
631 ; GFX11-NEXT:    v_ldexp_f32 v0, v2, v0
632 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
633 ; EG-LABEL: v_fdiv_f32_dynamic_25ulp:
634 ; EG:       ; %bb.0:
635 ; EG-NEXT:    CF_END
636 ; EG-NEXT:    PAD
637   %div = fdiv float %x, %y, !fpmath !0
638   ret float %div
641 define float @v_rcp_f32(float %x) {
642 ; GFX6-IEEE-FASTFMA-LABEL: v_rcp_f32:
643 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
644 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
645 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
646 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v2, v1
647 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v3, vcc, 1.0, v0, 1.0
648 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
649 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, v4, v2, v2
650 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v4, v3, v2
651 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v1, v4, v3
652 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, v5, v2, v4
653 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v1, -v1, v4, v3
654 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
655 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
656 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
658 ; GFX6-FLUSH-FASTFMA-LABEL: v_rcp_f32:
659 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
660 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
661 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
662 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v2, v1
663 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v3, vcc, 1.0, v0, 1.0
664 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
665 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
666 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, v4, v2, v2
667 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v4, v3, v2
668 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v1, v4, v3
669 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, v5, v2, v4
670 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v1, -v1, v4, v3
671 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
672 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
673 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
674 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
676 ; GFX6-IEEE-SLOWFMA-LABEL: v_rcp_f32:
677 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
678 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
679 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
680 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v0, 1.0
681 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v3, v1
682 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
683 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
684 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v4, v2, v3
685 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v1, v4, v2
686 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v3, v4
687 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v1, -v1, v4, v2
688 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
689 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
690 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
692 ; GFX6-FLUSH-SLOWFMA-LABEL: v_rcp_f32:
693 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
694 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
695 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
696 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v0, 1.0
697 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v3, v1
698 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
699 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
700 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
701 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v4, v2, v3
702 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v1, v4, v2
703 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v3, v4
704 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v1, -v1, v4, v2
705 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
706 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
707 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
708 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
710 ; GFX89-IEEE-LABEL: v_rcp_f32:
711 ; GFX89-IEEE:       ; %bb.0:
712 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
713 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
714 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v0, 1.0
715 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v3, v1
716 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
717 ; GFX89-IEEE-NEXT:    v_fma_f32 v3, v4, v3, v3
718 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v4, v2, v3
719 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v1, v4, v2
720 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v3, v4
721 ; GFX89-IEEE-NEXT:    v_fma_f32 v1, -v1, v4, v2
722 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
723 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
724 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
726 ; GFX89-FLUSH-LABEL: v_rcp_f32:
727 ; GFX89-FLUSH:       ; %bb.0:
728 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
729 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
730 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v0, 1.0
731 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v3, v1
732 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
733 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
734 ; GFX89-FLUSH-NEXT:    v_fma_f32 v3, v4, v3, v3
735 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v4, v2, v3
736 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v1, v4, v2
737 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v3, v4
738 ; GFX89-FLUSH-NEXT:    v_fma_f32 v1, -v1, v4, v2
739 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
740 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
741 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
742 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
744 ; GFX10-IEEE-LABEL: v_rcp_f32:
745 ; GFX10-IEEE:       ; %bb.0:
746 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
747 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v1, s4, v0, v0, 1.0
748 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, 1.0, v0, 1.0
749 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v2, v1
750 ; GFX10-IEEE-NEXT:    v_fma_f32 v3, -v1, v2, 1.0
751 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v2, v3, v2
752 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v3, v4, v2
753 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v1, v3, v4
754 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v2
755 ; GFX10-IEEE-NEXT:    v_fma_f32 v1, -v1, v3, v4
756 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v1, v1, v2, v3
757 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
758 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
760 ; GFX10-FLUSH-LABEL: v_rcp_f32:
761 ; GFX10-FLUSH:       ; %bb.0:
762 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
763 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v1, s4, v0, v0, 1.0
764 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v3, vcc_lo, 1.0, v0, 1.0
765 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v2, v1
766 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
767 ; GFX10-FLUSH-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
768 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v2, v4, v2
769 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v4, v3, v2
770 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v1, v4, v3
771 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v2
772 ; GFX10-FLUSH-NEXT:    v_fma_f32 v1, -v1, v4, v3
773 ; GFX10-FLUSH-NEXT:    s_denorm_mode 0
774 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
775 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
776 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
778 ; GFX11-IEEE-LABEL: v_rcp_f32:
779 ; GFX11-IEEE:       ; %bb.0:
780 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
781 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v1, null, v0, v0, 1.0
782 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, 1.0, v0, 1.0
783 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
784 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v2, v1
785 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
786 ; GFX11-IEEE-NEXT:    v_fma_f32 v3, -v1, v2, 1.0
787 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v2, v3, v2
788 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
789 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v3, v4, v2
790 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v1, v3, v4
791 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
792 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v2
793 ; GFX11-IEEE-NEXT:    v_fma_f32 v1, -v1, v3, v4
794 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
795 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v1, v1, v2, v3
796 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
797 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
799 ; GFX11-FLUSH-LABEL: v_rcp_f32:
800 ; GFX11-FLUSH:       ; %bb.0:
801 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
802 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v1, null, v0, v0, 1.0
803 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v3, vcc_lo, 1.0, v0, 1.0
804 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
805 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v2, v1
806 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
807 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
808 ; GFX11-FLUSH-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
809 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v2, v4, v2
810 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
811 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v4, v3, v2
812 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v1, v4, v3
813 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
814 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v2
815 ; GFX11-FLUSH-NEXT:    v_fma_f32 v1, -v1, v4, v3
816 ; GFX11-FLUSH-NEXT:    s_denorm_mode 0
817 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
818 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
819 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
820 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
821   %fdiv = fdiv float 1.0, %x
822   ret float %fdiv
825 define float @v_rcp_f32_arcp(float %x) {
826 ; GFX6-IEEE-FASTFMA-LABEL: v_rcp_f32_arcp:
827 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
828 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
829 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
830 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v2, v1
831 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v3, vcc, 1.0, v0, 1.0
832 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
833 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, v4, v2, v2
834 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v4, v3, v2
835 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v1, v4, v3
836 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, v5, v2, v4
837 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v1, -v1, v4, v3
838 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
839 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
840 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
842 ; GFX6-FLUSH-FASTFMA-LABEL: v_rcp_f32_arcp:
843 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
844 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
845 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
846 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v2, v1
847 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v3, vcc, 1.0, v0, 1.0
848 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
849 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
850 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, v4, v2, v2
851 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v4, v3, v2
852 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v1, v4, v3
853 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, v5, v2, v4
854 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v1, -v1, v4, v3
855 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
856 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
857 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
858 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
860 ; GFX6-IEEE-SLOWFMA-LABEL: v_rcp_f32_arcp:
861 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
862 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
863 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
864 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v0, 1.0
865 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v3, v1
866 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
867 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
868 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v4, v2, v3
869 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v1, v4, v2
870 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v3, v4
871 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v1, -v1, v4, v2
872 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
873 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
874 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
876 ; GFX6-FLUSH-SLOWFMA-LABEL: v_rcp_f32_arcp:
877 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
878 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
879 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
880 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v0, 1.0
881 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v3, v1
882 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
883 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
884 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
885 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v4, v2, v3
886 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v1, v4, v2
887 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v3, v4
888 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v1, -v1, v4, v2
889 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
890 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
891 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
892 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
894 ; GFX89-IEEE-LABEL: v_rcp_f32_arcp:
895 ; GFX89-IEEE:       ; %bb.0:
896 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
897 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
898 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v0, 1.0
899 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v3, v1
900 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
901 ; GFX89-IEEE-NEXT:    v_fma_f32 v3, v4, v3, v3
902 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v4, v2, v3
903 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v1, v4, v2
904 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v3, v4
905 ; GFX89-IEEE-NEXT:    v_fma_f32 v1, -v1, v4, v2
906 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
907 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
908 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
910 ; GFX89-FLUSH-LABEL: v_rcp_f32_arcp:
911 ; GFX89-FLUSH:       ; %bb.0:
912 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
913 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, 1.0
914 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v0, 1.0
915 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v3, v1
916 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
917 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
918 ; GFX89-FLUSH-NEXT:    v_fma_f32 v3, v4, v3, v3
919 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v4, v2, v3
920 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v1, v4, v2
921 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v3, v4
922 ; GFX89-FLUSH-NEXT:    v_fma_f32 v1, -v1, v4, v2
923 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
924 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
925 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
926 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
928 ; GFX10-IEEE-LABEL: v_rcp_f32_arcp:
929 ; GFX10-IEEE:       ; %bb.0:
930 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
931 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v1, s4, v0, v0, 1.0
932 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, 1.0, v0, 1.0
933 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v2, v1
934 ; GFX10-IEEE-NEXT:    v_fma_f32 v3, -v1, v2, 1.0
935 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v2, v3, v2
936 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v3, v4, v2
937 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v1, v3, v4
938 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v2
939 ; GFX10-IEEE-NEXT:    v_fma_f32 v1, -v1, v3, v4
940 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v1, v1, v2, v3
941 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
942 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
944 ; GFX10-FLUSH-LABEL: v_rcp_f32_arcp:
945 ; GFX10-FLUSH:       ; %bb.0:
946 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
947 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v1, s4, v0, v0, 1.0
948 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v3, vcc_lo, 1.0, v0, 1.0
949 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v2, v1
950 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
951 ; GFX10-FLUSH-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
952 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v2, v4, v2
953 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v4, v3, v2
954 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v1, v4, v3
955 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v2
956 ; GFX10-FLUSH-NEXT:    v_fma_f32 v1, -v1, v4, v3
957 ; GFX10-FLUSH-NEXT:    s_denorm_mode 0
958 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
959 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
960 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
962 ; GFX11-IEEE-LABEL: v_rcp_f32_arcp:
963 ; GFX11-IEEE:       ; %bb.0:
964 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
965 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v1, null, v0, v0, 1.0
966 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, 1.0, v0, 1.0
967 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
968 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v2, v1
969 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
970 ; GFX11-IEEE-NEXT:    v_fma_f32 v3, -v1, v2, 1.0
971 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v2, v3, v2
972 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
973 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v3, v4, v2
974 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v1, v3, v4
975 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
976 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v2
977 ; GFX11-IEEE-NEXT:    v_fma_f32 v1, -v1, v3, v4
978 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
979 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v1, v1, v2, v3
980 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
981 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
983 ; GFX11-FLUSH-LABEL: v_rcp_f32_arcp:
984 ; GFX11-FLUSH:       ; %bb.0:
985 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
986 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v1, null, v0, v0, 1.0
987 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v3, vcc_lo, 1.0, v0, 1.0
988 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
989 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v2, v1
990 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
991 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
992 ; GFX11-FLUSH-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
993 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v2, v4, v2
994 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
995 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v4, v3, v2
996 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v1, v4, v3
997 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
998 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v2
999 ; GFX11-FLUSH-NEXT:    v_fma_f32 v1, -v1, v4, v3
1000 ; GFX11-FLUSH-NEXT:    s_denorm_mode 0
1001 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1002 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
1003 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v1, v0, 1.0
1004 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1005   %fdiv = fdiv arcp float 1.0, %x
1006   ret float %fdiv
1009 define float @v_rcp_f32_arcp_afn(float %x) {
1010 ; GCN-LABEL: v_rcp_f32_arcp_afn:
1011 ; GCN:       ; %bb.0:
1012 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1013 ; GCN-NEXT:    v_rcp_f32_e32 v0, v0
1014 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1016 ; GFX10-LABEL: v_rcp_f32_arcp_afn:
1017 ; GFX10:       ; %bb.0:
1018 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1019 ; GFX10-NEXT:    v_rcp_f32_e32 v0, v0
1020 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1022 ; GFX11-LABEL: v_rcp_f32_arcp_afn:
1023 ; GFX11:       ; %bb.0:
1024 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1025 ; GFX11-NEXT:    v_rcp_f32_e32 v0, v0
1026 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1027   %fdiv = fdiv arcp afn float 1.0, %x
1028   ret float %fdiv
1031 define float @v_rcp_f32_ulp25(float %x) {
1032 ; GFX6-IEEE-LABEL: v_rcp_f32_ulp25:
1033 ; GFX6-IEEE:       ; %bb.0:
1034 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1035 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v2, 0x7f800000
1036 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v1, v0
1037 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
1038 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v1, v0, v1, vcc
1039 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v1, v1
1040 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
1041 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
1042 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v1, v0
1043 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
1045 ; GCN-FLUSH-LABEL: v_rcp_f32_ulp25:
1046 ; GCN-FLUSH:       ; %bb.0:
1047 ; GCN-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1048 ; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v0, v0
1049 ; GCN-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1051 ; GFX10-IEEE-LABEL: v_rcp_f32_ulp25:
1052 ; GFX10-IEEE:       ; %bb.0:
1053 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1054 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v1, v0
1055 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
1056 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v1, v1
1057 ; GFX10-IEEE-NEXT:    v_sub_nc_u32_e32 v0, 0, v0
1058 ; GFX10-IEEE-NEXT:    v_ldexp_f32 v0, v1, v0
1059 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
1061 ; GFX10-FLUSH-LABEL: v_rcp_f32_ulp25:
1062 ; GFX10-FLUSH:       ; %bb.0:
1063 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1064 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v0, v0
1065 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1067 ; GFX11-IEEE-LABEL: v_rcp_f32_ulp25:
1068 ; GFX11-IEEE:       ; %bb.0:
1069 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1070 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v1, v0
1071 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
1072 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1073 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v1, v1
1074 ; GFX11-IEEE-NEXT:    v_sub_nc_u32_e32 v0, 0, v0
1075 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
1076 ; GFX11-IEEE-NEXT:    v_ldexp_f32 v0, v1, v0
1077 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
1079 ; GFX11-FLUSH-LABEL: v_rcp_f32_ulp25:
1080 ; GFX11-FLUSH:       ; %bb.0:
1081 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1082 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v0, v0
1083 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1084   %fdiv = fdiv float 1.0, %x, !fpmath !0
1085   ret float %fdiv
1088 define float @v_fdiv_f32_afn_ulp25(float %a, float %b) {
1089 ; GCN-LABEL: v_fdiv_f32_afn_ulp25:
1090 ; GCN:       ; %bb.0:
1091 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1092 ; GCN-NEXT:    v_rcp_f32_e32 v1, v1
1093 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v1
1094 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1096 ; GFX10-LABEL: v_fdiv_f32_afn_ulp25:
1097 ; GFX10:       ; %bb.0:
1098 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1099 ; GFX10-NEXT:    v_rcp_f32_e32 v1, v1
1100 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
1101 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1103 ; GFX11-LABEL: v_fdiv_f32_afn_ulp25:
1104 ; GFX11:       ; %bb.0:
1105 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1106 ; GFX11-NEXT:    v_rcp_f32_e32 v1, v1
1107 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
1108 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v1
1109 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1110   %fdiv = fdiv afn float %a, %b, !fpmath !0
1111   ret float %fdiv
1114 define float @v_fdiv_f32_arcp_ulp25(float %a, float %b) {
1115 ; GFX6-IEEE-LABEL: v_fdiv_f32_arcp_ulp25:
1116 ; GFX6-IEEE:       ; %bb.0:
1117 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1118 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
1119 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
1120 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
1121 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
1122 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
1123 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
1124 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, 0, v1
1125 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
1126 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
1127 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
1129 ; GCN-FLUSH-LABEL: v_fdiv_f32_arcp_ulp25:
1130 ; GCN-FLUSH:       ; %bb.0:
1131 ; GCN-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1132 ; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1
1133 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v1
1134 ; GCN-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1136 ; GFX10-IEEE-LABEL: v_fdiv_f32_arcp_ulp25:
1137 ; GFX10-IEEE:       ; %bb.0:
1138 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1139 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
1140 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
1141 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
1142 ; GFX10-IEEE-NEXT:    v_sub_nc_u32_e32 v1, 0, v1
1143 ; GFX10-IEEE-NEXT:    v_ldexp_f32 v1, v2, v1
1144 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
1145 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
1147 ; GFX10-FLUSH-LABEL: v_fdiv_f32_arcp_ulp25:
1148 ; GFX10-FLUSH:       ; %bb.0:
1149 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1150 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1
1151 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v1
1152 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1154 ; GFX11-IEEE-LABEL: v_fdiv_f32_arcp_ulp25:
1155 ; GFX11-IEEE:       ; %bb.0:
1156 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1157 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
1158 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
1159 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1160 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
1161 ; GFX11-IEEE-NEXT:    v_sub_nc_u32_e32 v1, 0, v1
1162 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
1163 ; GFX11-IEEE-NEXT:    v_ldexp_f32 v1, v2, v1
1164 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1165 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v1
1166 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
1168 ; GFX11-FLUSH-LABEL: v_fdiv_f32_arcp_ulp25:
1169 ; GFX11-FLUSH:       ; %bb.0:
1170 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1171 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1
1172 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
1173 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v1
1174 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1175   %fdiv = fdiv arcp float %a, %b, !fpmath !0
1176   ret float %fdiv
1179 define <2 x float> @v_fdiv_v2f32(<2 x float> %a, <2 x float> %b) {
1180 ; GFX6-IEEE-FASTFMA-LABEL: v_fdiv_v2f32:
1181 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
1182 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1183 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v4, s[4:5], v2, v2, v0
1184 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v5, v4
1185 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v6, vcc, v0, v2, v0
1186 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v7, -v4, v5, 1.0
1187 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v7, v5, v5
1188 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v7, v6, v5
1189 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v8, -v4, v7, v6
1190 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v7, v8, v5, v7
1191 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, -v4, v7, v6
1192 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v4, v4, v5, v7
1193 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v5, s[4:5], v3, v3, v1
1194 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v6, v5
1195 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v4, v2, v0
1196 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, vcc, v1, v3, v1
1197 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, -v5, v6, 1.0
1198 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, v4, v6, v6
1199 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v6, v2, v4
1200 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v7, -v5, v6, v2
1201 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, v7, v4, v6
1202 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v5, v6, v2
1203 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v6
1204 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v1, v2, v3, v1
1205 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
1207 ; GFX6-FLUSH-FASTFMA-LABEL: v_fdiv_v2f32:
1208 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
1209 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1210 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v4, s[4:5], v2, v2, v0
1211 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v5, v4
1212 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v6, vcc, v0, v2, v0
1213 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1214 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v7, -v4, v5, 1.0
1215 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v7, v5, v5
1216 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v7, v6, v5
1217 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v8, -v4, v7, v6
1218 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v7, v8, v5, v7
1219 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, -v4, v7, v6
1220 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1221 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v4, v4, v5, v7
1222 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v5, s[4:5], v3, v3, v1
1223 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v6, v5
1224 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v4, v2, v0
1225 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, vcc, v1, v3, v1
1226 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1227 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, -v5, v6, 1.0
1228 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, v4, v6, v6
1229 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v6, v2, v4
1230 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v7, -v5, v6, v2
1231 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, v7, v4, v6
1232 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v5, v6, v2
1233 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1234 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v6
1235 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v1, v2, v3, v1
1236 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
1238 ; GFX6-IEEE-SLOWFMA-LABEL: v_fdiv_v2f32:
1239 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
1240 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1241 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v4, s[4:5], v2, v2, v0
1242 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v5, s[4:5], v3, v3, v1
1243 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v6, vcc, v0, v2, v0
1244 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v7, s[4:5], v1, v3, v1
1245 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v8, v4
1246 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v9, v5
1247 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v10, -v4, v8, 1.0
1248 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v8, v10, v8, v8
1249 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v11, -v5, v9, 1.0
1250 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v9, v11, v9, v9
1251 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v10, v6, v8
1252 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v11, v7, v9
1253 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v12, -v4, v10, v6
1254 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v13, -v5, v11, v7
1255 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v10, v12, v8, v10
1256 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v11, v13, v9, v11
1257 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, -v4, v10, v6
1258 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v5, v11, v7
1259 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v4, v4, v8, v10
1260 ; GFX6-IEEE-SLOWFMA-NEXT:    s_mov_b64 vcc, s[4:5]
1261 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v5, v5, v9, v11
1262 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v4, v2, v0
1263 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v1, v5, v3, v1
1264 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
1266 ; GFX6-FLUSH-SLOWFMA-LABEL: v_fdiv_v2f32:
1267 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
1268 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1269 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v4, s[4:5], v2, v2, v0
1270 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v5, vcc, v0, v2, v0
1271 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v6, v4
1272 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1273 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v7, -v4, v6, 1.0
1274 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, v7, v6, v6
1275 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v7, v5, v6
1276 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v8, -v4, v7, v5
1277 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v7, v8, v6, v7
1278 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, -v4, v7, v5
1279 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1280 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v5, s[4:5], v3, v3, v1
1281 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v4, v4, v6, v7
1282 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v6, vcc, v1, v3, v1
1283 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v7, v5
1284 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v4, v2, v0
1285 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1286 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v5, v7, 1.0
1287 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, v2, v7, v7
1288 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v4, v6, v2
1289 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v7, -v5, v4, v6
1290 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v7, v2, v4
1291 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v5, v4, v6
1292 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1293 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v5, v2, v4
1294 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v1, v2, v3, v1
1295 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
1297 ; GFX89-IEEE-LABEL: v_fdiv_v2f32:
1298 ; GFX89-IEEE:       ; %bb.0:
1299 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1300 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v4, s[4:5], v2, v2, v0
1301 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v5, s[4:5], v3, v3, v1
1302 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v6, vcc, v0, v2, v0
1303 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v7, s[4:5], v1, v3, v1
1304 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v8, v4
1305 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v9, v5
1306 ; GFX89-IEEE-NEXT:    v_fma_f32 v10, -v4, v8, 1.0
1307 ; GFX89-IEEE-NEXT:    v_fma_f32 v8, v10, v8, v8
1308 ; GFX89-IEEE-NEXT:    v_fma_f32 v11, -v5, v9, 1.0
1309 ; GFX89-IEEE-NEXT:    v_fma_f32 v9, v11, v9, v9
1310 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v10, v6, v8
1311 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v11, v7, v9
1312 ; GFX89-IEEE-NEXT:    v_fma_f32 v12, -v4, v10, v6
1313 ; GFX89-IEEE-NEXT:    v_fma_f32 v13, -v5, v11, v7
1314 ; GFX89-IEEE-NEXT:    v_fma_f32 v10, v12, v8, v10
1315 ; GFX89-IEEE-NEXT:    v_fma_f32 v11, v13, v9, v11
1316 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, -v4, v10, v6
1317 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v5, v11, v7
1318 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v4, v4, v8, v10
1319 ; GFX89-IEEE-NEXT:    s_mov_b64 vcc, s[4:5]
1320 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v5, v5, v9, v11
1321 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v4, v2, v0
1322 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v1, v5, v3, v1
1323 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
1325 ; GFX89-FLUSH-LABEL: v_fdiv_v2f32:
1326 ; GFX89-FLUSH:       ; %bb.0:
1327 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1328 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v4, s[4:5], v2, v2, v0
1329 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v5, vcc, v0, v2, v0
1330 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v6, v4
1331 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1332 ; GFX89-FLUSH-NEXT:    v_fma_f32 v7, -v4, v6, 1.0
1333 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, v7, v6, v6
1334 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v7, v5, v6
1335 ; GFX89-FLUSH-NEXT:    v_fma_f32 v8, -v4, v7, v5
1336 ; GFX89-FLUSH-NEXT:    v_fma_f32 v7, v8, v6, v7
1337 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, -v4, v7, v5
1338 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1339 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v5, s[4:5], v3, v3, v1
1340 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v4, v4, v6, v7
1341 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v6, vcc, v1, v3, v1
1342 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v7, v5
1343 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v4, v2, v0
1344 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1345 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v5, v7, 1.0
1346 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, v2, v7, v7
1347 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v4, v6, v2
1348 ; GFX89-FLUSH-NEXT:    v_fma_f32 v7, -v5, v4, v6
1349 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v7, v2, v4
1350 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v5, v4, v6
1351 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1352 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v5, v2, v4
1353 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v1, v2, v3, v1
1354 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1356 ; GFX10-IEEE-LABEL: v_fdiv_v2f32:
1357 ; GFX10-IEEE:       ; %bb.0:
1358 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1359 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v4, s4, v2, v2, v0
1360 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v5, s4, v3, v3, v1
1361 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v10, vcc_lo, v0, v2, v0
1362 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v6, v4
1363 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v7, v5
1364 ; GFX10-IEEE-NEXT:    v_fma_f32 v8, -v4, v6, 1.0
1365 ; GFX10-IEEE-NEXT:    v_fma_f32 v9, -v5, v7, 1.0
1366 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v6, v8, v6
1367 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v8, s4, v1, v3, v1
1368 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v7, v9, v7
1369 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v9, v10, v6
1370 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v11, v8, v7
1371 ; GFX10-IEEE-NEXT:    v_fma_f32 v12, -v4, v9, v10
1372 ; GFX10-IEEE-NEXT:    v_fma_f32 v13, -v5, v11, v8
1373 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v9, v12, v6
1374 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v11, v13, v7
1375 ; GFX10-IEEE-NEXT:    v_fma_f32 v4, -v4, v9, v10
1376 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v5, v11, v8
1377 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v4, v4, v6, v9
1378 ; GFX10-IEEE-NEXT:    s_mov_b32 vcc_lo, s4
1379 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v5, v5, v7, v11
1380 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v4, v2, v0
1381 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v1, v5, v3, v1
1382 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
1384 ; GFX10-FLUSH-LABEL: v_fdiv_v2f32:
1385 ; GFX10-FLUSH:       ; %bb.0:
1386 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1387 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v4, s4, v2, v2, v0
1388 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v6, vcc_lo, v0, v2, v0
1389 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v5, v4
1390 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
1391 ; GFX10-FLUSH-NEXT:    v_fma_f32 v7, -v4, v5, 1.0
1392 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v7, v5
1393 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v7, v6, v5
1394 ; GFX10-FLUSH-NEXT:    v_fma_f32 v8, -v4, v7, v6
1395 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v7, v8, v5
1396 ; GFX10-FLUSH-NEXT:    v_fma_f32 v4, -v4, v7, v6
1397 ; GFX10-FLUSH-NEXT:    s_denorm_mode 0
1398 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v6, s4, v3, v3, v1
1399 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v4, v4, v5, v7
1400 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v5, v6
1401 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v4, v2, v0
1402 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, vcc_lo, v1, v3, v1
1403 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
1404 ; GFX10-FLUSH-NEXT:    v_fma_f32 v4, -v6, v5, 1.0
1405 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v4, v5
1406 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v4, v2, v5
1407 ; GFX10-FLUSH-NEXT:    v_fma_f32 v7, -v6, v4, v2
1408 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v4, v7, v5
1409 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v6, v4, v2
1410 ; GFX10-FLUSH-NEXT:    s_denorm_mode 0
1411 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v5, v4
1412 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v1, v2, v3, v1
1413 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1415 ; GFX11-IEEE-LABEL: v_fdiv_v2f32:
1416 ; GFX11-IEEE:       ; %bb.0:
1417 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1418 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v4, null, v2, v2, v0
1419 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v5, null, v3, v3, v1
1420 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v10, vcc_lo, v0, v2, v0
1421 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1422 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v6, v4
1423 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v7, v5
1424 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
1425 ; GFX11-IEEE-NEXT:    v_fma_f32 v8, -v4, v6, 1.0
1426 ; GFX11-IEEE-NEXT:    v_fma_f32 v9, -v5, v7, 1.0
1427 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1428 ; GFX11-IEEE-NEXT:    v_dual_fmac_f32 v6, v8, v6 :: v_dual_fmac_f32 v7, v9, v7
1429 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v8, s0, v1, v3, v1
1430 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v9, v10, v6
1431 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1432 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v11, v8, v7
1433 ; GFX11-IEEE-NEXT:    v_fma_f32 v12, -v4, v9, v10
1434 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1435 ; GFX11-IEEE-NEXT:    v_fma_f32 v13, -v5, v11, v8
1436 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v9, v12, v6
1437 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1438 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v11, v13, v7
1439 ; GFX11-IEEE-NEXT:    v_fma_f32 v4, -v4, v9, v10
1440 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1441 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v5, v11, v8
1442 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v4, v4, v6, v9
1443 ; GFX11-IEEE-NEXT:    s_mov_b32 vcc_lo, s0
1444 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1445 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v5, v5, v7, v11
1446 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v4, v2, v0
1447 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1448 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v1, v5, v3, v1
1449 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
1451 ; GFX11-FLUSH-LABEL: v_fdiv_v2f32:
1452 ; GFX11-FLUSH:       ; %bb.0:
1453 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1454 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v4, null, v2, v2, v0
1455 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v6, vcc_lo, v0, v2, v0
1456 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
1457 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v5, v4
1458 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
1459 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
1460 ; GFX11-FLUSH-NEXT:    v_fma_f32 v7, -v4, v5, 1.0
1461 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v7, v5
1462 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1463 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v7, v6, v5
1464 ; GFX11-FLUSH-NEXT:    v_fma_f32 v8, -v4, v7, v6
1465 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1466 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v7, v8, v5
1467 ; GFX11-FLUSH-NEXT:    v_fma_f32 v4, -v4, v7, v6
1468 ; GFX11-FLUSH-NEXT:    s_denorm_mode 0
1469 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v6, null, v3, v3, v1
1470 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1471 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v4, v4, v5, v7
1472 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v5, v6
1473 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)
1474 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v4, v2, v0
1475 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, vcc_lo, v1, v3, v1
1476 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
1477 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
1478 ; GFX11-FLUSH-NEXT:    v_fma_f32 v4, -v6, v5, 1.0
1479 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v4, v5
1480 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1481 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v4, v2, v5
1482 ; GFX11-FLUSH-NEXT:    v_fma_f32 v7, -v6, v4, v2
1483 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1484 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v4, v7, v5
1485 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v6, v4, v2
1486 ; GFX11-FLUSH-NEXT:    s_denorm_mode 0
1487 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1488 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v5, v4
1489 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v1, v2, v3, v1
1490 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1491   %fdiv = fdiv <2 x float> %a, %b
1492   ret <2 x float> %fdiv
1495 define <2 x float> @v_fdiv_v2f32_afn(<2 x float> %a, <2 x float> %b) {
1496 ; GCN-LABEL: v_fdiv_v2f32_afn:
1497 ; GCN:       ; %bb.0:
1498 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1499 ; GCN-NEXT:    v_rcp_f32_e32 v2, v2
1500 ; GCN-NEXT:    v_rcp_f32_e32 v3, v3
1501 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v2
1502 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v3
1503 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1505 ; GFX10-LABEL: v_fdiv_v2f32_afn:
1506 ; GFX10:       ; %bb.0:
1507 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1508 ; GFX10-NEXT:    v_rcp_f32_e32 v2, v2
1509 ; GFX10-NEXT:    v_rcp_f32_e32 v3, v3
1510 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v2
1511 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v3
1512 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1514 ; GFX11-LABEL: v_fdiv_v2f32_afn:
1515 ; GFX11:       ; %bb.0:
1516 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1517 ; GFX11-NEXT:    v_rcp_f32_e32 v2, v2
1518 ; GFX11-NEXT:    v_rcp_f32_e32 v3, v3
1519 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
1520 ; GFX11-NEXT:    v_dual_mul_f32 v0, v0, v2 :: v_dual_mul_f32 v1, v1, v3
1521 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1522   %fdiv = fdiv afn <2 x float> %a, %b
1523   ret <2 x float> %fdiv
1526 define <2 x float> @v_fdiv_v2f32_ulp25(<2 x float> %a, <2 x float> %b) {
1527 ; GFX6-IEEE-LABEL: v_fdiv_v2f32_ulp25:
1528 ; GFX6-IEEE:       ; %bb.0:
1529 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1530 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v5, 0x7f800000
1531 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v2
1532 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v2|, v5
1533 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v4, v2, v4, vcc
1534 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v6, v0
1535 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v5
1536 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2
1537 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v6, v0, v6, vcc
1538 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
1539 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
1540 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v0, v2
1541 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v3
1542 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v3|, v5
1543 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
1544 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
1545 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v4, v6, v4
1546 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v4, v0
1547 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v1
1548 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v5
1549 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3
1550 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v4, v1, v4, vcc
1551 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
1552 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v2, v4, v2
1553 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, v1, v3
1554 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
1555 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
1557 ; GCN-FLUSH-LABEL: v_fdiv_v2f32_ulp25:
1558 ; GCN-FLUSH:       ; %bb.0:
1559 ; GCN-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1560 ; GCN-FLUSH-NEXT:    v_mov_b32_e32 v4, 0x6f800000
1561 ; GCN-FLUSH-NEXT:    v_mov_b32_e32 v5, 0x2f800000
1562 ; GCN-FLUSH-NEXT:    v_cmp_gt_f32_e64 vcc, |v2|, v4
1563 ; GCN-FLUSH-NEXT:    v_cndmask_b32_e32 v6, 1.0, v5, vcc
1564 ; GCN-FLUSH-NEXT:    v_cmp_gt_f32_e64 vcc, |v3|, v4
1565 ; GCN-FLUSH-NEXT:    v_cndmask_b32_e32 v4, 1.0, v5, vcc
1566 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v2, v2, v6
1567 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v3, v3, v4
1568 ; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
1569 ; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v3, v3
1570 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v2
1571 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v1, v1, v3
1572 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, v6, v0
1573 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v1, v4, v1
1574 ; GCN-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1576 ; GFX10-IEEE-LABEL: v_fdiv_v2f32_ulp25:
1577 ; GFX10-IEEE:       ; %bb.0:
1578 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1579 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v2
1580 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v5, v3
1581 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2
1582 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v6, v0
1583 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3
1584 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
1585 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v5, v5
1586 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v7, v1
1587 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v0, v0
1588 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v1, v1
1589 ; GFX10-IEEE-NEXT:    v_sub_nc_u32_e32 v2, v6, v2
1590 ; GFX10-IEEE-NEXT:    v_sub_nc_u32_e32 v3, v7, v3
1591 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v4
1592 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v1, v1, v5
1593 ; GFX10-IEEE-NEXT:    v_ldexp_f32 v0, v0, v2
1594 ; GFX10-IEEE-NEXT:    v_ldexp_f32 v1, v1, v3
1595 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
1597 ; GFX10-FLUSH-LABEL: v_fdiv_v2f32_ulp25:
1598 ; GFX10-FLUSH:       ; %bb.0:
1599 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1600 ; GFX10-FLUSH-NEXT:    v_cmp_lt_f32_e64 s4, 0x6f800000, |v2|
1601 ; GFX10-FLUSH-NEXT:    v_cndmask_b32_e64 v4, 1.0, 0x2f800000, s4
1602 ; GFX10-FLUSH-NEXT:    v_cmp_lt_f32_e64 s4, 0x6f800000, |v3|
1603 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v2, v2, v4
1604 ; GFX10-FLUSH-NEXT:    v_cndmask_b32_e64 v5, 1.0, 0x2f800000, s4
1605 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
1606 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v3, v3, v5
1607 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v3
1608 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v2
1609 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v0, v4, v0
1610 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v1, v1, v3
1611 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v1, v5, v1
1612 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1614 ; GFX11-IEEE-LABEL: v_fdiv_v2f32_ulp25:
1615 ; GFX11-IEEE:       ; %bb.0:
1616 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1617 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v2
1618 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v5, v3
1619 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2
1620 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v6, v0
1621 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3
1622 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
1623 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v5, v5
1624 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v7, v1
1625 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v0, v0
1626 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v1, v1
1627 ; GFX11-IEEE-NEXT:    v_sub_nc_u32_e32 v2, v6, v2
1628 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1629 ; GFX11-IEEE-NEXT:    v_sub_nc_u32_e32 v3, v7, v3
1630 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
1631 ; GFX11-IEEE-NEXT:    v_dual_mul_f32 v0, v0, v4 :: v_dual_mul_f32 v1, v1, v5
1632 ; GFX11-IEEE-NEXT:    v_ldexp_f32 v0, v0, v2
1633 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1634 ; GFX11-IEEE-NEXT:    v_ldexp_f32 v1, v1, v3
1635 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
1637 ; GFX11-FLUSH-LABEL: v_fdiv_v2f32_ulp25:
1638 ; GFX11-FLUSH:       ; %bb.0:
1639 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1640 ; GFX11-FLUSH-NEXT:    v_cmp_lt_f32_e64 s0, 0x6f800000, |v2|
1641 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
1642 ; GFX11-FLUSH-NEXT:    v_cndmask_b32_e64 v4, 1.0, 0x2f800000, s0
1643 ; GFX11-FLUSH-NEXT:    v_cmp_lt_f32_e64 s0, 0x6f800000, |v3|
1644 ; GFX11-FLUSH-NEXT:    v_cndmask_b32_e64 v5, 1.0, 0x2f800000, s0
1645 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1646 ; GFX11-FLUSH-NEXT:    v_dual_mul_f32 v2, v2, v4 :: v_dual_mul_f32 v3, v3, v5
1647 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
1648 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1649 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v3
1650 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
1651 ; GFX11-FLUSH-NEXT:    v_dual_mul_f32 v0, v0, v2 :: v_dual_mul_f32 v1, v1, v3
1652 ; GFX11-FLUSH-NEXT:    v_dual_mul_f32 v0, v4, v0 :: v_dual_mul_f32 v1, v5, v1
1653 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1654   %fdiv = fdiv <2 x float> %a, %b, !fpmath !0
1655   ret <2 x float> %fdiv
1658 define <2 x float> @v_rcp_v2f32(<2 x float> %x) {
1659 ; GFX6-IEEE-FASTFMA-LABEL: v_rcp_v2f32:
1660 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
1661 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1662 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
1663 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
1664 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v0, 1.0
1665 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
1666 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
1667 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
1668 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
1669 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
1670 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
1671 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
1672 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
1673 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v4, v3
1674 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1675 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v1, 1.0
1676 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
1677 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
1678 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
1679 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
1680 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
1681 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
1682 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
1683 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
1684 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
1686 ; GFX6-FLUSH-FASTFMA-LABEL: v_rcp_v2f32:
1687 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
1688 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1689 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
1690 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
1691 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v0, 1.0
1692 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1693 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
1694 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
1695 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
1696 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
1697 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
1698 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
1699 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1700 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
1701 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
1702 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v4, v3
1703 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1704 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v1, 1.0
1705 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1706 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
1707 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
1708 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
1709 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
1710 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
1711 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
1712 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1713 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
1714 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
1715 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
1717 ; GFX6-IEEE-SLOWFMA-LABEL: v_rcp_v2f32:
1718 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
1719 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1720 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
1721 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
1722 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v0, 1.0
1723 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v5, s[4:5], 1.0, v1, 1.0
1724 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v6, v2
1725 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v7, v3
1726 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v8, -v2, v6, 1.0
1727 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, v8, v6, v6
1728 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v9, -v3, v7, 1.0
1729 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v7, v9, v7, v7
1730 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v8, v4, v6
1731 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v9, v5, v7
1732 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v10, -v2, v8, v4
1733 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v11, -v3, v9, v5
1734 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v8, v10, v6, v8
1735 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v9, v11, v7, v9
1736 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v8, v4
1737 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v3, -v3, v9, v5
1738 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v6, v8
1739 ; GFX6-IEEE-SLOWFMA-NEXT:    s_mov_b64 vcc, s[4:5]
1740 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v3, v3, v7, v9
1741 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1742 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v1, v3, v1, 1.0
1743 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
1745 ; GFX6-FLUSH-SLOWFMA-LABEL: v_rcp_v2f32:
1746 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
1747 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1748 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
1749 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, 1.0, v0, 1.0
1750 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
1751 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1752 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
1753 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
1754 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
1755 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
1756 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
1757 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
1758 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1759 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
1760 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
1761 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v1, 1.0
1762 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v5, v3
1763 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1764 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1765 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v3, v5, 1.0
1766 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, v2, v5, v5
1767 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v4, v2
1768 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v3, v5, v4
1769 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v2, v5
1770 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v3, -v3, v5, v4
1771 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1772 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v3, v2, v5
1773 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
1774 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
1776 ; GFX89-IEEE-LABEL: v_rcp_v2f32:
1777 ; GFX89-IEEE:       ; %bb.0:
1778 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1779 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
1780 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
1781 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v0, 1.0
1782 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v5, s[4:5], 1.0, v1, 1.0
1783 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v6, v2
1784 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v7, v3
1785 ; GFX89-IEEE-NEXT:    v_fma_f32 v8, -v2, v6, 1.0
1786 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, v8, v6, v6
1787 ; GFX89-IEEE-NEXT:    v_fma_f32 v9, -v3, v7, 1.0
1788 ; GFX89-IEEE-NEXT:    v_fma_f32 v7, v9, v7, v7
1789 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v8, v4, v6
1790 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v9, v5, v7
1791 ; GFX89-IEEE-NEXT:    v_fma_f32 v10, -v2, v8, v4
1792 ; GFX89-IEEE-NEXT:    v_fma_f32 v11, -v3, v9, v5
1793 ; GFX89-IEEE-NEXT:    v_fma_f32 v8, v10, v6, v8
1794 ; GFX89-IEEE-NEXT:    v_fma_f32 v9, v11, v7, v9
1795 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v2, v8, v4
1796 ; GFX89-IEEE-NEXT:    v_fma_f32 v3, -v3, v9, v5
1797 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v6, v8
1798 ; GFX89-IEEE-NEXT:    s_mov_b64 vcc, s[4:5]
1799 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v3, v3, v7, v9
1800 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1801 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v1, v3, v1, 1.0
1802 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
1804 ; GFX89-FLUSH-LABEL: v_rcp_v2f32:
1805 ; GFX89-FLUSH:       ; %bb.0:
1806 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1807 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
1808 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, vcc, 1.0, v0, 1.0
1809 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v2
1810 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1811 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
1812 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
1813 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v3, v4
1814 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v3
1815 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
1816 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v3
1817 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1818 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
1819 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
1820 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v1, 1.0
1821 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v5, v3
1822 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1823 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
1824 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v3, v5, 1.0
1825 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, v2, v5, v5
1826 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v2
1827 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v3, v5, v4
1828 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v2, v5
1829 ; GFX89-FLUSH-NEXT:    v_fma_f32 v3, -v3, v5, v4
1830 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
1831 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v3, v2, v5
1832 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
1833 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1835 ; GFX10-IEEE-LABEL: v_rcp_v2f32:
1836 ; GFX10-IEEE:       ; %bb.0:
1837 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1838 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v2, s4, v0, v0, 1.0
1839 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v3, s4, v1, v1, 1.0
1840 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v8, vcc_lo, 1.0, v0, 1.0
1841 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
1842 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v5, v3
1843 ; GFX10-IEEE-NEXT:    v_fma_f32 v6, -v2, v4, 1.0
1844 ; GFX10-IEEE-NEXT:    v_fma_f32 v7, -v3, v5, 1.0
1845 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v4, v6, v4
1846 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v6, s4, 1.0, v1, 1.0
1847 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v5, v7, v5
1848 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v7, v8, v4
1849 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v9, v6, v5
1850 ; GFX10-IEEE-NEXT:    v_fma_f32 v10, -v2, v7, v8
1851 ; GFX10-IEEE-NEXT:    v_fma_f32 v11, -v3, v9, v6
1852 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v7, v10, v4
1853 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v9, v11, v5
1854 ; GFX10-IEEE-NEXT:    v_fma_f32 v2, -v2, v7, v8
1855 ; GFX10-IEEE-NEXT:    v_fma_f32 v3, -v3, v9, v6
1856 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v7
1857 ; GFX10-IEEE-NEXT:    s_mov_b32 vcc_lo, s4
1858 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v3, v3, v5, v9
1859 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1860 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v1, v3, v1, 1.0
1861 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
1863 ; GFX10-FLUSH-LABEL: v_rcp_v2f32:
1864 ; GFX10-FLUSH:       ; %bb.0:
1865 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1866 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, s4, v0, v0, 1.0
1867 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, 1.0, v0, 1.0
1868 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
1869 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
1870 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
1871 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
1872 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
1873 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
1874 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
1875 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
1876 ; GFX10-FLUSH-NEXT:    s_denorm_mode 0
1877 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v4, s4, v1, v1, 1.0
1878 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
1879 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v4
1880 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1881 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, vcc_lo, 1.0, v1, 1.0
1882 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
1883 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v4, v3, 1.0
1884 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
1885 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v2, v3
1886 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v4, v5, v2
1887 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
1888 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v4, v5, v2
1889 ; GFX10-FLUSH-NEXT:    s_denorm_mode 0
1890 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
1891 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
1892 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1894 ; GFX11-IEEE-LABEL: v_rcp_v2f32:
1895 ; GFX11-IEEE:       ; %bb.0:
1896 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1897 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v2, null, v0, v0, 1.0
1898 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v3, null, v1, v1, 1.0
1899 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v8, vcc_lo, 1.0, v0, 1.0
1900 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1901 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
1902 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v5, v3
1903 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
1904 ; GFX11-IEEE-NEXT:    v_fma_f32 v6, -v2, v4, 1.0
1905 ; GFX11-IEEE-NEXT:    v_fma_f32 v7, -v3, v5, 1.0
1906 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1907 ; GFX11-IEEE-NEXT:    v_dual_fmac_f32 v4, v6, v4 :: v_dual_fmac_f32 v5, v7, v5
1908 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v6, s0, 1.0, v1, 1.0
1909 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v7, v8, v4
1910 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1911 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v9, v6, v5
1912 ; GFX11-IEEE-NEXT:    v_fma_f32 v10, -v2, v7, v8
1913 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1914 ; GFX11-IEEE-NEXT:    v_fma_f32 v11, -v3, v9, v6
1915 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v7, v10, v4
1916 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1917 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v9, v11, v5
1918 ; GFX11-IEEE-NEXT:    v_fma_f32 v2, -v2, v7, v8
1919 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1920 ; GFX11-IEEE-NEXT:    v_fma_f32 v3, -v3, v9, v6
1921 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v7
1922 ; GFX11-IEEE-NEXT:    s_mov_b32 vcc_lo, s0
1923 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1924 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v3, v3, v5, v9
1925 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1926 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1927 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v1, v3, v1, 1.0
1928 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
1930 ; GFX11-FLUSH-LABEL: v_rcp_v2f32:
1931 ; GFX11-FLUSH:       ; %bb.0:
1932 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1933 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, null, v0, v0, 1.0
1934 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, 1.0, v0, 1.0
1935 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
1936 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
1937 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
1938 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
1939 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
1940 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
1941 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1942 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
1943 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
1944 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1945 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
1946 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
1947 ; GFX11-FLUSH-NEXT:    s_denorm_mode 0
1948 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v4, null, v1, v1, 1.0
1949 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1950 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
1951 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v4
1952 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)
1953 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1954 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, vcc_lo, 1.0, v1, 1.0
1955 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
1956 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
1957 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v4, v3, 1.0
1958 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
1959 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1960 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v2, v3
1961 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v4, v5, v2
1962 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1963 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
1964 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v4, v5, v2
1965 ; GFX11-FLUSH-NEXT:    s_denorm_mode 0
1966 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1967 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
1968 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
1969 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
1970   %fdiv = fdiv <2 x float> <float 1.0, float 1.0>, %x
1971   ret <2 x float> %fdiv
1974 define <2 x float> @v_rcp_v2f32_arcp(<2 x float> %x) {
1975 ; GFX6-IEEE-FASTFMA-LABEL: v_rcp_v2f32_arcp:
1976 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
1977 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1978 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
1979 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
1980 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v0, 1.0
1981 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
1982 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
1983 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
1984 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
1985 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
1986 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
1987 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
1988 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
1989 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v4, v3
1990 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
1991 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v1, 1.0
1992 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
1993 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
1994 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
1995 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
1996 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
1997 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
1998 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
1999 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
2000 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
2002 ; GFX6-FLUSH-FASTFMA-LABEL: v_rcp_v2f32_arcp:
2003 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
2004 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2005 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
2006 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
2007 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v0, 1.0
2008 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2009 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
2010 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
2011 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
2012 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
2013 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
2014 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
2015 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
2016 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2017 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
2018 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v4, v3
2019 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
2020 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, vcc, 1.0, v1, 1.0
2021 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2022 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
2023 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
2024 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
2025 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
2026 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
2027 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
2028 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
2029 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
2030 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
2031 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
2033 ; GFX6-IEEE-SLOWFMA-LABEL: v_rcp_v2f32_arcp:
2034 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
2035 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2036 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
2037 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
2038 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v0, 1.0
2039 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v5, s[4:5], 1.0, v1, 1.0
2040 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v6, v2
2041 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v7, v3
2042 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v8, -v2, v6, 1.0
2043 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, v8, v6, v6
2044 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v9, -v3, v7, 1.0
2045 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v7, v9, v7, v7
2046 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v8, v4, v6
2047 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v9, v5, v7
2048 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v10, -v2, v8, v4
2049 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v11, -v3, v9, v5
2050 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v8, v10, v6, v8
2051 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v9, v11, v7, v9
2052 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v8, v4
2053 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v3, -v3, v9, v5
2054 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v6, v8
2055 ; GFX6-IEEE-SLOWFMA-NEXT:    s_mov_b64 vcc, s[4:5]
2056 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v3, v3, v7, v9
2057 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
2058 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v1, v3, v1, 1.0
2059 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
2061 ; GFX6-FLUSH-SLOWFMA-LABEL: v_rcp_v2f32_arcp:
2062 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
2063 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2064 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
2065 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, 1.0, v0, 1.0
2066 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
2067 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2068 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
2069 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
2070 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
2071 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
2072 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
2073 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
2074 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
2075 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
2076 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
2077 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v1, 1.0
2078 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v5, v3
2079 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
2080 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2081 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v3, v5, 1.0
2082 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, v2, v5, v5
2083 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v4, v2
2084 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v3, v5, v4
2085 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v2, v5
2086 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v3, -v3, v5, v4
2087 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
2088 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v3, v2, v5
2089 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
2090 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
2092 ; GFX89-IEEE-LABEL: v_rcp_v2f32_arcp:
2093 ; GFX89-IEEE:       ; %bb.0:
2094 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2095 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
2096 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
2097 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v0, 1.0
2098 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v5, s[4:5], 1.0, v1, 1.0
2099 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v6, v2
2100 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v7, v3
2101 ; GFX89-IEEE-NEXT:    v_fma_f32 v8, -v2, v6, 1.0
2102 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, v8, v6, v6
2103 ; GFX89-IEEE-NEXT:    v_fma_f32 v9, -v3, v7, 1.0
2104 ; GFX89-IEEE-NEXT:    v_fma_f32 v7, v9, v7, v7
2105 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v8, v4, v6
2106 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v9, v5, v7
2107 ; GFX89-IEEE-NEXT:    v_fma_f32 v10, -v2, v8, v4
2108 ; GFX89-IEEE-NEXT:    v_fma_f32 v11, -v3, v9, v5
2109 ; GFX89-IEEE-NEXT:    v_fma_f32 v8, v10, v6, v8
2110 ; GFX89-IEEE-NEXT:    v_fma_f32 v9, v11, v7, v9
2111 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v2, v8, v4
2112 ; GFX89-IEEE-NEXT:    v_fma_f32 v3, -v3, v9, v5
2113 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v6, v8
2114 ; GFX89-IEEE-NEXT:    s_mov_b64 vcc, s[4:5]
2115 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v3, v3, v7, v9
2116 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
2117 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v1, v3, v1, 1.0
2118 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
2120 ; GFX89-FLUSH-LABEL: v_rcp_v2f32_arcp:
2121 ; GFX89-FLUSH:       ; %bb.0:
2122 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2123 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, 1.0
2124 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, vcc, 1.0, v0, 1.0
2125 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v2
2126 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2127 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
2128 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
2129 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v3, v4
2130 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v3
2131 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
2132 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v3
2133 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
2134 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, 1.0
2135 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
2136 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v4, vcc, 1.0, v1, 1.0
2137 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v5, v3
2138 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
2139 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2140 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v3, v5, 1.0
2141 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, v2, v5, v5
2142 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v2
2143 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v3, v5, v4
2144 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v2, v5
2145 ; GFX89-FLUSH-NEXT:    v_fma_f32 v3, -v3, v5, v4
2146 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0
2147 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v3, v2, v5
2148 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
2149 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2151 ; GFX10-IEEE-LABEL: v_rcp_v2f32_arcp:
2152 ; GFX10-IEEE:       ; %bb.0:
2153 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2154 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v2, s4, v0, v0, 1.0
2155 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v3, s4, v1, v1, 1.0
2156 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v8, vcc_lo, 1.0, v0, 1.0
2157 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
2158 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v5, v3
2159 ; GFX10-IEEE-NEXT:    v_fma_f32 v6, -v2, v4, 1.0
2160 ; GFX10-IEEE-NEXT:    v_fma_f32 v7, -v3, v5, 1.0
2161 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v4, v6, v4
2162 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v6, s4, 1.0, v1, 1.0
2163 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v5, v7, v5
2164 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v7, v8, v4
2165 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v9, v6, v5
2166 ; GFX10-IEEE-NEXT:    v_fma_f32 v10, -v2, v7, v8
2167 ; GFX10-IEEE-NEXT:    v_fma_f32 v11, -v3, v9, v6
2168 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v7, v10, v4
2169 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v9, v11, v5
2170 ; GFX10-IEEE-NEXT:    v_fma_f32 v2, -v2, v7, v8
2171 ; GFX10-IEEE-NEXT:    v_fma_f32 v3, -v3, v9, v6
2172 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v7
2173 ; GFX10-IEEE-NEXT:    s_mov_b32 vcc_lo, s4
2174 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v3, v3, v5, v9
2175 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
2176 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v1, v3, v1, 1.0
2177 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
2179 ; GFX10-FLUSH-LABEL: v_rcp_v2f32_arcp:
2180 ; GFX10-FLUSH:       ; %bb.0:
2181 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2182 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, s4, v0, v0, 1.0
2183 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, 1.0, v0, 1.0
2184 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
2185 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
2186 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
2187 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
2188 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
2189 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
2190 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
2191 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
2192 ; GFX10-FLUSH-NEXT:    s_denorm_mode 0
2193 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v4, s4, v1, v1, 1.0
2194 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2195 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v4
2196 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
2197 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, vcc_lo, 1.0, v1, 1.0
2198 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
2199 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v4, v3, 1.0
2200 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
2201 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v2, v3
2202 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v4, v5, v2
2203 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
2204 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v4, v5, v2
2205 ; GFX10-FLUSH-NEXT:    s_denorm_mode 0
2206 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2207 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
2208 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2210 ; GFX11-IEEE-LABEL: v_rcp_v2f32_arcp:
2211 ; GFX11-IEEE:       ; %bb.0:
2212 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2213 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v2, null, v0, v0, 1.0
2214 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v3, null, v1, v1, 1.0
2215 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v8, vcc_lo, 1.0, v0, 1.0
2216 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
2217 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
2218 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v5, v3
2219 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
2220 ; GFX11-IEEE-NEXT:    v_fma_f32 v6, -v2, v4, 1.0
2221 ; GFX11-IEEE-NEXT:    v_fma_f32 v7, -v3, v5, 1.0
2222 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2223 ; GFX11-IEEE-NEXT:    v_dual_fmac_f32 v4, v6, v4 :: v_dual_fmac_f32 v5, v7, v5
2224 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v6, s0, 1.0, v1, 1.0
2225 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v7, v8, v4
2226 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2227 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v9, v6, v5
2228 ; GFX11-IEEE-NEXT:    v_fma_f32 v10, -v2, v7, v8
2229 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2230 ; GFX11-IEEE-NEXT:    v_fma_f32 v11, -v3, v9, v6
2231 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v7, v10, v4
2232 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2233 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v9, v11, v5
2234 ; GFX11-IEEE-NEXT:    v_fma_f32 v2, -v2, v7, v8
2235 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2236 ; GFX11-IEEE-NEXT:    v_fma_f32 v3, -v3, v9, v6
2237 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v7
2238 ; GFX11-IEEE-NEXT:    s_mov_b32 vcc_lo, s0
2239 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2240 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v3, v3, v5, v9
2241 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
2242 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2)
2243 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v1, v3, v1, 1.0
2244 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
2246 ; GFX11-FLUSH-LABEL: v_rcp_v2f32_arcp:
2247 ; GFX11-FLUSH:       ; %bb.0:
2248 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2249 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, null, v0, v0, 1.0
2250 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, 1.0, v0, 1.0
2251 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
2252 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
2253 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
2254 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
2255 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
2256 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
2257 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2258 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
2259 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
2260 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2261 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
2262 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
2263 ; GFX11-FLUSH-NEXT:    s_denorm_mode 0
2264 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v4, null, v1, v1, 1.0
2265 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2266 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2267 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v4
2268 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)
2269 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v0, 1.0
2270 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, vcc_lo, 1.0, v1, 1.0
2271 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
2272 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
2273 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v4, v3, 1.0
2274 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
2275 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2276 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v2, v3
2277 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v4, v5, v2
2278 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2279 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
2280 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v4, v5, v2
2281 ; GFX11-FLUSH-NEXT:    s_denorm_mode 0
2282 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2283 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2284 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v1, v2, v1, 1.0
2285 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2286   %fdiv = fdiv arcp <2 x float> <float 1.0, float 1.0>, %x
2287   ret <2 x float> %fdiv
2290 define <2 x float> @v_rcp_v2f32_arcp_afn(<2 x float> %x) {
2291 ; GCN-LABEL: v_rcp_v2f32_arcp_afn:
2292 ; GCN:       ; %bb.0:
2293 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2294 ; GCN-NEXT:    v_rcp_f32_e32 v0, v0
2295 ; GCN-NEXT:    v_rcp_f32_e32 v1, v1
2296 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2298 ; GFX10-LABEL: v_rcp_v2f32_arcp_afn:
2299 ; GFX10:       ; %bb.0:
2300 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2301 ; GFX10-NEXT:    v_rcp_f32_e32 v0, v0
2302 ; GFX10-NEXT:    v_rcp_f32_e32 v1, v1
2303 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2305 ; GFX11-LABEL: v_rcp_v2f32_arcp_afn:
2306 ; GFX11:       ; %bb.0:
2307 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2308 ; GFX11-NEXT:    v_rcp_f32_e32 v0, v0
2309 ; GFX11-NEXT:    v_rcp_f32_e32 v1, v1
2310 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2311   %fdiv = fdiv arcp afn <2 x float> <float 1.0, float 1.0>, %x
2312   ret <2 x float> %fdiv
2315 define <2 x float> @v_rcp_v2f32_ulp25(<2 x float> %x) {
2316 ; GFX6-IEEE-LABEL: v_rcp_v2f32_ulp25:
2317 ; GFX6-IEEE:       ; %bb.0:
2318 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2319 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
2320 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2321 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
2322 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
2323 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2324 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2325 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, 0, v0
2326 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2327 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2328 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
2329 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2330 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2331 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2332 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v1, vcc, 0, v1
2333 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v1, v2, v1
2334 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
2336 ; GCN-FLUSH-LABEL: v_rcp_v2f32_ulp25:
2337 ; GCN-FLUSH:       ; %bb.0:
2338 ; GCN-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2339 ; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v0, v0
2340 ; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1
2341 ; GCN-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2343 ; GFX10-IEEE-LABEL: v_rcp_v2f32_ulp25:
2344 ; GFX10-IEEE:       ; %bb.0:
2345 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2346 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2347 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v1
2348 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2349 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2350 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2351 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v3, v3
2352 ; GFX10-IEEE-NEXT:    v_sub_nc_u32_e32 v0, 0, v0
2353 ; GFX10-IEEE-NEXT:    v_sub_nc_u32_e32 v1, 0, v1
2354 ; GFX10-IEEE-NEXT:    v_ldexp_f32 v0, v2, v0
2355 ; GFX10-IEEE-NEXT:    v_ldexp_f32 v1, v3, v1
2356 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
2358 ; GFX10-FLUSH-LABEL: v_rcp_v2f32_ulp25:
2359 ; GFX10-FLUSH:       ; %bb.0:
2360 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2361 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v0, v0
2362 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1
2363 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2365 ; GFX11-IEEE-LABEL: v_rcp_v2f32_ulp25:
2366 ; GFX11-IEEE:       ; %bb.0:
2367 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2368 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v0
2369 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v1
2370 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2371 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2372 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
2373 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2374 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v3, v3
2375 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2376 ; GFX11-IEEE-NEXT:    v_sub_nc_u32_e32 v0, 0, v0
2377 ; GFX11-IEEE-NEXT:    v_sub_nc_u32_e32 v1, 0, v1
2378 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
2379 ; GFX11-IEEE-NEXT:    v_ldexp_f32 v0, v2, v0
2380 ; GFX11-IEEE-NEXT:    v_ldexp_f32 v1, v3, v1
2381 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
2383 ; GFX11-FLUSH-LABEL: v_rcp_v2f32_ulp25:
2384 ; GFX11-FLUSH:       ; %bb.0:
2385 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2386 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v0, v0
2387 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1
2388 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2389   %fdiv = fdiv <2 x float> <float 1.0, float 1.0>, %x, !fpmath !0
2390   ret <2 x float> %fdiv
2393 define <2 x float> @v_fdiv_v2f32_afn_ulp25(<2 x float> %a, <2 x float> %b) {
2394 ; GCN-LABEL: v_fdiv_v2f32_afn_ulp25:
2395 ; GCN:       ; %bb.0:
2396 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2397 ; GCN-NEXT:    v_rcp_f32_e32 v2, v2
2398 ; GCN-NEXT:    v_rcp_f32_e32 v3, v3
2399 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v2
2400 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v3
2401 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2403 ; GFX10-LABEL: v_fdiv_v2f32_afn_ulp25:
2404 ; GFX10:       ; %bb.0:
2405 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2406 ; GFX10-NEXT:    v_rcp_f32_e32 v2, v2
2407 ; GFX10-NEXT:    v_rcp_f32_e32 v3, v3
2408 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v2
2409 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v3
2410 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2412 ; GFX11-LABEL: v_fdiv_v2f32_afn_ulp25:
2413 ; GFX11:       ; %bb.0:
2414 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2415 ; GFX11-NEXT:    v_rcp_f32_e32 v2, v2
2416 ; GFX11-NEXT:    v_rcp_f32_e32 v3, v3
2417 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
2418 ; GFX11-NEXT:    v_dual_mul_f32 v0, v0, v2 :: v_dual_mul_f32 v1, v1, v3
2419 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2420   %fdiv = fdiv afn <2 x float> %a, %b, !fpmath !0
2421   ret <2 x float> %fdiv
2424 define <2 x float> @v_fdiv_v2f32_arcp_ulp25(<2 x float> %a, <2 x float> %b) {
2425 ; GFX6-IEEE-LABEL: v_fdiv_v2f32_arcp_ulp25:
2426 ; GFX6-IEEE:       ; %bb.0:
2427 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2428 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v5, 0x7f800000
2429 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v2
2430 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v2|, v5
2431 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v4, v2, v4, vcc
2432 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2433 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2
2434 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v2, vcc, 0, v2
2435 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v2, v4, v2
2436 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v2
2437 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v3
2438 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v3|, v5
2439 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
2440 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2441 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3
2442 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v3, vcc, 0, v3
2443 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v2, v2, v3
2444 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v1, v1, v2
2445 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
2447 ; GCN-FLUSH-LABEL: v_fdiv_v2f32_arcp_ulp25:
2448 ; GCN-FLUSH:       ; %bb.0:
2449 ; GCN-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2450 ; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
2451 ; GCN-FLUSH-NEXT:    v_rcp_f32_e32 v3, v3
2452 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v2
2453 ; GCN-FLUSH-NEXT:    v_mul_f32_e32 v1, v1, v3
2454 ; GCN-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2456 ; GFX10-IEEE-LABEL: v_fdiv_v2f32_arcp_ulp25:
2457 ; GFX10-IEEE:       ; %bb.0:
2458 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2459 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v2
2460 ; GFX10-IEEE-NEXT:    v_frexp_mant_f32_e32 v5, v3
2461 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2
2462 ; GFX10-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3
2463 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2464 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v5, v5
2465 ; GFX10-IEEE-NEXT:    v_sub_nc_u32_e32 v2, 0, v2
2466 ; GFX10-IEEE-NEXT:    v_sub_nc_u32_e32 v3, 0, v3
2467 ; GFX10-IEEE-NEXT:    v_ldexp_f32 v2, v4, v2
2468 ; GFX10-IEEE-NEXT:    v_ldexp_f32 v3, v5, v3
2469 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v0, v0, v2
2470 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v1, v1, v3
2471 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
2473 ; GFX10-FLUSH-LABEL: v_fdiv_v2f32_arcp_ulp25:
2474 ; GFX10-FLUSH:       ; %bb.0:
2475 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2476 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
2477 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v3
2478 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v0, v0, v2
2479 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v1, v1, v3
2480 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2482 ; GFX11-IEEE-LABEL: v_fdiv_v2f32_arcp_ulp25:
2483 ; GFX11-IEEE:       ; %bb.0:
2484 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2485 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v2
2486 ; GFX11-IEEE-NEXT:    v_frexp_mant_f32_e32 v5, v3
2487 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2
2488 ; GFX11-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3
2489 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
2490 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v4, v4
2491 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v5, v5
2492 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2493 ; GFX11-IEEE-NEXT:    v_sub_nc_u32_e32 v2, 0, v2
2494 ; GFX11-IEEE-NEXT:    v_sub_nc_u32_e32 v3, 0, v3
2495 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
2496 ; GFX11-IEEE-NEXT:    v_ldexp_f32 v2, v4, v2
2497 ; GFX11-IEEE-NEXT:    v_ldexp_f32 v3, v5, v3
2498 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2499 ; GFX11-IEEE-NEXT:    v_dual_mul_f32 v0, v0, v2 :: v_dual_mul_f32 v1, v1, v3
2500 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
2502 ; GFX11-FLUSH-LABEL: v_fdiv_v2f32_arcp_ulp25:
2503 ; GFX11-FLUSH:       ; %bb.0:
2504 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2505 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
2506 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v3
2507 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
2508 ; GFX11-FLUSH-NEXT:    v_dual_mul_f32 v0, v0, v2 :: v_dual_mul_f32 v1, v1, v3
2509 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2510   %fdiv = fdiv arcp <2 x float> %a, %b, !fpmath !0
2511   ret <2 x float> %fdiv
2514 define <2 x float> @v_fdiv_v2f32_arcp_afn_ulp25(<2 x float> %a, <2 x float> %b) {
2515 ; GCN-LABEL: v_fdiv_v2f32_arcp_afn_ulp25:
2516 ; GCN:       ; %bb.0:
2517 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2518 ; GCN-NEXT:    v_rcp_f32_e32 v2, v2
2519 ; GCN-NEXT:    v_rcp_f32_e32 v3, v3
2520 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v2
2521 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v3
2522 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2524 ; GFX10-LABEL: v_fdiv_v2f32_arcp_afn_ulp25:
2525 ; GFX10:       ; %bb.0:
2526 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2527 ; GFX10-NEXT:    v_rcp_f32_e32 v2, v2
2528 ; GFX10-NEXT:    v_rcp_f32_e32 v3, v3
2529 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v2
2530 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v3
2531 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2533 ; GFX11-LABEL: v_fdiv_v2f32_arcp_afn_ulp25:
2534 ; GFX11:       ; %bb.0:
2535 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2536 ; GFX11-NEXT:    v_rcp_f32_e32 v2, v2
2537 ; GFX11-NEXT:    v_rcp_f32_e32 v3, v3
2538 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
2539 ; GFX11-NEXT:    v_dual_mul_f32 v0, v0, v2 :: v_dual_mul_f32 v1, v1, v3
2540 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2541   %fdiv = fdiv afn arcp <2 x float> %a, %b, !fpmath !0
2542   ret <2 x float> %fdiv
2546 define float @v_fdiv_f32_dynamic__nnan_ninf(float %x, float %y, float %z) #0 {
2547 ; GFX6-FASTFMA-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2548 ; GFX6-FASTFMA:       ; %bb.0:
2549 ; GFX6-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2550 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
2551 ; GFX6-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
2552 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
2553 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
2554 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
2555 ; GFX6-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
2556 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
2557 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
2558 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
2559 ; GFX6-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2560 ; GFX6-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2561 ; GFX6-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
2563 ; GFX6-SLOWFMA-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2564 ; GFX6-SLOWFMA:       ; %bb.0:
2565 ; GFX6-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2566 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
2567 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
2568 ; GFX6-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
2569 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
2570 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
2571 ; GFX6-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
2572 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
2573 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
2574 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
2575 ; GFX6-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
2576 ; GFX6-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2577 ; GFX6-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
2579 ; GFX7-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2580 ; GFX7:       ; %bb.0:
2581 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2582 ; GFX7-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
2583 ; GFX7-NEXT:    v_rcp_f32_e32 v3, v2
2584 ; GFX7-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
2585 ; GFX7-NEXT:    v_fma_f32 v3, v4, v3, v3
2586 ; GFX7-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
2587 ; GFX7-NEXT:    v_mul_f32_e32 v5, v4, v3
2588 ; GFX7-NEXT:    v_fma_f32 v6, -v2, v5, v4
2589 ; GFX7-NEXT:    v_fma_f32 v5, v6, v3, v5
2590 ; GFX7-NEXT:    v_fma_f32 v2, -v2, v5, v4
2591 ; GFX7-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2592 ; GFX7-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2593 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2595 ; GFX8-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2596 ; GFX8:       ; %bb.0:
2597 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2598 ; GFX8-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
2599 ; GFX8-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
2600 ; GFX8-NEXT:    v_rcp_f32_e32 v4, v2
2601 ; GFX8-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
2602 ; GFX8-NEXT:    v_fma_f32 v4, v5, v4, v4
2603 ; GFX8-NEXT:    v_mul_f32_e32 v5, v3, v4
2604 ; GFX8-NEXT:    v_fma_f32 v6, -v2, v5, v3
2605 ; GFX8-NEXT:    v_fma_f32 v5, v6, v4, v5
2606 ; GFX8-NEXT:    v_fma_f32 v2, -v2, v5, v3
2607 ; GFX8-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
2608 ; GFX8-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2609 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2611 ; GFX6-IEEE-FASTFMA-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2612 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
2613 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2614 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
2615 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
2616 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
2617 ; GFX6-IEEE-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
2618 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2619 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
2620 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
2621 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
2622 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
2623 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
2624 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
2625 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
2626 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2627 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2628 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
2630 ; GFX6-FLUSH-FASTFMA-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2631 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
2632 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2633 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
2634 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
2635 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
2636 ; GFX6-FLUSH-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
2637 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2638 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
2639 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
2640 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
2641 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
2642 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
2643 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
2644 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
2645 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2646 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2647 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
2649 ; GFX6-IEEE-SLOWFMA-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2650 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
2651 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2652 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
2653 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
2654 ; GFX6-IEEE-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
2655 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
2656 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2657 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
2658 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
2659 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
2660 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
2661 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
2662 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
2663 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
2664 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
2665 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2666 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
2668 ; GFX6-FLUSH-SLOWFMA-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2669 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
2670 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2671 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
2672 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
2673 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
2674 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
2675 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2676 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
2677 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
2678 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
2679 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
2680 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
2681 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
2682 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
2683 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
2684 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2685 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
2687 ; GFX89-IEEE-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2688 ; GFX89-IEEE:       ; %bb.0:
2689 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2690 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
2691 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
2692 ; GFX89-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
2693 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
2694 ; GFX89-IEEE-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2695 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
2696 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v4, v4
2697 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v5, v3, v4
2698 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v3
2699 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, v6, v4, v5
2700 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v3
2701 ; GFX89-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
2702 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
2703 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2704 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
2706 ; GFX89-FLUSH-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2707 ; GFX89-FLUSH:       ; %bb.0:
2708 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2709 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
2710 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
2711 ; GFX89-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
2712 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v2
2713 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
2714 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
2715 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
2716 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v3, v4
2717 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v3
2718 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
2719 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v3
2720 ; GFX89-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
2721 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
2722 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2723 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2725 ; GFX10-IEEE-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2726 ; GFX10-IEEE:       ; %bb.0:
2727 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2728 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
2729 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
2730 ; GFX10-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
2731 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v3, v2
2732 ; GFX10-IEEE-NEXT:    s_denorm_mode 15
2733 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
2734 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v3
2735 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v5, v4, v3
2736 ; GFX10-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v4
2737 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v3
2738 ; GFX10-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v4
2739 ; GFX10-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
2740 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2741 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2742 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
2744 ; GFX10-FLUSH-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2745 ; GFX10-FLUSH:       ; %bb.0:
2746 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2747 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
2748 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
2749 ; GFX10-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
2750 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
2751 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
2752 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
2753 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
2754 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
2755 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
2756 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
2757 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
2758 ; GFX10-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
2759 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2760 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2761 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2763 ; GFX11-IEEE-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2764 ; GFX11-IEEE:       ; %bb.0:
2765 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2766 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
2767 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
2768 ; GFX11-IEEE-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
2769 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
2770 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v3, v2
2771 ; GFX11-IEEE-NEXT:    s_denorm_mode 15
2772 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
2773 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
2774 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v3
2775 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2776 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v5, v4, v3
2777 ; GFX11-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v4
2778 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2779 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v3
2780 ; GFX11-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v4
2781 ; GFX11-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
2782 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2783 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2784 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2785 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
2787 ; GFX11-FLUSH-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2788 ; GFX11-FLUSH:       ; %bb.0:
2789 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2790 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
2791 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
2792 ; GFX11-FLUSH-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
2793 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
2794 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
2795 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
2796 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
2797 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
2798 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
2799 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2800 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
2801 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
2802 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2803 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
2804 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
2805 ; GFX11-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
2806 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2807 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
2808 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
2809 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2810 ; EG-LABEL: v_fdiv_f32_dynamic__nnan_ninf:
2811 ; EG:       ; %bb.0:
2812 ; EG-NEXT:    CF_END
2813 ; EG-NEXT:    PAD
2814   %div = fdiv nnan ninf float %x, %y
2815   ret float %div
2818 define float @v_fdiv_f32_dynamic_25ulp__nnan_ninf(float %x, float %y, float %z) #0 {
2819 ; GFX6-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf:
2820 ; GFX6:       ; %bb.0:
2821 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2822 ; GFX6-NEXT:    s_mov_b32 s4, 0x7f800000
2823 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v2, v1
2824 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2825 ; GFX6-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2826 ; GFX6-NEXT:    v_rcp_f32_e32 v2, v2
2827 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v3, v0
2828 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2829 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2830 ; GFX6-NEXT:    v_cndmask_b32_e32 v3, v0, v3, vcc
2831 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2832 ; GFX6-NEXT:    v_mul_f32_e32 v2, v3, v2
2833 ; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
2834 ; GFX6-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2835 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
2837 ; GFX7-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf:
2838 ; GFX7:       ; %bb.0:
2839 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2840 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v2, v1
2841 ; GFX7-NEXT:    v_rcp_f32_e32 v2, v2
2842 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2843 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0
2844 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v0, v0
2845 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v2
2846 ; GFX7-NEXT:    v_sub_i32_e32 v1, vcc, v3, v1
2847 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2848 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2850 ; GFX8-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf:
2851 ; GFX8:       ; %bb.0:
2852 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2853 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v2, v1
2854 ; GFX8-NEXT:    v_rcp_f32_e32 v2, v2
2855 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2856 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0
2857 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v0, v0
2858 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v2
2859 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, v3, v1
2860 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v1
2861 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2863 ; GFX6-IEEE-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf:
2864 ; GFX6-IEEE:       ; %bb.0:
2865 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2866 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
2867 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
2868 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
2869 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2870 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
2871 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
2872 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
2873 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2874 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v3, v0, v4, vcc
2875 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2876 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
2877 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
2878 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2879 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
2881 ; GFX6-FLUSH-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf:
2882 ; GFX6-FLUSH:       ; %bb.0:
2883 ; GFX6-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2884 ; GFX6-FLUSH-NEXT:    v_mov_b32_e32 v3, 0x7f800000
2885 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v2, v1
2886 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
2887 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
2888 ; GFX6-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
2889 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v4, v0
2890 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
2891 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2892 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v3, v0, v4, vcc
2893 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2894 ; GFX6-FLUSH-NEXT:    v_mul_f32_e32 v2, v3, v2
2895 ; GFX6-FLUSH-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
2896 ; GFX6-FLUSH-NEXT:    v_ldexp_f32_e32 v0, v2, v0
2897 ; GFX6-FLUSH-NEXT:    s_setpc_b64 s[30:31]
2899 ; GFX10-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf:
2900 ; GFX10:       ; %bb.0:
2901 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2902 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v2, v1
2903 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2904 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v3, v0
2905 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2906 ; GFX10-NEXT:    v_rcp_f32_e32 v2, v2
2907 ; GFX10-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
2908 ; GFX10-NEXT:    v_mul_f32_e32 v2, v3, v2
2909 ; GFX10-NEXT:    v_ldexp_f32 v0, v2, v0
2910 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2912 ; GFX11-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf:
2913 ; GFX11:       ; %bb.0:
2914 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2915 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v2, v1
2916 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2917 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v3, v0
2918 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2919 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
2920 ; GFX11-NEXT:    v_rcp_f32_e32 v2, v2
2921 ; GFX11-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
2922 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
2923 ; GFX11-NEXT:    v_mul_f32_e32 v2, v3, v2
2924 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2925 ; GFX11-NEXT:    v_ldexp_f32 v0, v2, v0
2926 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2927 ; EG-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf:
2928 ; EG:       ; %bb.0:
2929 ; EG-NEXT:    CF_END
2930 ; EG-NEXT:    PAD
2931   %div = fdiv nnan ninf float %x, %y, !fpmath !0
2932   ret float %div
2935 define float @v_fdiv_f32_dynamic_25ulp__nnan_ninf_contractable_user(float %x, float %y, float %z) #0 {
2936 ; GFX6-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf_contractable_user:
2937 ; GFX6:       ; %bb.0:
2938 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2939 ; GFX6-NEXT:    s_mov_b32 s4, 0x7f800000
2940 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v3, v1
2941 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
2942 ; GFX6-NEXT:    v_cndmask_b32_e32 v3, v1, v3, vcc
2943 ; GFX6-NEXT:    v_rcp_f32_e32 v3, v3
2944 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v4, v0
2945 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2946 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2947 ; GFX6-NEXT:    v_cndmask_b32_e32 v4, v0, v4, vcc
2948 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2949 ; GFX6-NEXT:    v_mul_f32_e32 v3, v4, v3
2950 ; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
2951 ; GFX6-NEXT:    v_ldexp_f32_e32 v0, v3, v0
2952 ; GFX6-NEXT:    v_add_f32_e32 v0, v0, v2
2953 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
2955 ; GFX7-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf_contractable_user:
2956 ; GFX7:       ; %bb.0:
2957 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2958 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v3, v1
2959 ; GFX7-NEXT:    v_rcp_f32_e32 v3, v3
2960 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2961 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v4, v0
2962 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v0, v0
2963 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v3
2964 ; GFX7-NEXT:    v_sub_i32_e32 v1, vcc, v4, v1
2965 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v1
2966 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v2
2967 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2969 ; GFX8-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf_contractable_user:
2970 ; GFX8:       ; %bb.0:
2971 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2972 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v3, v1
2973 ; GFX8-NEXT:    v_rcp_f32_e32 v3, v3
2974 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2975 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v4, v0
2976 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v0, v0
2977 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v3
2978 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, v4, v1
2979 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v1
2980 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
2981 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2983 ; GFX6-IEEE-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf_contractable_user:
2984 ; GFX6-IEEE:       ; %bb.0:
2985 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2986 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v4, 0x7f800000
2987 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v1
2988 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v4
2989 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v3, v1, v3, vcc
2990 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v3, v3
2991 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v5, v0
2992 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v4
2993 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
2994 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v4, v0, v5, vcc
2995 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
2996 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v3, v4, v3
2997 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
2998 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v3, v0
2999 ; GFX6-IEEE-NEXT:    v_add_f32_e32 v0, v0, v2
3000 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
3002 ; GFX6-FLUSH-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf_contractable_user:
3003 ; GFX6-FLUSH:       ; %bb.0:
3004 ; GFX6-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3005 ; GFX6-FLUSH-NEXT:    v_mov_b32_e32 v4, 0x7f800000
3006 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v3, v1
3007 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v4
3008 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v3, v1, v3, vcc
3009 ; GFX6-FLUSH-NEXT:    v_rcp_f32_e32 v3, v3
3010 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v5, v0
3011 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v4
3012 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
3013 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v4, v0, v5, vcc
3014 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
3015 ; GFX6-FLUSH-NEXT:    v_mul_f32_e32 v3, v4, v3
3016 ; GFX6-FLUSH-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
3017 ; GFX6-FLUSH-NEXT:    v_ldexp_f32_e32 v0, v3, v0
3018 ; GFX6-FLUSH-NEXT:    v_add_f32_e32 v0, v0, v2
3019 ; GFX6-FLUSH-NEXT:    s_setpc_b64 s[30:31]
3021 ; GFX10-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf_contractable_user:
3022 ; GFX10:       ; %bb.0:
3023 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3024 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v3, v1
3025 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
3026 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v4, v0
3027 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
3028 ; GFX10-NEXT:    v_rcp_f32_e32 v3, v3
3029 ; GFX10-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
3030 ; GFX10-NEXT:    v_mul_f32_e32 v3, v4, v3
3031 ; GFX10-NEXT:    v_ldexp_f32 v0, v3, v0
3032 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
3033 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3035 ; GFX11-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf_contractable_user:
3036 ; GFX11:       ; %bb.0:
3037 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3038 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v3, v1
3039 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
3040 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v4, v0
3041 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
3042 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
3043 ; GFX11-NEXT:    v_rcp_f32_e32 v3, v3
3044 ; GFX11-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
3045 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
3046 ; GFX11-NEXT:    v_mul_f32_e32 v3, v4, v3
3047 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3048 ; GFX11-NEXT:    v_ldexp_f32 v0, v3, v0
3049 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v2
3050 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3051 ; EG-LABEL: v_fdiv_f32_dynamic_25ulp__nnan_ninf_contractable_user:
3052 ; EG:       ; %bb.0:
3053 ; EG-NEXT:    CF_END
3054 ; EG-NEXT:    PAD
3055   %div = fdiv nnan ninf contract float %x, %y, !fpmath !0
3056   %add = fadd contract float %div, %z
3057   ret float %add
3061 define float @v_fdiv_neglhs_f32_dynamic(float %x, float %y) #0 {
3062 ; GFX6-FASTFMA-LABEL: v_fdiv_neglhs_f32_dynamic:
3063 ; GFX6-FASTFMA:       ; %bb.0:
3064 ; GFX6-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3065 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, -v0
3066 ; GFX6-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
3067 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
3068 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
3069 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, -v0, v1, -v0
3070 ; GFX6-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
3071 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
3072 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
3073 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
3074 ; GFX6-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
3075 ; GFX6-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3076 ; GFX6-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
3078 ; GFX6-SLOWFMA-LABEL: v_fdiv_neglhs_f32_dynamic:
3079 ; GFX6-SLOWFMA:       ; %bb.0:
3080 ; GFX6-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3081 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, -v0
3082 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, -v0, v1, -v0
3083 ; GFX6-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
3084 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
3085 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3086 ; GFX6-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
3087 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
3088 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3089 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
3090 ; GFX6-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3091 ; GFX6-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3092 ; GFX6-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
3094 ; GFX7-LABEL: v_fdiv_neglhs_f32_dynamic:
3095 ; GFX7:       ; %bb.0:
3096 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3097 ; GFX7-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, -v0
3098 ; GFX7-NEXT:    v_rcp_f32_e32 v3, v2
3099 ; GFX7-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
3100 ; GFX7-NEXT:    v_fma_f32 v3, v4, v3, v3
3101 ; GFX7-NEXT:    v_div_scale_f32 v4, vcc, -v0, v1, -v0
3102 ; GFX7-NEXT:    v_mul_f32_e32 v5, v4, v3
3103 ; GFX7-NEXT:    v_fma_f32 v6, -v2, v5, v4
3104 ; GFX7-NEXT:    v_fma_f32 v5, v6, v3, v5
3105 ; GFX7-NEXT:    v_fma_f32 v2, -v2, v5, v4
3106 ; GFX7-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
3107 ; GFX7-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3108 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3110 ; GFX8-LABEL: v_fdiv_neglhs_f32_dynamic:
3111 ; GFX8:       ; %bb.0:
3112 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3113 ; GFX8-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, -v0
3114 ; GFX8-NEXT:    v_div_scale_f32 v3, vcc, -v0, v1, -v0
3115 ; GFX8-NEXT:    v_rcp_f32_e32 v4, v2
3116 ; GFX8-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
3117 ; GFX8-NEXT:    v_fma_f32 v4, v5, v4, v4
3118 ; GFX8-NEXT:    v_mul_f32_e32 v5, v3, v4
3119 ; GFX8-NEXT:    v_fma_f32 v6, -v2, v5, v3
3120 ; GFX8-NEXT:    v_fma_f32 v5, v6, v4, v5
3121 ; GFX8-NEXT:    v_fma_f32 v2, -v2, v5, v3
3122 ; GFX8-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3123 ; GFX8-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3124 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3126 ; GFX6-IEEE-FASTFMA-LABEL: v_fdiv_neglhs_f32_dynamic:
3127 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
3128 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3129 ; GFX6-IEEE-FASTFMA-NEXT:    v_xor_b32_e32 v2, 0x80000000, v0
3130 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, v2
3131 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v4, v3
3132 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, vcc, v2, v1, v2
3133 ; GFX6-IEEE-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3134 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3135 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3136 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3137 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
3138 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
3139 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3140 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
3141 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3142 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3143 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3144 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
3146 ; GFX6-FLUSH-FASTFMA-LABEL: v_fdiv_neglhs_f32_dynamic:
3147 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
3148 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3149 ; GFX6-FLUSH-FASTFMA-NEXT:    v_xor_b32_e32 v2, 0x80000000, v0
3150 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, v2
3151 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v4, v3
3152 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, vcc, v2, v1, v2
3153 ; GFX6-FLUSH-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3154 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3155 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3156 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3157 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
3158 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
3159 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3160 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
3161 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3162 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3163 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3164 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
3166 ; GFX6-IEEE-SLOWFMA-LABEL: v_fdiv_neglhs_f32_dynamic:
3167 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
3168 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3169 ; GFX6-IEEE-SLOWFMA-NEXT:    v_xor_b32_e32 v2, 0x80000000, v0
3170 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, v2
3171 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, vcc, v2, v1, v2
3172 ; GFX6-IEEE-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3173 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v3
3174 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3175 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3176 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3177 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
3178 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
3179 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3180 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
3181 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3182 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3183 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3184 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
3186 ; GFX6-FLUSH-SLOWFMA-LABEL: v_fdiv_neglhs_f32_dynamic:
3187 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
3188 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3189 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_xor_b32_e32 v2, 0x80000000, v0
3190 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, v2
3191 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, vcc, v2, v1, v2
3192 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3193 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v3
3194 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3195 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3196 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3197 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
3198 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
3199 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3200 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
3201 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3202 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3203 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3204 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
3206 ; GFX89-IEEE-LABEL: v_fdiv_neglhs_f32_dynamic:
3207 ; GFX89-IEEE:       ; %bb.0:
3208 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3209 ; GFX89-IEEE-NEXT:    v_xor_b32_e32 v2, 0x80000000, v0
3210 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, v2
3211 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, vcc, v2, v1, v2
3212 ; GFX89-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3213 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v4, v3
3214 ; GFX89-IEEE-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3215 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3216 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v4, v4
3217 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v5, v2, v4
3218 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, -v3, v5, v2
3219 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, v6, v4, v5
3220 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v3, v5, v2
3221 ; GFX89-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3222 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3223 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3224 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
3226 ; GFX89-FLUSH-LABEL: v_fdiv_neglhs_f32_dynamic:
3227 ; GFX89-FLUSH:       ; %bb.0:
3228 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3229 ; GFX89-FLUSH-NEXT:    v_xor_b32_e32 v2, 0x80000000, v0
3230 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, s[4:5], v1, v1, v2
3231 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, vcc, v2, v1, v2
3232 ; GFX89-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3233 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v3
3234 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3235 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3236 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
3237 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v2, v4
3238 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v3, v5, v2
3239 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
3240 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v3, v5, v2
3241 ; GFX89-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3242 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3243 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3244 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
3246 ; GFX10-IEEE-LABEL: v_fdiv_neglhs_f32_dynamic:
3247 ; GFX10-IEEE:       ; %bb.0:
3248 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3249 ; GFX10-IEEE-NEXT:    v_xor_b32_e32 v2, 0x80000000, v0
3250 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v3, s4, v1, v1, v2
3251 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v2, vcc_lo, v2, v1, v2
3252 ; GFX10-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3253 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v4, v3
3254 ; GFX10-IEEE-NEXT:    s_denorm_mode 15
3255 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3256 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v4, v5, v4
3257 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v5, v2, v4
3258 ; GFX10-IEEE-NEXT:    v_fma_f32 v6, -v3, v5, v2
3259 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v4
3260 ; GFX10-IEEE-NEXT:    v_fma_f32 v2, -v3, v5, v2
3261 ; GFX10-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3262 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3263 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3264 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
3266 ; GFX10-FLUSH-LABEL: v_fdiv_neglhs_f32_dynamic:
3267 ; GFX10-FLUSH:       ; %bb.0:
3268 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3269 ; GFX10-FLUSH-NEXT:    v_xor_b32_e32 v2, 0x80000000, v0
3270 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v3, s4, v1, v1, v2
3271 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, vcc_lo, v2, v1, v2
3272 ; GFX10-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3273 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v4, v3
3274 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
3275 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3276 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v4
3277 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v2, v4
3278 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v3, v5, v2
3279 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v4
3280 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v3, v5, v2
3281 ; GFX10-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3282 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3283 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3284 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
3286 ; GFX11-IEEE-LABEL: v_fdiv_neglhs_f32_dynamic:
3287 ; GFX11-IEEE:       ; %bb.0:
3288 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3289 ; GFX11-IEEE-NEXT:    v_xor_b32_e32 v2, 0x80000000, v0
3290 ; GFX11-IEEE-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
3291 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3292 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v3, null, v1, v1, v2
3293 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v2, vcc_lo, v2, v1, v2
3294 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v4, v3
3295 ; GFX11-IEEE-NEXT:    s_denorm_mode 15
3296 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
3297 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3298 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3299 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v4, v5, v4
3300 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v5, v2, v4
3301 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3302 ; GFX11-IEEE-NEXT:    v_fma_f32 v6, -v3, v5, v2
3303 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v4
3304 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
3305 ; GFX11-IEEE-NEXT:    v_fma_f32 v2, -v3, v5, v2
3306 ; GFX11-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
3307 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3308 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3309 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3310 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
3312 ; GFX11-FLUSH-LABEL: v_fdiv_neglhs_f32_dynamic:
3313 ; GFX11-FLUSH:       ; %bb.0:
3314 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3315 ; GFX11-FLUSH-NEXT:    v_xor_b32_e32 v2, 0x80000000, v0
3316 ; GFX11-FLUSH-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
3317 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3318 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v3, null, v1, v1, v2
3319 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, vcc_lo, v2, v1, v2
3320 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v4, v3
3321 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
3322 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
3323 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3324 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3325 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v4
3326 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v2, v4
3327 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3328 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v3, v5, v2
3329 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v4
3330 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
3331 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v3, v5, v2
3332 ; GFX11-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
3333 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3334 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3335 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, -v0
3336 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
3337 ; EG-LABEL: v_fdiv_neglhs_f32_dynamic:
3338 ; EG:       ; %bb.0:
3339 ; EG-NEXT:    CF_END
3340 ; EG-NEXT:    PAD
3341   %neg.x = fneg float %x
3342   %div = fdiv float %neg.x, %y
3343   ret float %div
3346 define float @v_fdiv_neglhs_f32_dynamic_25ulp(float %x, float %y) #0 {
3347 ; GFX6-LABEL: v_fdiv_neglhs_f32_dynamic_25ulp:
3348 ; GFX6:       ; %bb.0:
3349 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3350 ; GFX6-NEXT:    s_mov_b32 s4, 0x7f800000
3351 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v2, v1
3352 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
3353 ; GFX6-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
3354 ; GFX6-NEXT:    v_rcp_f32_e32 v2, v2
3355 ; GFX6-NEXT:    v_frexp_mant_f32_e64 v3, -v0
3356 ; GFX6-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
3357 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
3358 ; GFX6-NEXT:    v_cndmask_b32_e64 v3, -v0, v3, s[4:5]
3359 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
3360 ; GFX6-NEXT:    v_mul_f32_e32 v2, v3, v2
3361 ; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
3362 ; GFX6-NEXT:    v_ldexp_f32_e32 v0, v2, v0
3363 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
3365 ; GFX7-LABEL: v_fdiv_neglhs_f32_dynamic_25ulp:
3366 ; GFX7:       ; %bb.0:
3367 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3368 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v2, v1
3369 ; GFX7-NEXT:    v_rcp_f32_e32 v2, v2
3370 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
3371 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0
3372 ; GFX7-NEXT:    v_frexp_mant_f32_e64 v0, -v0
3373 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v2
3374 ; GFX7-NEXT:    v_sub_i32_e32 v1, vcc, v3, v1
3375 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v1
3376 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3378 ; GFX8-LABEL: v_fdiv_neglhs_f32_dynamic_25ulp:
3379 ; GFX8:       ; %bb.0:
3380 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3381 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v2, v1
3382 ; GFX8-NEXT:    v_rcp_f32_e32 v2, v2
3383 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
3384 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0
3385 ; GFX8-NEXT:    v_frexp_mant_f32_e64 v0, -v0
3386 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v2
3387 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, v3, v1
3388 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v1
3389 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3391 ; GFX6-IEEE-LABEL: v_fdiv_neglhs_f32_dynamic_25ulp:
3392 ; GFX6-IEEE:       ; %bb.0:
3393 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3394 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
3395 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
3396 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
3397 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
3398 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
3399 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e64 v4, -v0
3400 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v3
3401 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
3402 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e64 v3, -v0, v4, s[4:5]
3403 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e64 v0, -v0
3404 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
3405 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
3406 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
3407 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
3409 ; GFX6-FLUSH-LABEL: v_fdiv_neglhs_f32_dynamic_25ulp:
3410 ; GFX6-FLUSH:       ; %bb.0:
3411 ; GFX6-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3412 ; GFX6-FLUSH-NEXT:    v_mov_b32_e32 v3, 0x7f800000
3413 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v2, v1
3414 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
3415 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
3416 ; GFX6-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
3417 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e64 v4, -v0
3418 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v3
3419 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
3420 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e64 v3, -v0, v4, s[4:5]
3421 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e64 v0, -v0
3422 ; GFX6-FLUSH-NEXT:    v_mul_f32_e32 v2, v3, v2
3423 ; GFX6-FLUSH-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
3424 ; GFX6-FLUSH-NEXT:    v_ldexp_f32_e32 v0, v2, v0
3425 ; GFX6-FLUSH-NEXT:    s_setpc_b64 s[30:31]
3427 ; GFX10-LABEL: v_fdiv_neglhs_f32_dynamic_25ulp:
3428 ; GFX10:       ; %bb.0:
3429 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3430 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v2, v1
3431 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
3432 ; GFX10-NEXT:    v_frexp_mant_f32_e64 v3, -v0
3433 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e64 v0, -v0
3434 ; GFX10-NEXT:    v_rcp_f32_e32 v2, v2
3435 ; GFX10-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
3436 ; GFX10-NEXT:    v_mul_f32_e32 v2, v3, v2
3437 ; GFX10-NEXT:    v_ldexp_f32 v0, v2, v0
3438 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3440 ; GFX11-LABEL: v_fdiv_neglhs_f32_dynamic_25ulp:
3441 ; GFX11:       ; %bb.0:
3442 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3443 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v2, v1
3444 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
3445 ; GFX11-NEXT:    v_frexp_mant_f32_e64 v3, -v0
3446 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e64 v0, -v0
3447 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
3448 ; GFX11-NEXT:    v_rcp_f32_e32 v2, v2
3449 ; GFX11-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
3450 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
3451 ; GFX11-NEXT:    v_mul_f32_e32 v2, v3, v2
3452 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3453 ; GFX11-NEXT:    v_ldexp_f32 v0, v2, v0
3454 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3455 ; EG-LABEL: v_fdiv_neglhs_f32_dynamic_25ulp:
3456 ; EG:       ; %bb.0:
3457 ; EG-NEXT:    CF_END
3458 ; EG-NEXT:    PAD
3459   %neg.x = fneg float %x
3460   %div = fdiv float %neg.x, %y, !fpmath !0
3461   ret float %div
3465 define float @v_fdiv_negrhs_f32_dynamic(float %x, float %y) #0 {
3466 ; GFX6-FASTFMA-LABEL: v_fdiv_negrhs_f32_dynamic:
3467 ; GFX6-FASTFMA:       ; %bb.0:
3468 ; GFX6-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3469 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], -v1, -v1, v0
3470 ; GFX6-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
3471 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
3472 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
3473 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, -v1, v0
3474 ; GFX6-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
3475 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
3476 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
3477 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
3478 ; GFX6-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
3479 ; GFX6-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3480 ; GFX6-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
3482 ; GFX6-SLOWFMA-LABEL: v_fdiv_negrhs_f32_dynamic:
3483 ; GFX6-SLOWFMA:       ; %bb.0:
3484 ; GFX6-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3485 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], -v1, -v1, v0
3486 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, -v1, v0
3487 ; GFX6-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
3488 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
3489 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3490 ; GFX6-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
3491 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
3492 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3493 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
3494 ; GFX6-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3495 ; GFX6-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3496 ; GFX6-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
3498 ; GFX7-LABEL: v_fdiv_negrhs_f32_dynamic:
3499 ; GFX7:       ; %bb.0:
3500 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3501 ; GFX7-NEXT:    v_div_scale_f32 v2, s[4:5], -v1, -v1, v0
3502 ; GFX7-NEXT:    v_rcp_f32_e32 v3, v2
3503 ; GFX7-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
3504 ; GFX7-NEXT:    v_fma_f32 v3, v4, v3, v3
3505 ; GFX7-NEXT:    v_div_scale_f32 v4, vcc, v0, -v1, v0
3506 ; GFX7-NEXT:    v_mul_f32_e32 v5, v4, v3
3507 ; GFX7-NEXT:    v_fma_f32 v6, -v2, v5, v4
3508 ; GFX7-NEXT:    v_fma_f32 v5, v6, v3, v5
3509 ; GFX7-NEXT:    v_fma_f32 v2, -v2, v5, v4
3510 ; GFX7-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
3511 ; GFX7-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3512 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3514 ; GFX8-LABEL: v_fdiv_negrhs_f32_dynamic:
3515 ; GFX8:       ; %bb.0:
3516 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3517 ; GFX8-NEXT:    v_div_scale_f32 v2, s[4:5], -v1, -v1, v0
3518 ; GFX8-NEXT:    v_div_scale_f32 v3, vcc, v0, -v1, v0
3519 ; GFX8-NEXT:    v_rcp_f32_e32 v4, v2
3520 ; GFX8-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
3521 ; GFX8-NEXT:    v_fma_f32 v4, v5, v4, v4
3522 ; GFX8-NEXT:    v_mul_f32_e32 v5, v3, v4
3523 ; GFX8-NEXT:    v_fma_f32 v6, -v2, v5, v3
3524 ; GFX8-NEXT:    v_fma_f32 v5, v6, v4, v5
3525 ; GFX8-NEXT:    v_fma_f32 v2, -v2, v5, v3
3526 ; GFX8-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3527 ; GFX8-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3528 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3530 ; GFX6-IEEE-FASTFMA-LABEL: v_fdiv_negrhs_f32_dynamic:
3531 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
3532 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3533 ; GFX6-IEEE-FASTFMA-NEXT:    v_xor_b32_e32 v2, 0x80000000, v1
3534 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v2, v2, v0
3535 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v4, v3
3536 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, vcc, v0, v2, v0
3537 ; GFX6-IEEE-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3538 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3539 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3540 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3541 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
3542 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
3543 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3544 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
3545 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3546 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3547 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3548 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
3550 ; GFX6-FLUSH-FASTFMA-LABEL: v_fdiv_negrhs_f32_dynamic:
3551 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
3552 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3553 ; GFX6-FLUSH-FASTFMA-NEXT:    v_xor_b32_e32 v2, 0x80000000, v1
3554 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v2, v2, v0
3555 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v4, v3
3556 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, vcc, v0, v2, v0
3557 ; GFX6-FLUSH-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3558 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3559 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3560 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3561 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
3562 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
3563 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3564 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
3565 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3566 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3567 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3568 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
3570 ; GFX6-IEEE-SLOWFMA-LABEL: v_fdiv_negrhs_f32_dynamic:
3571 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
3572 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3573 ; GFX6-IEEE-SLOWFMA-NEXT:    v_xor_b32_e32 v2, 0x80000000, v1
3574 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v2, v2, v0
3575 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, vcc, v0, v2, v0
3576 ; GFX6-IEEE-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3577 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v3
3578 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3579 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3580 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3581 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
3582 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
3583 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3584 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
3585 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3586 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3587 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3588 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
3590 ; GFX6-FLUSH-SLOWFMA-LABEL: v_fdiv_negrhs_f32_dynamic:
3591 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
3592 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3593 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_xor_b32_e32 v2, 0x80000000, v1
3594 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, s[4:5], v2, v2, v0
3595 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, vcc, v0, v2, v0
3596 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3597 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v3
3598 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3599 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3600 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3601 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v2, v4
3602 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v3, v5, v2
3603 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3604 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v3, v5, v2
3605 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3606 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3607 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3608 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
3610 ; GFX89-IEEE-LABEL: v_fdiv_negrhs_f32_dynamic:
3611 ; GFX89-IEEE:       ; %bb.0:
3612 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3613 ; GFX89-IEEE-NEXT:    v_xor_b32_e32 v2, 0x80000000, v1
3614 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, s[4:5], v2, v2, v0
3615 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, vcc, v0, v2, v0
3616 ; GFX89-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3617 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v4, v3
3618 ; GFX89-IEEE-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3619 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3620 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v4, v4
3621 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v5, v2, v4
3622 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, -v3, v5, v2
3623 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, v6, v4, v5
3624 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v3, v5, v2
3625 ; GFX89-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3626 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3627 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3628 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
3630 ; GFX89-FLUSH-LABEL: v_fdiv_negrhs_f32_dynamic:
3631 ; GFX89-FLUSH:       ; %bb.0:
3632 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3633 ; GFX89-FLUSH-NEXT:    v_xor_b32_e32 v2, 0x80000000, v1
3634 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, s[4:5], v2, v2, v0
3635 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, vcc, v0, v2, v0
3636 ; GFX89-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3637 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v3
3638 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3639 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3640 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
3641 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v2, v4
3642 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v3, v5, v2
3643 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
3644 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v3, v5, v2
3645 ; GFX89-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3646 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3647 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3648 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
3650 ; GFX10-IEEE-LABEL: v_fdiv_negrhs_f32_dynamic:
3651 ; GFX10-IEEE:       ; %bb.0:
3652 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3653 ; GFX10-IEEE-NEXT:    v_xor_b32_e32 v2, 0x80000000, v1
3654 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v3, s4, v2, v2, v0
3655 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v2, vcc_lo, v0, v2, v0
3656 ; GFX10-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3657 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v4, v3
3658 ; GFX10-IEEE-NEXT:    s_denorm_mode 15
3659 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3660 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v4, v5, v4
3661 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v5, v2, v4
3662 ; GFX10-IEEE-NEXT:    v_fma_f32 v6, -v3, v5, v2
3663 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v4
3664 ; GFX10-IEEE-NEXT:    v_fma_f32 v2, -v3, v5, v2
3665 ; GFX10-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3666 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3667 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3668 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
3670 ; GFX10-FLUSH-LABEL: v_fdiv_negrhs_f32_dynamic:
3671 ; GFX10-FLUSH:       ; %bb.0:
3672 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3673 ; GFX10-FLUSH-NEXT:    v_xor_b32_e32 v2, 0x80000000, v1
3674 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v3, s4, v2, v2, v0
3675 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, vcc_lo, v0, v2, v0
3676 ; GFX10-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3677 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v4, v3
3678 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
3679 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3680 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v4
3681 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v2, v4
3682 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v3, v5, v2
3683 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v4
3684 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v3, v5, v2
3685 ; GFX10-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3686 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3687 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3688 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
3690 ; GFX11-IEEE-LABEL: v_fdiv_negrhs_f32_dynamic:
3691 ; GFX11-IEEE:       ; %bb.0:
3692 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3693 ; GFX11-IEEE-NEXT:    v_xor_b32_e32 v2, 0x80000000, v1
3694 ; GFX11-IEEE-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
3695 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3696 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v3, null, v2, v2, v0
3697 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v2, vcc_lo, v0, v2, v0
3698 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v4, v3
3699 ; GFX11-IEEE-NEXT:    s_denorm_mode 15
3700 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
3701 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3702 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3703 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v4, v5, v4
3704 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v5, v2, v4
3705 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3706 ; GFX11-IEEE-NEXT:    v_fma_f32 v6, -v3, v5, v2
3707 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v4
3708 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
3709 ; GFX11-IEEE-NEXT:    v_fma_f32 v2, -v3, v5, v2
3710 ; GFX11-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
3711 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3712 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3713 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3714 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
3716 ; GFX11-FLUSH-LABEL: v_fdiv_negrhs_f32_dynamic:
3717 ; GFX11-FLUSH:       ; %bb.0:
3718 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3719 ; GFX11-FLUSH-NEXT:    v_xor_b32_e32 v2, 0x80000000, v1
3720 ; GFX11-FLUSH-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
3721 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3722 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v3, null, v2, v2, v0
3723 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, vcc_lo, v0, v2, v0
3724 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v4, v3
3725 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
3726 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
3727 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v3, v4, 1.0
3728 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3729 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v4
3730 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v2, v4
3731 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3732 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v3, v5, v2
3733 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v4
3734 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
3735 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v3, v5, v2
3736 ; GFX11-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
3737 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3738 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3739 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, -v1, v0
3740 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
3741 ; EG-LABEL: v_fdiv_negrhs_f32_dynamic:
3742 ; EG:       ; %bb.0:
3743 ; EG-NEXT:    CF_END
3744 ; EG-NEXT:    PAD
3745   %neg.y = fneg float %y
3746   %div = fdiv float %x, %neg.y
3747   ret float %div
3751 define float @v_fdiv_f32_constrhs0_dynamic(float %x) #0 {
3752 ; GFX6-FASTFMA-LABEL: v_fdiv_f32_constrhs0_dynamic:
3753 ; GFX6-FASTFMA:       ; %bb.0:
3754 ; GFX6-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3755 ; GFX6-FASTFMA-NEXT:    s_mov_b32 s6, 0x4640e400
3756 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v1, s[4:5], s6, s6, v0
3757 ; GFX6-FASTFMA-NEXT:    v_rcp_f32_e32 v2, v1
3758 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v3, -v1, v2, 1.0
3759 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v2, v3, v2, v2
3760 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, s6, v0
3761 ; GFX6-FASTFMA-NEXT:    v_mul_f32_e32 v4, v3, v2
3762 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v5, -v1, v4, v3
3763 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v4, v5, v2, v4
3764 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v1, -v1, v4, v3
3765 ; GFX6-FASTFMA-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
3766 ; GFX6-FASTFMA-NEXT:    v_div_fixup_f32 v0, v1, s6, v0
3767 ; GFX6-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
3769 ; GFX6-SLOWFMA-LABEL: v_fdiv_f32_constrhs0_dynamic:
3770 ; GFX6-SLOWFMA:       ; %bb.0:
3771 ; GFX6-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3772 ; GFX6-SLOWFMA-NEXT:    s_mov_b32 s6, 0x4640e400
3773 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v1, s[4:5], s6, s6, v0
3774 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v2, vcc, v0, s6, v0
3775 ; GFX6-SLOWFMA-NEXT:    v_rcp_f32_e32 v3, v1
3776 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
3777 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
3778 ; GFX6-SLOWFMA-NEXT:    v_mul_f32_e32 v4, v2, v3
3779 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, -v1, v4, v2
3780 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v3, v4
3781 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v1, -v1, v4, v2
3782 ; GFX6-SLOWFMA-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
3783 ; GFX6-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v1, s6, v0
3784 ; GFX6-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
3786 ; GFX7-LABEL: v_fdiv_f32_constrhs0_dynamic:
3787 ; GFX7:       ; %bb.0:
3788 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3789 ; GFX7-NEXT:    s_mov_b32 s6, 0x4640e400
3790 ; GFX7-NEXT:    v_div_scale_f32 v1, s[4:5], s6, s6, v0
3791 ; GFX7-NEXT:    v_rcp_f32_e32 v2, v1
3792 ; GFX7-NEXT:    v_fma_f32 v3, -v1, v2, 1.0
3793 ; GFX7-NEXT:    v_fma_f32 v2, v3, v2, v2
3794 ; GFX7-NEXT:    v_div_scale_f32 v3, vcc, v0, s6, v0
3795 ; GFX7-NEXT:    v_mul_f32_e32 v4, v3, v2
3796 ; GFX7-NEXT:    v_fma_f32 v5, -v1, v4, v3
3797 ; GFX7-NEXT:    v_fma_f32 v4, v5, v2, v4
3798 ; GFX7-NEXT:    v_fma_f32 v1, -v1, v4, v3
3799 ; GFX7-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
3800 ; GFX7-NEXT:    v_div_fixup_f32 v0, v1, s6, v0
3801 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3803 ; GFX8-LABEL: v_fdiv_f32_constrhs0_dynamic:
3804 ; GFX8:       ; %bb.0:
3805 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3806 ; GFX8-NEXT:    s_mov_b32 s6, 0x4640e400
3807 ; GFX8-NEXT:    v_div_scale_f32 v1, s[4:5], s6, s6, v0
3808 ; GFX8-NEXT:    v_div_scale_f32 v2, vcc, v0, s6, v0
3809 ; GFX8-NEXT:    v_rcp_f32_e32 v3, v1
3810 ; GFX8-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
3811 ; GFX8-NEXT:    v_fma_f32 v3, v4, v3, v3
3812 ; GFX8-NEXT:    v_mul_f32_e32 v4, v2, v3
3813 ; GFX8-NEXT:    v_fma_f32 v5, -v1, v4, v2
3814 ; GFX8-NEXT:    v_fma_f32 v4, v5, v3, v4
3815 ; GFX8-NEXT:    v_fma_f32 v1, -v1, v4, v2
3816 ; GFX8-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
3817 ; GFX8-NEXT:    v_div_fixup_f32 v0, v1, s6, v0
3818 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3820 ; GFX6-IEEE-FASTFMA-LABEL: v_fdiv_f32_constrhs0_dynamic:
3821 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
3822 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3823 ; GFX6-IEEE-FASTFMA-NEXT:    v_mov_b32_e32 v1, 0x4640e400
3824 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
3825 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
3826 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
3827 ; GFX6-IEEE-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3828 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3829 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
3830 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
3831 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
3832 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
3833 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
3834 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
3835 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3836 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
3837 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
3838 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
3840 ; GFX6-FLUSH-FASTFMA-LABEL: v_fdiv_f32_constrhs0_dynamic:
3841 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
3842 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3843 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mov_b32_e32 v1, 0x4640e400
3844 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
3845 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
3846 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
3847 ; GFX6-FLUSH-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3848 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3849 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
3850 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
3851 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
3852 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
3853 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
3854 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
3855 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3856 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
3857 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
3858 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
3860 ; GFX6-IEEE-SLOWFMA-LABEL: v_fdiv_f32_constrhs0_dynamic:
3861 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
3862 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3863 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 0x4640e400
3864 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
3865 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
3866 ; GFX6-IEEE-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3867 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
3868 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3869 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
3870 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3871 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
3872 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
3873 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3874 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
3875 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3876 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3877 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
3878 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
3880 ; GFX6-FLUSH-SLOWFMA-LABEL: v_fdiv_f32_constrhs0_dynamic:
3881 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
3882 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3883 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 0x4640e400
3884 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
3885 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
3886 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3887 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
3888 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3889 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
3890 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
3891 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
3892 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
3893 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
3894 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
3895 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3896 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3897 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
3898 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
3900 ; GFX89-IEEE-LABEL: v_fdiv_f32_constrhs0_dynamic:
3901 ; GFX89-IEEE:       ; %bb.0:
3902 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3903 ; GFX89-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4640e400
3904 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
3905 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
3906 ; GFX89-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3907 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
3908 ; GFX89-IEEE-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3909 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
3910 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v4, v4
3911 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v5, v3, v4
3912 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v3
3913 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, v6, v4, v5
3914 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v3
3915 ; GFX89-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3916 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3917 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
3918 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
3920 ; GFX89-FLUSH-LABEL: v_fdiv_f32_constrhs0_dynamic:
3921 ; GFX89-FLUSH:       ; %bb.0:
3922 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3923 ; GFX89-FLUSH-NEXT:    v_mov_b32_e32 v1, 0x4640e400
3924 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
3925 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
3926 ; GFX89-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3927 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v2
3928 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
3929 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
3930 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
3931 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v3, v4
3932 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v3
3933 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
3934 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v3
3935 ; GFX89-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3936 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
3937 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
3938 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
3940 ; GFX10-IEEE-LABEL: v_fdiv_f32_constrhs0_dynamic:
3941 ; GFX10-IEEE:       ; %bb.0:
3942 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3943 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v1, s4, 0x4640e400, 0x4640e400, v0
3944 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v3, vcc_lo, v0, 0x4640e400, v0
3945 ; GFX10-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3946 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v2, v1
3947 ; GFX10-IEEE-NEXT:    s_denorm_mode 15
3948 ; GFX10-IEEE-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
3949 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v2, v4, v2
3950 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v4, v3, v2
3951 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v1, v4, v3
3952 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v4, v5, v2
3953 ; GFX10-IEEE-NEXT:    v_fma_f32 v1, -v1, v4, v3
3954 ; GFX10-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3955 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
3956 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v1, 0x4640e400, v0
3957 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
3959 ; GFX10-FLUSH-LABEL: v_fdiv_f32_constrhs0_dynamic:
3960 ; GFX10-FLUSH:       ; %bb.0:
3961 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3962 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v1, s4, 0x4640e400, 0x4640e400, v0
3963 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v3, vcc_lo, v0, 0x4640e400, v0
3964 ; GFX10-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
3965 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v2, v1
3966 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
3967 ; GFX10-FLUSH-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
3968 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v2, v4, v2
3969 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v4, v3, v2
3970 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v1, v4, v3
3971 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v2
3972 ; GFX10-FLUSH-NEXT:    v_fma_f32 v1, -v1, v4, v3
3973 ; GFX10-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
3974 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
3975 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v1, 0x4640e400, v0
3976 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
3978 ; GFX11-IEEE-LABEL: v_fdiv_f32_constrhs0_dynamic:
3979 ; GFX11-IEEE:       ; %bb.0:
3980 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3981 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v1, null, 0x4640e400, 0x4640e400, v0
3982 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v3, vcc_lo, v0, 0x4640e400, v0
3983 ; GFX11-IEEE-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
3984 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
3985 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v2, v1
3986 ; GFX11-IEEE-NEXT:    s_denorm_mode 15
3987 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
3988 ; GFX11-IEEE-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
3989 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v2, v4, v2
3990 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3991 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v4, v3, v2
3992 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v1, v4, v3
3993 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3994 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v4, v5, v2
3995 ; GFX11-IEEE-NEXT:    v_fma_f32 v1, -v1, v4, v3
3996 ; GFX11-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
3997 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3998 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
3999 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v1, 0x4640e400, v0
4000 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
4002 ; GFX11-FLUSH-LABEL: v_fdiv_f32_constrhs0_dynamic:
4003 ; GFX11-FLUSH:       ; %bb.0:
4004 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4005 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v1, null, 0x4640e400, 0x4640e400, v0
4006 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v3, vcc_lo, v0, 0x4640e400, v0
4007 ; GFX11-FLUSH-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
4008 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
4009 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v2, v1
4010 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
4011 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
4012 ; GFX11-FLUSH-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
4013 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v2, v4, v2
4014 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4015 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v4, v3, v2
4016 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v1, v4, v3
4017 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4018 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v2
4019 ; GFX11-FLUSH-NEXT:    v_fma_f32 v1, -v1, v4, v3
4020 ; GFX11-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
4021 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4022 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
4023 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v1, 0x4640e400, v0
4024 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
4025 ; EG-LABEL: v_fdiv_f32_constrhs0_dynamic:
4026 ; EG:       ; %bb.0:
4027 ; EG-NEXT:    CF_END
4028 ; EG-NEXT:    PAD
4029   %div = fdiv float %x, 12345.0
4030   ret float %div
4033 define float @v_fdiv_f32_constrhs0_dynamic_25ulp(float %x) #0 {
4034 ; GFX6-LABEL: v_fdiv_f32_constrhs0_dynamic_25ulp:
4035 ; GFX6:       ; %bb.0:
4036 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4037 ; GFX6-NEXT:    s_mov_b32 s4, 0x7f800000
4038 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v2, v0
4039 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
4040 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v1, 0x4640e400
4041 ; GFX6-NEXT:    v_cndmask_b32_e32 v2, v0, v2, vcc
4042 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4043 ; GFX6-NEXT:    v_mul_f32_e32 v2, 0x3fa9e0f0, v2
4044 ; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
4045 ; GFX6-NEXT:    v_ldexp_f32_e32 v0, v2, v0
4046 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
4048 ; GFX7-LABEL: v_fdiv_f32_constrhs0_dynamic_25ulp:
4049 ; GFX7:       ; %bb.0:
4050 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4051 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v1, v0
4052 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v0, v0
4053 ; GFX7-NEXT:    v_mul_f32_e32 v0, 0x3fa9e0f0, v0
4054 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, -14, v1
4055 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v1
4056 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4058 ; GFX8-LABEL: v_fdiv_f32_constrhs0_dynamic_25ulp:
4059 ; GFX8:       ; %bb.0:
4060 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4061 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v1, v0
4062 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v0, v0
4063 ; GFX8-NEXT:    v_mul_f32_e32 v0, 0x3fa9e0f0, v0
4064 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, -14, v1
4065 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v1
4066 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4068 ; GFX6-IEEE-LABEL: v_fdiv_f32_constrhs0_dynamic_25ulp:
4069 ; GFX6-IEEE:       ; %bb.0:
4070 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4071 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, 0x3f40e400
4072 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v4, 0x7f800000
4073 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v3, v0
4074 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v4
4075 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, 0x4640e400
4076 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v3, v0, v3, vcc
4077 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4078 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
4079 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
4080 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
4081 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
4083 ; GFX6-FLUSH-LABEL: v_fdiv_f32_constrhs0_dynamic_25ulp:
4084 ; GFX6-FLUSH:       ; %bb.0:
4085 ; GFX6-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4086 ; GFX6-FLUSH-NEXT:    v_rcp_f32_e32 v2, 0x3f40e400
4087 ; GFX6-FLUSH-NEXT:    v_mov_b32_e32 v4, 0x7f800000
4088 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v3, v0
4089 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v4
4090 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v1, 0x4640e400
4091 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v3, v0, v3, vcc
4092 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4093 ; GFX6-FLUSH-NEXT:    v_mul_f32_e32 v2, v3, v2
4094 ; GFX6-FLUSH-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
4095 ; GFX6-FLUSH-NEXT:    v_ldexp_f32_e32 v0, v2, v0
4096 ; GFX6-FLUSH-NEXT:    s_setpc_b64 s[30:31]
4098 ; GFX10-LABEL: v_fdiv_f32_constrhs0_dynamic_25ulp:
4099 ; GFX10:       ; %bb.0:
4100 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4101 ; GFX10-NEXT:    v_rcp_f32_e32 v1, 0x3f40e400
4102 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v2, v0
4103 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4104 ; GFX10-NEXT:    v_subrev_nc_u32_e32 v0, 14, v0
4105 ; GFX10-NEXT:    v_mul_f32_e32 v1, v2, v1
4106 ; GFX10-NEXT:    v_ldexp_f32 v0, v1, v0
4107 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4109 ; GFX11-LABEL: v_fdiv_f32_constrhs0_dynamic_25ulp:
4110 ; GFX11:       ; %bb.0:
4111 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4112 ; GFX11-NEXT:    v_rcp_f32_e32 v1, 0x3f40e400
4113 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v2, v0
4114 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4115 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4116 ; GFX11-NEXT:    v_subrev_nc_u32_e32 v0, 14, v0
4117 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
4118 ; GFX11-NEXT:    v_mul_f32_e32 v1, v2, v1
4119 ; GFX11-NEXT:    v_ldexp_f32 v0, v1, v0
4120 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4121 ; EG-LABEL: v_fdiv_f32_constrhs0_dynamic_25ulp:
4122 ; EG:       ; %bb.0:
4123 ; EG-NEXT:    CF_END
4124 ; EG-NEXT:    PAD
4125   %div = fdiv float %x, 12345.0, !fpmath !0
4126   ret float %div
4130 define float @v_fdiv_f32_constlhs0_dynamic(float %x) #0 {
4131 ; GFX6-FASTFMA-LABEL: v_fdiv_f32_constlhs0_dynamic:
4132 ; GFX6-FASTFMA:       ; %bb.0:
4133 ; GFX6-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4134 ; GFX6-FASTFMA-NEXT:    s_mov_b32 s6, 0x4640e400
4135 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, s6
4136 ; GFX6-FASTFMA-NEXT:    v_rcp_f32_e32 v2, v1
4137 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v3, -v1, v2, 1.0
4138 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v2, v3, v2, v2
4139 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v3, vcc, s6, v0, s6
4140 ; GFX6-FASTFMA-NEXT:    v_mul_f32_e32 v4, v3, v2
4141 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v5, -v1, v4, v3
4142 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v4, v5, v2, v4
4143 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v1, -v1, v4, v3
4144 ; GFX6-FASTFMA-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
4145 ; GFX6-FASTFMA-NEXT:    v_div_fixup_f32 v0, v1, v0, s6
4146 ; GFX6-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
4148 ; GFX6-SLOWFMA-LABEL: v_fdiv_f32_constlhs0_dynamic:
4149 ; GFX6-SLOWFMA:       ; %bb.0:
4150 ; GFX6-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4151 ; GFX6-SLOWFMA-NEXT:    s_mov_b32 s6, 0x4640e400
4152 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, s6
4153 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v2, vcc, s6, v0, s6
4154 ; GFX6-SLOWFMA-NEXT:    v_rcp_f32_e32 v3, v1
4155 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
4156 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
4157 ; GFX6-SLOWFMA-NEXT:    v_mul_f32_e32 v4, v2, v3
4158 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, -v1, v4, v2
4159 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v3, v4
4160 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v1, -v1, v4, v2
4161 ; GFX6-SLOWFMA-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
4162 ; GFX6-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v1, v0, s6
4163 ; GFX6-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
4165 ; GFX7-LABEL: v_fdiv_f32_constlhs0_dynamic:
4166 ; GFX7:       ; %bb.0:
4167 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4168 ; GFX7-NEXT:    s_mov_b32 s6, 0x4640e400
4169 ; GFX7-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, s6
4170 ; GFX7-NEXT:    v_rcp_f32_e32 v2, v1
4171 ; GFX7-NEXT:    v_fma_f32 v3, -v1, v2, 1.0
4172 ; GFX7-NEXT:    v_fma_f32 v2, v3, v2, v2
4173 ; GFX7-NEXT:    v_div_scale_f32 v3, vcc, s6, v0, s6
4174 ; GFX7-NEXT:    v_mul_f32_e32 v4, v3, v2
4175 ; GFX7-NEXT:    v_fma_f32 v5, -v1, v4, v3
4176 ; GFX7-NEXT:    v_fma_f32 v4, v5, v2, v4
4177 ; GFX7-NEXT:    v_fma_f32 v1, -v1, v4, v3
4178 ; GFX7-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
4179 ; GFX7-NEXT:    v_div_fixup_f32 v0, v1, v0, s6
4180 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4182 ; GFX8-LABEL: v_fdiv_f32_constlhs0_dynamic:
4183 ; GFX8:       ; %bb.0:
4184 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4185 ; GFX8-NEXT:    s_mov_b32 s6, 0x4640e400
4186 ; GFX8-NEXT:    v_div_scale_f32 v1, s[4:5], v0, v0, s6
4187 ; GFX8-NEXT:    v_div_scale_f32 v2, vcc, s6, v0, s6
4188 ; GFX8-NEXT:    v_rcp_f32_e32 v3, v1
4189 ; GFX8-NEXT:    v_fma_f32 v4, -v1, v3, 1.0
4190 ; GFX8-NEXT:    v_fma_f32 v3, v4, v3, v3
4191 ; GFX8-NEXT:    v_mul_f32_e32 v4, v2, v3
4192 ; GFX8-NEXT:    v_fma_f32 v5, -v1, v4, v2
4193 ; GFX8-NEXT:    v_fma_f32 v4, v5, v3, v4
4194 ; GFX8-NEXT:    v_fma_f32 v1, -v1, v4, v2
4195 ; GFX8-NEXT:    v_div_fmas_f32 v1, v1, v3, v4
4196 ; GFX8-NEXT:    v_div_fixup_f32 v0, v1, v0, s6
4197 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4199 ; GFX6-IEEE-FASTFMA-LABEL: v_fdiv_f32_constlhs0_dynamic:
4200 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
4201 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4202 ; GFX6-IEEE-FASTFMA-NEXT:    v_mov_b32_e32 v1, 0x4640e400
4203 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, v1
4204 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
4205 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v1, v0, v1
4206 ; GFX6-IEEE-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4207 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4208 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
4209 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
4210 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
4211 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
4212 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
4213 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
4214 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4215 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4216 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, v1
4217 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
4219 ; GFX6-FLUSH-FASTFMA-LABEL: v_fdiv_f32_constlhs0_dynamic:
4220 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
4221 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4222 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mov_b32_e32 v1, 0x4640e400
4223 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, v1
4224 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
4225 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v1, v0, v1
4226 ; GFX6-FLUSH-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4227 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4228 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
4229 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
4230 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
4231 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
4232 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
4233 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
4234 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4235 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4236 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, v1
4237 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
4239 ; GFX6-IEEE-SLOWFMA-LABEL: v_fdiv_f32_constlhs0_dynamic:
4240 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
4241 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4242 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 0x4640e400
4243 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, v1
4244 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v1, v0, v1
4245 ; GFX6-IEEE-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4246 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
4247 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4248 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4249 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
4250 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
4251 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
4252 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
4253 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
4254 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4255 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4256 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, v1
4257 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
4259 ; GFX6-FLUSH-SLOWFMA-LABEL: v_fdiv_f32_constlhs0_dynamic:
4260 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
4261 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4262 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 0x4640e400
4263 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, v1
4264 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v1, v0, v1
4265 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4266 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
4267 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4268 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4269 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
4270 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
4271 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
4272 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
4273 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
4274 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4275 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4276 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v0, v1
4277 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
4279 ; GFX89-IEEE-LABEL: v_fdiv_f32_constlhs0_dynamic:
4280 ; GFX89-IEEE:       ; %bb.0:
4281 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4282 ; GFX89-IEEE-NEXT:    v_mov_b32_e32 v1, 0x4640e400
4283 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, v1
4284 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, vcc, v1, v0, v1
4285 ; GFX89-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4286 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
4287 ; GFX89-IEEE-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4288 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4289 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v4, v4
4290 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v5, v3, v4
4291 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v3
4292 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, v6, v4, v5
4293 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v3
4294 ; GFX89-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4295 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4296 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v0, v1
4297 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
4299 ; GFX89-FLUSH-LABEL: v_fdiv_f32_constlhs0_dynamic:
4300 ; GFX89-FLUSH:       ; %bb.0:
4301 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4302 ; GFX89-FLUSH-NEXT:    v_mov_b32_e32 v1, 0x4640e400
4303 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, s[4:5], v0, v0, v1
4304 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, vcc, v1, v0, v1
4305 ; GFX89-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4306 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v2
4307 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4308 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4309 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
4310 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v3, v4
4311 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v3
4312 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
4313 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v3
4314 ; GFX89-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4315 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4316 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v0, v1
4317 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
4319 ; GFX10-IEEE-LABEL: v_fdiv_f32_constlhs0_dynamic:
4320 ; GFX10-IEEE:       ; %bb.0:
4321 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4322 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v1, s4, v0, v0, 0x4640e400
4323 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v3, vcc_lo, 0x4640e400, v0, 0x4640e400
4324 ; GFX10-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4325 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v2, v1
4326 ; GFX10-IEEE-NEXT:    s_denorm_mode 15
4327 ; GFX10-IEEE-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
4328 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v2, v4, v2
4329 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v4, v3, v2
4330 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v1, v4, v3
4331 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v4, v5, v2
4332 ; GFX10-IEEE-NEXT:    v_fma_f32 v1, -v1, v4, v3
4333 ; GFX10-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4334 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
4335 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v1, v0, 0x4640e400
4336 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
4338 ; GFX10-FLUSH-LABEL: v_fdiv_f32_constlhs0_dynamic:
4339 ; GFX10-FLUSH:       ; %bb.0:
4340 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4341 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v1, s4, v0, v0, 0x4640e400
4342 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v3, vcc_lo, 0x4640e400, v0, 0x4640e400
4343 ; GFX10-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4344 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v2, v1
4345 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
4346 ; GFX10-FLUSH-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
4347 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v2, v4, v2
4348 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v4, v3, v2
4349 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v1, v4, v3
4350 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v2
4351 ; GFX10-FLUSH-NEXT:    v_fma_f32 v1, -v1, v4, v3
4352 ; GFX10-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4353 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
4354 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v1, v0, 0x4640e400
4355 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
4357 ; GFX11-IEEE-LABEL: v_fdiv_f32_constlhs0_dynamic:
4358 ; GFX11-IEEE:       ; %bb.0:
4359 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4360 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v1, null, v0, v0, 0x4640e400
4361 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v3, vcc_lo, 0x4640e400, v0, 0x4640e400
4362 ; GFX11-IEEE-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
4363 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
4364 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v2, v1
4365 ; GFX11-IEEE-NEXT:    s_denorm_mode 15
4366 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
4367 ; GFX11-IEEE-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
4368 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v2, v4, v2
4369 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4370 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v4, v3, v2
4371 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v1, v4, v3
4372 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4373 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v4, v5, v2
4374 ; GFX11-IEEE-NEXT:    v_fma_f32 v1, -v1, v4, v3
4375 ; GFX11-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
4376 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4377 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
4378 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v1, v0, 0x4640e400
4379 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
4381 ; GFX11-FLUSH-LABEL: v_fdiv_f32_constlhs0_dynamic:
4382 ; GFX11-FLUSH:       ; %bb.0:
4383 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4384 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v1, null, v0, v0, 0x4640e400
4385 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v3, vcc_lo, 0x4640e400, v0, 0x4640e400
4386 ; GFX11-FLUSH-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
4387 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
4388 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v2, v1
4389 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
4390 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
4391 ; GFX11-FLUSH-NEXT:    v_fma_f32 v4, -v1, v2, 1.0
4392 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v2, v4, v2
4393 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4394 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v4, v3, v2
4395 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v1, v4, v3
4396 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4397 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v4, v5, v2
4398 ; GFX11-FLUSH-NEXT:    v_fma_f32 v1, -v1, v4, v3
4399 ; GFX11-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
4400 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4401 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v1, v1, v2, v4
4402 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v1, v0, 0x4640e400
4403 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
4404 ; EG-LABEL: v_fdiv_f32_constlhs0_dynamic:
4405 ; EG:       ; %bb.0:
4406 ; EG-NEXT:    CF_END
4407 ; EG-NEXT:    PAD
4408   %div = fdiv float 12345.0, %x
4409   ret float %div
4412 define float @v_fdiv_f32_constlhs0_dynamic_25ulp(float %x) #0 {
4413 ; GFX6-LABEL: v_fdiv_f32_constlhs0_dynamic_25ulp:
4414 ; GFX6:       ; %bb.0:
4415 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4416 ; GFX6-NEXT:    s_mov_b32 s4, 0x7f800000
4417 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v1, v0
4418 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
4419 ; GFX6-NEXT:    v_cndmask_b32_e32 v1, v0, v1, vcc
4420 ; GFX6-NEXT:    v_rcp_f32_e32 v1, v1
4421 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4422 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v2, 0x4640e400
4423 ; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v2, v0
4424 ; GFX6-NEXT:    v_mul_f32_e32 v1, 0x3f40e400, v1
4425 ; GFX6-NEXT:    v_ldexp_f32_e32 v0, v1, v0
4426 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
4428 ; GFX7-LABEL: v_fdiv_f32_constlhs0_dynamic_25ulp:
4429 ; GFX7:       ; %bb.0:
4430 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4431 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v1, v0
4432 ; GFX7-NEXT:    v_rcp_f32_e32 v1, v1
4433 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4434 ; GFX7-NEXT:    v_sub_i32_e32 v0, vcc, 14, v0
4435 ; GFX7-NEXT:    v_mul_f32_e32 v1, 0x3f40e400, v1
4436 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v1, v0
4437 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4439 ; GFX8-LABEL: v_fdiv_f32_constlhs0_dynamic_25ulp:
4440 ; GFX8:       ; %bb.0:
4441 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4442 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v1, v0
4443 ; GFX8-NEXT:    v_rcp_f32_e32 v1, v1
4444 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4445 ; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, 14, v0
4446 ; GFX8-NEXT:    v_mul_f32_e32 v1, 0x3f40e400, v1
4447 ; GFX8-NEXT:    v_ldexp_f32 v0, v1, v0
4448 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4450 ; GFX6-IEEE-LABEL: v_fdiv_f32_constlhs0_dynamic_25ulp:
4451 ; GFX6-IEEE:       ; %bb.0:
4452 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4453 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4454 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v1, v0
4455 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
4456 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v1, v0, v1, vcc
4457 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v1, v1
4458 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4459 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v2, 0x4640e400
4460 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v2, v0
4461 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v1, 0x3f40e400, v1
4462 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v1, v0
4463 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
4465 ; GFX6-FLUSH-LABEL: v_fdiv_f32_constlhs0_dynamic_25ulp:
4466 ; GFX6-FLUSH:       ; %bb.0:
4467 ; GFX6-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4468 ; GFX6-FLUSH-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4469 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v1, v0
4470 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
4471 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v1, v0, v1, vcc
4472 ; GFX6-FLUSH-NEXT:    v_rcp_f32_e32 v1, v1
4473 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4474 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v2, 0x4640e400
4475 ; GFX6-FLUSH-NEXT:    v_sub_i32_e32 v0, vcc, v2, v0
4476 ; GFX6-FLUSH-NEXT:    v_mul_f32_e32 v1, 0x3f40e400, v1
4477 ; GFX6-FLUSH-NEXT:    v_ldexp_f32_e32 v0, v1, v0
4478 ; GFX6-FLUSH-NEXT:    s_setpc_b64 s[30:31]
4480 ; GFX10-LABEL: v_fdiv_f32_constlhs0_dynamic_25ulp:
4481 ; GFX10:       ; %bb.0:
4482 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4483 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v1, v0
4484 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4485 ; GFX10-NEXT:    v_rcp_f32_e32 v1, v1
4486 ; GFX10-NEXT:    v_sub_nc_u32_e32 v0, 14, v0
4487 ; GFX10-NEXT:    v_mul_f32_e32 v1, 0x3f40e400, v1
4488 ; GFX10-NEXT:    v_ldexp_f32 v0, v1, v0
4489 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4491 ; GFX11-LABEL: v_fdiv_f32_constlhs0_dynamic_25ulp:
4492 ; GFX11:       ; %bb.0:
4493 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4494 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v1, v0
4495 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4496 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4497 ; GFX11-NEXT:    v_rcp_f32_e32 v1, v1
4498 ; GFX11-NEXT:    v_sub_nc_u32_e32 v0, 14, v0
4499 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
4500 ; GFX11-NEXT:    v_mul_f32_e32 v1, 0x3f40e400, v1
4501 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4502 ; GFX11-NEXT:    v_ldexp_f32 v0, v1, v0
4503 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4504 ; EG-LABEL: v_fdiv_f32_constlhs0_dynamic_25ulp:
4505 ; EG:       ; %bb.0:
4506 ; EG-NEXT:    CF_END
4507 ; EG-NEXT:    PAD
4508   %div = fdiv float 12345.0, %x, !fpmath !0
4509   ret float %div
4513 define float @v_fdiv_f32_dynamic_nodenorm_x(float nofpclass(sub) %x, float %y) #0 {
4514 ; GFX6-FASTFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4515 ; GFX6-FASTFMA:       ; %bb.0:
4516 ; GFX6-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4517 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4518 ; GFX6-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
4519 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
4520 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
4521 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
4522 ; GFX6-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
4523 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
4524 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
4525 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
4526 ; GFX6-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4527 ; GFX6-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4528 ; GFX6-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
4530 ; GFX6-SLOWFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4531 ; GFX6-SLOWFMA:       ; %bb.0:
4532 ; GFX6-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4533 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4534 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
4535 ; GFX6-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
4536 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4537 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
4538 ; GFX6-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
4539 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
4540 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
4541 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
4542 ; GFX6-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4543 ; GFX6-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4544 ; GFX6-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
4546 ; GFX7-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4547 ; GFX7:       ; %bb.0:
4548 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4549 ; GFX7-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4550 ; GFX7-NEXT:    v_rcp_f32_e32 v3, v2
4551 ; GFX7-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
4552 ; GFX7-NEXT:    v_fma_f32 v3, v4, v3, v3
4553 ; GFX7-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
4554 ; GFX7-NEXT:    v_mul_f32_e32 v5, v4, v3
4555 ; GFX7-NEXT:    v_fma_f32 v6, -v2, v5, v4
4556 ; GFX7-NEXT:    v_fma_f32 v5, v6, v3, v5
4557 ; GFX7-NEXT:    v_fma_f32 v2, -v2, v5, v4
4558 ; GFX7-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4559 ; GFX7-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4560 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4562 ; GFX8-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4563 ; GFX8:       ; %bb.0:
4564 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4565 ; GFX8-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4566 ; GFX8-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
4567 ; GFX8-NEXT:    v_rcp_f32_e32 v4, v2
4568 ; GFX8-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4569 ; GFX8-NEXT:    v_fma_f32 v4, v5, v4, v4
4570 ; GFX8-NEXT:    v_mul_f32_e32 v5, v3, v4
4571 ; GFX8-NEXT:    v_fma_f32 v6, -v2, v5, v3
4572 ; GFX8-NEXT:    v_fma_f32 v5, v6, v4, v5
4573 ; GFX8-NEXT:    v_fma_f32 v2, -v2, v5, v3
4574 ; GFX8-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4575 ; GFX8-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4576 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4578 ; GFX6-IEEE-FASTFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4579 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
4580 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4581 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4582 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
4583 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
4584 ; GFX6-IEEE-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4585 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4586 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
4587 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
4588 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
4589 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
4590 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
4591 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
4592 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4593 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4594 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4595 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
4597 ; GFX6-FLUSH-FASTFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4598 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
4599 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4600 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4601 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
4602 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
4603 ; GFX6-FLUSH-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4604 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4605 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
4606 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
4607 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
4608 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
4609 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
4610 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
4611 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4612 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4613 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4614 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
4616 ; GFX6-IEEE-SLOWFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4617 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
4618 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4619 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4620 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
4621 ; GFX6-IEEE-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4622 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
4623 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4624 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4625 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
4626 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
4627 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
4628 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
4629 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
4630 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4631 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4632 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4633 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
4635 ; GFX6-FLUSH-SLOWFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4636 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
4637 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4638 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4639 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
4640 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4641 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
4642 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4643 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4644 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
4645 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
4646 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
4647 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
4648 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
4649 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4650 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4651 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4652 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
4654 ; GFX89-IEEE-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4655 ; GFX89-IEEE:       ; %bb.0:
4656 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4657 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4658 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
4659 ; GFX89-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4660 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
4661 ; GFX89-IEEE-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4662 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4663 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v4, v4
4664 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v5, v3, v4
4665 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v3
4666 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, v6, v4, v5
4667 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v3
4668 ; GFX89-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4669 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4670 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4671 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
4673 ; GFX89-FLUSH-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4674 ; GFX89-FLUSH:       ; %bb.0:
4675 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4676 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4677 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
4678 ; GFX89-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4679 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v2
4680 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4681 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4682 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
4683 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v3, v4
4684 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v3
4685 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
4686 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v3
4687 ; GFX89-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4688 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4689 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4690 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
4692 ; GFX10-IEEE-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4693 ; GFX10-IEEE:       ; %bb.0:
4694 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4695 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
4696 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
4697 ; GFX10-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4698 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v3, v2
4699 ; GFX10-IEEE-NEXT:    s_denorm_mode 15
4700 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
4701 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v3
4702 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v5, v4, v3
4703 ; GFX10-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v4
4704 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v3
4705 ; GFX10-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v4
4706 ; GFX10-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4707 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4708 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4709 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
4711 ; GFX10-FLUSH-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4712 ; GFX10-FLUSH:       ; %bb.0:
4713 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4714 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
4715 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
4716 ; GFX10-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4717 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
4718 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
4719 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
4720 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
4721 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
4722 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
4723 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
4724 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
4725 ; GFX10-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4726 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4727 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4728 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
4730 ; GFX11-IEEE-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4731 ; GFX11-IEEE:       ; %bb.0:
4732 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4733 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
4734 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
4735 ; GFX11-IEEE-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
4736 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
4737 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v3, v2
4738 ; GFX11-IEEE-NEXT:    s_denorm_mode 15
4739 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
4740 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
4741 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v3
4742 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4743 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v5, v4, v3
4744 ; GFX11-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v4
4745 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4746 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v3
4747 ; GFX11-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v4
4748 ; GFX11-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
4749 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4750 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4751 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4752 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
4754 ; GFX11-FLUSH-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4755 ; GFX11-FLUSH:       ; %bb.0:
4756 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4757 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
4758 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
4759 ; GFX11-FLUSH-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
4760 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
4761 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
4762 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
4763 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
4764 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
4765 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
4766 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4767 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
4768 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
4769 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4770 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
4771 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
4772 ; GFX11-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
4773 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4774 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4775 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4776 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
4777 ; EG-LABEL: v_fdiv_f32_dynamic_nodenorm_x:
4778 ; EG:       ; %bb.0:
4779 ; EG-NEXT:    CF_END
4780 ; EG-NEXT:    PAD
4781   %div = fdiv float %x, %y
4782   ret float %div
4785 define float @v_fdiv_f32_dynamic_25ulp_nodenorm_x(float nofpclass(sub) %x, float %y) #0 {
4786 ; GFX6-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_x:
4787 ; GFX6:       ; %bb.0:
4788 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4789 ; GFX6-NEXT:    s_mov_b32 s4, 0x7f800000
4790 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v2, v1
4791 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
4792 ; GFX6-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4793 ; GFX6-NEXT:    v_rcp_f32_e32 v2, v2
4794 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v3, v0
4795 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
4796 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
4797 ; GFX6-NEXT:    v_cndmask_b32_e32 v3, v0, v3, vcc
4798 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4799 ; GFX6-NEXT:    v_mul_f32_e32 v2, v3, v2
4800 ; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
4801 ; GFX6-NEXT:    v_ldexp_f32_e32 v0, v2, v0
4802 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
4804 ; GFX7-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_x:
4805 ; GFX7:       ; %bb.0:
4806 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4807 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v2, v1
4808 ; GFX7-NEXT:    v_rcp_f32_e32 v2, v2
4809 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
4810 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0
4811 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v0, v0
4812 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v2
4813 ; GFX7-NEXT:    v_sub_i32_e32 v1, vcc, v3, v1
4814 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v1
4815 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4817 ; GFX8-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_x:
4818 ; GFX8:       ; %bb.0:
4819 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4820 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v2, v1
4821 ; GFX8-NEXT:    v_rcp_f32_e32 v2, v2
4822 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
4823 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0
4824 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v0, v0
4825 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v2
4826 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, v3, v1
4827 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v1
4828 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4830 ; GFX6-IEEE-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_x:
4831 ; GFX6-IEEE:       ; %bb.0:
4832 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4833 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
4834 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
4835 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
4836 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4837 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
4838 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
4839 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
4840 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
4841 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v3, v0, v4, vcc
4842 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4843 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
4844 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
4845 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
4846 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
4848 ; GFX6-FLUSH-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_x:
4849 ; GFX6-FLUSH:       ; %bb.0:
4850 ; GFX6-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4851 ; GFX6-FLUSH-NEXT:    v_mov_b32_e32 v3, 0x7f800000
4852 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v2, v1
4853 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
4854 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
4855 ; GFX6-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
4856 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v4, v0
4857 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
4858 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
4859 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v3, v0, v4, vcc
4860 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4861 ; GFX6-FLUSH-NEXT:    v_mul_f32_e32 v2, v3, v2
4862 ; GFX6-FLUSH-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
4863 ; GFX6-FLUSH-NEXT:    v_ldexp_f32_e32 v0, v2, v0
4864 ; GFX6-FLUSH-NEXT:    s_setpc_b64 s[30:31]
4866 ; GFX10-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_x:
4867 ; GFX10:       ; %bb.0:
4868 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4869 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v2, v1
4870 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
4871 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v3, v0
4872 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4873 ; GFX10-NEXT:    v_rcp_f32_e32 v2, v2
4874 ; GFX10-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
4875 ; GFX10-NEXT:    v_mul_f32_e32 v2, v3, v2
4876 ; GFX10-NEXT:    v_ldexp_f32 v0, v2, v0
4877 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4879 ; GFX11-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_x:
4880 ; GFX11:       ; %bb.0:
4881 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4882 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v2, v1
4883 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
4884 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v3, v0
4885 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
4886 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
4887 ; GFX11-NEXT:    v_rcp_f32_e32 v2, v2
4888 ; GFX11-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
4889 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
4890 ; GFX11-NEXT:    v_mul_f32_e32 v2, v3, v2
4891 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4892 ; GFX11-NEXT:    v_ldexp_f32 v0, v2, v0
4893 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4894 ; EG-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_x:
4895 ; EG:       ; %bb.0:
4896 ; EG-NEXT:    CF_END
4897 ; EG-NEXT:    PAD
4898   %div = fdiv float %x, %y, !fpmath !0
4899   ret float %div
4902 define float @v_fdiv_f32_dynamic_nodenorm_y(float %x, float nofpclass(sub) %y) #0 {
4903 ; GFX6-FASTFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
4904 ; GFX6-FASTFMA:       ; %bb.0:
4905 ; GFX6-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4906 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4907 ; GFX6-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
4908 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
4909 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v3, v4, v3, v3
4910 ; GFX6-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
4911 ; GFX6-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
4912 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
4913 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
4914 ; GFX6-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
4915 ; GFX6-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4916 ; GFX6-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4917 ; GFX6-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
4919 ; GFX6-SLOWFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
4920 ; GFX6-SLOWFMA:       ; %bb.0:
4921 ; GFX6-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4922 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4923 ; GFX6-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
4924 ; GFX6-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
4925 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4926 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
4927 ; GFX6-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
4928 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
4929 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
4930 ; GFX6-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
4931 ; GFX6-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4932 ; GFX6-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4933 ; GFX6-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
4935 ; GFX7-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
4936 ; GFX7:       ; %bb.0:
4937 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4938 ; GFX7-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4939 ; GFX7-NEXT:    v_rcp_f32_e32 v3, v2
4940 ; GFX7-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
4941 ; GFX7-NEXT:    v_fma_f32 v3, v4, v3, v3
4942 ; GFX7-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
4943 ; GFX7-NEXT:    v_mul_f32_e32 v5, v4, v3
4944 ; GFX7-NEXT:    v_fma_f32 v6, -v2, v5, v4
4945 ; GFX7-NEXT:    v_fma_f32 v5, v6, v3, v5
4946 ; GFX7-NEXT:    v_fma_f32 v2, -v2, v5, v4
4947 ; GFX7-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4948 ; GFX7-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4949 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4951 ; GFX8-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
4952 ; GFX8:       ; %bb.0:
4953 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4954 ; GFX8-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4955 ; GFX8-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
4956 ; GFX8-NEXT:    v_rcp_f32_e32 v4, v2
4957 ; GFX8-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
4958 ; GFX8-NEXT:    v_fma_f32 v4, v5, v4, v4
4959 ; GFX8-NEXT:    v_mul_f32_e32 v5, v3, v4
4960 ; GFX8-NEXT:    v_fma_f32 v6, -v2, v5, v3
4961 ; GFX8-NEXT:    v_fma_f32 v5, v6, v4, v5
4962 ; GFX8-NEXT:    v_fma_f32 v2, -v2, v5, v3
4963 ; GFX8-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
4964 ; GFX8-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4965 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4967 ; GFX6-IEEE-FASTFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
4968 ; GFX6-IEEE-FASTFMA:       ; %bb.0:
4969 ; GFX6-IEEE-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4970 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4971 ; GFX6-IEEE-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
4972 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
4973 ; GFX6-IEEE-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4974 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4975 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
4976 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
4977 ; GFX6-IEEE-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
4978 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
4979 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
4980 ; GFX6-IEEE-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
4981 ; GFX6-IEEE-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
4982 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
4983 ; GFX6-IEEE-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
4984 ; GFX6-IEEE-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
4986 ; GFX6-FLUSH-FASTFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
4987 ; GFX6-FLUSH-FASTFMA:       ; %bb.0:
4988 ; GFX6-FLUSH-FASTFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4989 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
4990 ; GFX6-FLUSH-FASTFMA-NEXT:    v_rcp_f32_e32 v3, v2
4991 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
4992 ; GFX6-FLUSH-FASTFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
4993 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
4994 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
4995 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v3, v5, v3, v3
4996 ; GFX6-FLUSH-FASTFMA-NEXT:    v_mul_f32_e32 v5, v4, v3
4997 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v6, -v2, v5, v4
4998 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v5, v6, v3, v5
4999 ; GFX6-FLUSH-FASTFMA-NEXT:    v_fma_f32 v2, -v2, v5, v4
5000 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
5001 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
5002 ; GFX6-FLUSH-FASTFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
5003 ; GFX6-FLUSH-FASTFMA-NEXT:    s_setpc_b64 s[30:31]
5005 ; GFX6-IEEE-SLOWFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
5006 ; GFX6-IEEE-SLOWFMA:       ; %bb.0:
5007 ; GFX6-IEEE-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5008 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
5009 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
5010 ; GFX6-IEEE-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
5011 ; GFX6-IEEE-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
5012 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
5013 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
5014 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
5015 ; GFX6-IEEE-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
5016 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
5017 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
5018 ; GFX6-IEEE-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
5019 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
5020 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
5021 ; GFX6-IEEE-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
5022 ; GFX6-IEEE-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
5024 ; GFX6-FLUSH-SLOWFMA-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
5025 ; GFX6-FLUSH-SLOWFMA:       ; %bb.0:
5026 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5027 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
5028 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
5029 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
5030 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_rcp_f32_e32 v4, v2
5031 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
5032 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
5033 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v4, v5, v4, v4
5034 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_mul_f32_e32 v5, v3, v4
5035 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v6, -v2, v5, v3
5036 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v5, v6, v4, v5
5037 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_fma_f32 v2, -v2, v5, v3
5038 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
5039 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
5040 ; GFX6-FLUSH-SLOWFMA-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
5041 ; GFX6-FLUSH-SLOWFMA-NEXT:    s_setpc_b64 s[30:31]
5043 ; GFX89-IEEE-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
5044 ; GFX89-IEEE:       ; %bb.0:
5045 ; GFX89-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5046 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
5047 ; GFX89-IEEE-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
5048 ; GFX89-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
5049 ; GFX89-IEEE-NEXT:    v_rcp_f32_e32 v4, v2
5050 ; GFX89-IEEE-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
5051 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
5052 ; GFX89-IEEE-NEXT:    v_fma_f32 v4, v5, v4, v4
5053 ; GFX89-IEEE-NEXT:    v_mul_f32_e32 v5, v3, v4
5054 ; GFX89-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v3
5055 ; GFX89-IEEE-NEXT:    v_fma_f32 v5, v6, v4, v5
5056 ; GFX89-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v3
5057 ; GFX89-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
5058 ; GFX89-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
5059 ; GFX89-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
5060 ; GFX89-IEEE-NEXT:    s_setpc_b64 s[30:31]
5062 ; GFX89-FLUSH-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
5063 ; GFX89-FLUSH:       ; %bb.0:
5064 ; GFX89-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5065 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
5066 ; GFX89-FLUSH-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
5067 ; GFX89-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
5068 ; GFX89-FLUSH-NEXT:    v_rcp_f32_e32 v4, v2
5069 ; GFX89-FLUSH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3
5070 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
5071 ; GFX89-FLUSH-NEXT:    v_fma_f32 v4, v5, v4, v4
5072 ; GFX89-FLUSH-NEXT:    v_mul_f32_e32 v5, v3, v4
5073 ; GFX89-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v3
5074 ; GFX89-FLUSH-NEXT:    v_fma_f32 v5, v6, v4, v5
5075 ; GFX89-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v3
5076 ; GFX89-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
5077 ; GFX89-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
5078 ; GFX89-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
5079 ; GFX89-FLUSH-NEXT:    s_setpc_b64 s[30:31]
5081 ; GFX10-IEEE-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
5082 ; GFX10-IEEE:       ; %bb.0:
5083 ; GFX10-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5084 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
5085 ; GFX10-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
5086 ; GFX10-IEEE-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
5087 ; GFX10-IEEE-NEXT:    v_rcp_f32_e32 v3, v2
5088 ; GFX10-IEEE-NEXT:    s_denorm_mode 15
5089 ; GFX10-IEEE-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
5090 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v3
5091 ; GFX10-IEEE-NEXT:    v_mul_f32_e32 v5, v4, v3
5092 ; GFX10-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v4
5093 ; GFX10-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v3
5094 ; GFX10-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v4
5095 ; GFX10-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
5096 ; GFX10-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
5097 ; GFX10-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
5098 ; GFX10-IEEE-NEXT:    s_setpc_b64 s[30:31]
5100 ; GFX10-FLUSH-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
5101 ; GFX10-FLUSH:       ; %bb.0:
5102 ; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5103 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
5104 ; GFX10-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
5105 ; GFX10-FLUSH-NEXT:    s_getreg_b32 s4, hwreg(HW_REG_MODE, 4, 2)
5106 ; GFX10-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
5107 ; GFX10-FLUSH-NEXT:    s_denorm_mode 3
5108 ; GFX10-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
5109 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
5110 ; GFX10-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
5111 ; GFX10-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
5112 ; GFX10-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
5113 ; GFX10-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
5114 ; GFX10-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s4
5115 ; GFX10-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
5116 ; GFX10-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
5117 ; GFX10-FLUSH-NEXT:    s_setpc_b64 s[30:31]
5119 ; GFX11-IEEE-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
5120 ; GFX11-IEEE:       ; %bb.0:
5121 ; GFX11-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5122 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
5123 ; GFX11-IEEE-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
5124 ; GFX11-IEEE-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
5125 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
5126 ; GFX11-IEEE-NEXT:    v_rcp_f32_e32 v3, v2
5127 ; GFX11-IEEE-NEXT:    s_denorm_mode 15
5128 ; GFX11-IEEE-NEXT:    s_waitcnt_depctr 0xfff
5129 ; GFX11-IEEE-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
5130 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v3, v5, v3
5131 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5132 ; GFX11-IEEE-NEXT:    v_mul_f32_e32 v5, v4, v3
5133 ; GFX11-IEEE-NEXT:    v_fma_f32 v6, -v2, v5, v4
5134 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5135 ; GFX11-IEEE-NEXT:    v_fmac_f32_e32 v5, v6, v3
5136 ; GFX11-IEEE-NEXT:    v_fma_f32 v2, -v2, v5, v4
5137 ; GFX11-IEEE-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
5138 ; GFX11-IEEE-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5139 ; GFX11-IEEE-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
5140 ; GFX11-IEEE-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
5141 ; GFX11-IEEE-NEXT:    s_setpc_b64 s[30:31]
5143 ; GFX11-FLUSH-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
5144 ; GFX11-FLUSH:       ; %bb.0:
5145 ; GFX11-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5146 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
5147 ; GFX11-FLUSH-NEXT:    v_div_scale_f32 v4, vcc_lo, v0, v1, v0
5148 ; GFX11-FLUSH-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_MODE, 4, 2)
5149 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
5150 ; GFX11-FLUSH-NEXT:    v_rcp_f32_e32 v3, v2
5151 ; GFX11-FLUSH-NEXT:    s_denorm_mode 3
5152 ; GFX11-FLUSH-NEXT:    s_waitcnt_depctr 0xfff
5153 ; GFX11-FLUSH-NEXT:    v_fma_f32 v5, -v2, v3, 1.0
5154 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v3, v5, v3
5155 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5156 ; GFX11-FLUSH-NEXT:    v_mul_f32_e32 v5, v4, v3
5157 ; GFX11-FLUSH-NEXT:    v_fma_f32 v6, -v2, v5, v4
5158 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5159 ; GFX11-FLUSH-NEXT:    v_fmac_f32_e32 v5, v6, v3
5160 ; GFX11-FLUSH-NEXT:    v_fma_f32 v2, -v2, v5, v4
5161 ; GFX11-FLUSH-NEXT:    s_setreg_b32 hwreg(HW_REG_MODE, 4, 2), s0
5162 ; GFX11-FLUSH-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5163 ; GFX11-FLUSH-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
5164 ; GFX11-FLUSH-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
5165 ; GFX11-FLUSH-NEXT:    s_setpc_b64 s[30:31]
5166 ; EG-LABEL: v_fdiv_f32_dynamic_nodenorm_y:
5167 ; EG:       ; %bb.0:
5168 ; EG-NEXT:    CF_END
5169 ; EG-NEXT:    PAD
5170   %div = fdiv float %x, %y
5171   ret float %div
5174 define float @v_fdiv_f32_dynamic_25ulp_nodenorm_y(float %x, float nofpclass(sub) %y) #0 {
5175 ; GFX6-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_y:
5176 ; GFX6:       ; %bb.0:
5177 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5178 ; GFX6-NEXT:    s_mov_b32 s4, 0x7f800000
5179 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v2, v1
5180 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4
5181 ; GFX6-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
5182 ; GFX6-NEXT:    v_rcp_f32_e32 v2, v2
5183 ; GFX6-NEXT:    v_frexp_mant_f32_e32 v3, v0
5184 ; GFX6-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
5185 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
5186 ; GFX6-NEXT:    v_cndmask_b32_e32 v3, v0, v3, vcc
5187 ; GFX6-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
5188 ; GFX6-NEXT:    v_mul_f32_e32 v2, v3, v2
5189 ; GFX6-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
5190 ; GFX6-NEXT:    v_ldexp_f32_e32 v0, v2, v0
5191 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
5193 ; GFX7-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_y:
5194 ; GFX7:       ; %bb.0:
5195 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5196 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v2, v1
5197 ; GFX7-NEXT:    v_rcp_f32_e32 v2, v2
5198 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
5199 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0
5200 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v0, v0
5201 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v2
5202 ; GFX7-NEXT:    v_sub_i32_e32 v1, vcc, v3, v1
5203 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v1
5204 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
5206 ; GFX8-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_y:
5207 ; GFX8:       ; %bb.0:
5208 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5209 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v2, v1
5210 ; GFX8-NEXT:    v_rcp_f32_e32 v2, v2
5211 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
5212 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0
5213 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v0, v0
5214 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v2
5215 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, v3, v1
5216 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v1
5217 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
5219 ; GFX6-IEEE-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_y:
5220 ; GFX6-IEEE:       ; %bb.0:
5221 ; GFX6-IEEE-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5222 ; GFX6-IEEE-NEXT:    v_mov_b32_e32 v3, 0x7f800000
5223 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v2, v1
5224 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
5225 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
5226 ; GFX6-IEEE-NEXT:    v_rcp_f32_e32 v2, v2
5227 ; GFX6-IEEE-NEXT:    v_frexp_mant_f32_e32 v4, v0
5228 ; GFX6-IEEE-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
5229 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
5230 ; GFX6-IEEE-NEXT:    v_cndmask_b32_e32 v3, v0, v4, vcc
5231 ; GFX6-IEEE-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
5232 ; GFX6-IEEE-NEXT:    v_mul_f32_e32 v2, v3, v2
5233 ; GFX6-IEEE-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
5234 ; GFX6-IEEE-NEXT:    v_ldexp_f32_e32 v0, v2, v0
5235 ; GFX6-IEEE-NEXT:    s_setpc_b64 s[30:31]
5237 ; GFX6-FLUSH-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_y:
5238 ; GFX6-FLUSH:       ; %bb.0:
5239 ; GFX6-FLUSH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5240 ; GFX6-FLUSH-NEXT:    v_mov_b32_e32 v3, 0x7f800000
5241 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v2, v1
5242 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3
5243 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v2, v1, v2, vcc
5244 ; GFX6-FLUSH-NEXT:    v_rcp_f32_e32 v2, v2
5245 ; GFX6-FLUSH-NEXT:    v_frexp_mant_f32_e32 v4, v0
5246 ; GFX6-FLUSH-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
5247 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
5248 ; GFX6-FLUSH-NEXT:    v_cndmask_b32_e32 v3, v0, v4, vcc
5249 ; GFX6-FLUSH-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
5250 ; GFX6-FLUSH-NEXT:    v_mul_f32_e32 v2, v3, v2
5251 ; GFX6-FLUSH-NEXT:    v_sub_i32_e32 v0, vcc, v0, v1
5252 ; GFX6-FLUSH-NEXT:    v_ldexp_f32_e32 v0, v2, v0
5253 ; GFX6-FLUSH-NEXT:    s_setpc_b64 s[30:31]
5255 ; GFX10-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_y:
5256 ; GFX10:       ; %bb.0:
5257 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5258 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v2, v1
5259 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
5260 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v3, v0
5261 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
5262 ; GFX10-NEXT:    v_rcp_f32_e32 v2, v2
5263 ; GFX10-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
5264 ; GFX10-NEXT:    v_mul_f32_e32 v2, v3, v2
5265 ; GFX10-NEXT:    v_ldexp_f32 v0, v2, v0
5266 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5268 ; GFX11-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_y:
5269 ; GFX11:       ; %bb.0:
5270 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5271 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v2, v1
5272 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
5273 ; GFX11-NEXT:    v_frexp_mant_f32_e32 v3, v0
5274 ; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v0, v0
5275 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
5276 ; GFX11-NEXT:    v_rcp_f32_e32 v2, v2
5277 ; GFX11-NEXT:    v_sub_nc_u32_e32 v0, v0, v1
5278 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
5279 ; GFX11-NEXT:    v_mul_f32_e32 v2, v3, v2
5280 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5281 ; GFX11-NEXT:    v_ldexp_f32 v0, v2, v0
5282 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5283 ; EG-LABEL: v_fdiv_f32_dynamic_25ulp_nodenorm_y:
5284 ; EG:       ; %bb.0:
5285 ; EG-NEXT:    CF_END
5286 ; EG-NEXT:    PAD
5287   %div = fdiv float %x, %y, !fpmath !0
5288   ret float %div
5291 !0 = !{float 2.500000e+00}
5293 attributes #0 = { "denormal-fp-math-f32"="dynamic,dynamic" }
5295 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
5296 ; GCN-IEEE: {{.*}}