1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -march=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefix=GFX6 %s
3 ; RUN: llc -global-isel -march=amdgcn -mcpu=fiji < %s | FileCheck -check-prefix=GFX8 %s
4 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s
5 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s
6 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX11 %s
8 define float @v_pow_f32(float %x, float %y) {
9 ; GFX6-LABEL: v_pow_f32:
11 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x800000
13 ; GFX6-NEXT: v_mov_b32_e32 v3, 0x4f800000
14 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v2
15 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
16 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v2
17 ; GFX6-NEXT: v_log_f32_e32 v0, v0
18 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42000000
19 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
20 ; GFX6-NEXT: v_sub_f32_e32 v0, v0, v2
21 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
22 ; GFX6-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
23 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
24 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
25 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
26 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
27 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
28 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x1f800000
29 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
30 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
31 ; GFX6-NEXT: s_setpc_b64 s[30:31]
33 ; GFX8-LABEL: v_pow_f32:
35 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x800000
37 ; GFX8-NEXT: v_mov_b32_e32 v3, 0x4f800000
38 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v2
39 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
40 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v2
41 ; GFX8-NEXT: v_log_f32_e32 v0, v0
42 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42000000
43 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
44 ; GFX8-NEXT: v_sub_f32_e32 v0, v0, v2
45 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
46 ; GFX8-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
47 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42800000
48 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
49 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
50 ; GFX8-NEXT: v_add_f32_e32 v0, v0, v1
51 ; GFX8-NEXT: v_exp_f32_e32 v0, v0
52 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x1f800000
53 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
54 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v1
55 ; GFX8-NEXT: s_setpc_b64 s[30:31]
57 ; GFX9-LABEL: v_pow_f32:
59 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x800000
61 ; GFX9-NEXT: v_mov_b32_e32 v3, 0x4f800000
62 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v2
63 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
64 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v2
65 ; GFX9-NEXT: v_log_f32_e32 v0, v0
66 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42000000
67 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
68 ; GFX9-NEXT: v_sub_f32_e32 v0, v0, v2
69 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
70 ; GFX9-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
71 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42800000
72 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
73 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
74 ; GFX9-NEXT: v_add_f32_e32 v0, v0, v1
75 ; GFX9-NEXT: v_exp_f32_e32 v0, v0
76 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x1f800000
77 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
78 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1
79 ; GFX9-NEXT: s_setpc_b64 s[30:31]
81 ; GFX10-LABEL: v_pow_f32:
83 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
84 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
85 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
86 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v2
87 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, vcc_lo
88 ; GFX10-NEXT: v_log_f32_e32 v0, v0
89 ; GFX10-NEXT: v_sub_f32_e32 v0, v0, v2
90 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
91 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
92 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
93 ; GFX10-NEXT: v_add_f32_e32 v0, v0, v1
94 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
95 ; GFX10-NEXT: v_exp_f32_e32 v0, v0
96 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1
97 ; GFX10-NEXT: s_setpc_b64 s[30:31]
99 ; GFX11-LABEL: v_pow_f32:
101 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
102 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
103 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
104 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
105 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v2
106 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, vcc_lo
107 ; GFX11-NEXT: v_log_f32_e32 v0, v0
108 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
109 ; GFX11-NEXT: v_sub_f32_e32 v0, v0, v2
110 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
111 ; GFX11-NEXT: v_mul_dx9_zero_f32_e32 v0, v0, v1
112 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
113 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
114 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
115 ; GFX11-NEXT: v_add_f32_e32 v0, v0, v1
116 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
117 ; GFX11-NEXT: v_exp_f32_e32 v0, v0
118 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
119 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1
120 ; GFX11-NEXT: s_setpc_b64 s[30:31]
121 %pow = call float @llvm.pow.f32(float %x, float %y)
125 define <2 x float> @v_pow_v2f32(<2 x float> %x, <2 x float> %y) {
126 ; GFX6-LABEL: v_pow_v2f32:
128 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
129 ; GFX6-NEXT: s_mov_b32 s4, 0x800000
130 ; GFX6-NEXT: v_mov_b32_e32 v4, 0x4f800000
131 ; GFX6-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0
132 ; GFX6-NEXT: v_cndmask_b32_e32 v5, 1.0, v4, vcc
133 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v5
134 ; GFX6-NEXT: v_mov_b32_e32 v5, 0x800000
135 ; GFX6-NEXT: v_cmp_lt_f32_e64 s[4:5], v1, v5
136 ; GFX6-NEXT: v_cndmask_b32_e64 v4, 1.0, v4, s[4:5]
137 ; GFX6-NEXT: v_log_f32_e32 v0, v0
138 ; GFX6-NEXT: v_mul_f32_e32 v1, v1, v4
139 ; GFX6-NEXT: v_log_f32_e32 v1, v1
140 ; GFX6-NEXT: v_mov_b32_e32 v6, 0x42000000
141 ; GFX6-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc
142 ; GFX6-NEXT: v_sub_f32_e32 v0, v0, v7
143 ; GFX6-NEXT: v_cndmask_b32_e64 v5, 0, v6, s[4:5]
144 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, v0, v2
145 ; GFX6-NEXT: s_mov_b32 s6, 0xc2fc0000
146 ; GFX6-NEXT: v_sub_f32_e32 v1, v1, v5
147 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
148 ; GFX6-NEXT: v_cmp_gt_f32_e32 vcc, s6, v0
149 ; GFX6-NEXT: v_mul_legacy_f32_e32 v1, v1, v3
150 ; GFX6-NEXT: v_cndmask_b32_e32 v7, 0, v2, vcc
151 ; GFX6-NEXT: v_cmp_gt_f32_e64 s[4:5], s6, v1
152 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v7
153 ; GFX6-NEXT: v_cndmask_b32_e64 v2, 0, v2, s[4:5]
154 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
155 ; GFX6-NEXT: v_add_f32_e32 v1, v1, v2
156 ; GFX6-NEXT: v_exp_f32_e32 v1, v1
157 ; GFX6-NEXT: v_mov_b32_e32 v4, 0x1f800000
158 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 1.0, v4, vcc
159 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v2
160 ; GFX6-NEXT: v_cndmask_b32_e64 v2, 1.0, v4, s[4:5]
161 ; GFX6-NEXT: v_mul_f32_e32 v1, v1, v2
162 ; GFX6-NEXT: s_setpc_b64 s[30:31]
164 ; GFX8-LABEL: v_pow_v2f32:
166 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
167 ; GFX8-NEXT: s_mov_b32 s4, 0x800000
168 ; GFX8-NEXT: v_mov_b32_e32 v4, 0x4f800000
169 ; GFX8-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0
170 ; GFX8-NEXT: v_cndmask_b32_e32 v5, 1.0, v4, vcc
171 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v5
172 ; GFX8-NEXT: v_mov_b32_e32 v5, 0x800000
173 ; GFX8-NEXT: v_cmp_lt_f32_e64 s[4:5], v1, v5
174 ; GFX8-NEXT: v_cndmask_b32_e64 v4, 1.0, v4, s[4:5]
175 ; GFX8-NEXT: v_log_f32_e32 v0, v0
176 ; GFX8-NEXT: v_mul_f32_e32 v1, v1, v4
177 ; GFX8-NEXT: v_log_f32_e32 v1, v1
178 ; GFX8-NEXT: v_mov_b32_e32 v6, 0x42000000
179 ; GFX8-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc
180 ; GFX8-NEXT: v_sub_f32_e32 v0, v0, v7
181 ; GFX8-NEXT: v_cndmask_b32_e64 v5, 0, v6, s[4:5]
182 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, v0, v2
183 ; GFX8-NEXT: s_mov_b32 s6, 0xc2fc0000
184 ; GFX8-NEXT: v_sub_f32_e32 v1, v1, v5
185 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42800000
186 ; GFX8-NEXT: v_cmp_gt_f32_e32 vcc, s6, v0
187 ; GFX8-NEXT: v_mul_legacy_f32_e32 v1, v1, v3
188 ; GFX8-NEXT: v_cndmask_b32_e32 v7, 0, v2, vcc
189 ; GFX8-NEXT: v_cmp_gt_f32_e64 s[4:5], s6, v1
190 ; GFX8-NEXT: v_add_f32_e32 v0, v0, v7
191 ; GFX8-NEXT: v_cndmask_b32_e64 v2, 0, v2, s[4:5]
192 ; GFX8-NEXT: v_exp_f32_e32 v0, v0
193 ; GFX8-NEXT: v_add_f32_e32 v1, v1, v2
194 ; GFX8-NEXT: v_exp_f32_e32 v1, v1
195 ; GFX8-NEXT: v_mov_b32_e32 v4, 0x1f800000
196 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 1.0, v4, vcc
197 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v2
198 ; GFX8-NEXT: v_cndmask_b32_e64 v2, 1.0, v4, s[4:5]
199 ; GFX8-NEXT: v_mul_f32_e32 v1, v1, v2
200 ; GFX8-NEXT: s_setpc_b64 s[30:31]
202 ; GFX9-LABEL: v_pow_v2f32:
204 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
205 ; GFX9-NEXT: s_mov_b32 s4, 0x800000
206 ; GFX9-NEXT: v_mov_b32_e32 v4, 0x4f800000
207 ; GFX9-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0
208 ; GFX9-NEXT: v_cndmask_b32_e32 v5, 1.0, v4, vcc
209 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v5
210 ; GFX9-NEXT: v_mov_b32_e32 v5, 0x800000
211 ; GFX9-NEXT: v_cmp_lt_f32_e64 s[4:5], v1, v5
212 ; GFX9-NEXT: v_cndmask_b32_e64 v4, 1.0, v4, s[4:5]
213 ; GFX9-NEXT: v_log_f32_e32 v0, v0
214 ; GFX9-NEXT: v_mul_f32_e32 v1, v1, v4
215 ; GFX9-NEXT: v_log_f32_e32 v1, v1
216 ; GFX9-NEXT: v_mov_b32_e32 v6, 0x42000000
217 ; GFX9-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc
218 ; GFX9-NEXT: v_sub_f32_e32 v0, v0, v7
219 ; GFX9-NEXT: v_cndmask_b32_e64 v5, 0, v6, s[4:5]
220 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, v0, v2
221 ; GFX9-NEXT: s_mov_b32 s6, 0xc2fc0000
222 ; GFX9-NEXT: v_sub_f32_e32 v1, v1, v5
223 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42800000
224 ; GFX9-NEXT: v_cmp_gt_f32_e32 vcc, s6, v0
225 ; GFX9-NEXT: v_mul_legacy_f32_e32 v1, v1, v3
226 ; GFX9-NEXT: v_cndmask_b32_e32 v7, 0, v2, vcc
227 ; GFX9-NEXT: v_cmp_gt_f32_e64 s[4:5], s6, v1
228 ; GFX9-NEXT: v_add_f32_e32 v0, v0, v7
229 ; GFX9-NEXT: v_cndmask_b32_e64 v2, 0, v2, s[4:5]
230 ; GFX9-NEXT: v_exp_f32_e32 v0, v0
231 ; GFX9-NEXT: v_add_f32_e32 v1, v1, v2
232 ; GFX9-NEXT: v_exp_f32_e32 v1, v1
233 ; GFX9-NEXT: v_mov_b32_e32 v4, 0x1f800000
234 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 1.0, v4, vcc
235 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v2
236 ; GFX9-NEXT: v_cndmask_b32_e64 v2, 1.0, v4, s[4:5]
237 ; GFX9-NEXT: v_mul_f32_e32 v1, v1, v2
238 ; GFX9-NEXT: s_setpc_b64 s[30:31]
240 ; GFX10-LABEL: v_pow_v2f32:
242 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
243 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
244 ; GFX10-NEXT: v_cmp_gt_f32_e64 s4, 0x800000, v1
245 ; GFX10-NEXT: v_cndmask_b32_e64 v4, 1.0, 0x4f800000, vcc_lo
246 ; GFX10-NEXT: v_cndmask_b32_e64 v5, 1.0, 0x4f800000, s4
247 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v4
248 ; GFX10-NEXT: v_mul_f32_e32 v1, v1, v5
249 ; GFX10-NEXT: v_cndmask_b32_e64 v4, 0, 0x42000000, vcc_lo
250 ; GFX10-NEXT: v_cndmask_b32_e64 v5, 0, 0x42000000, s4
251 ; GFX10-NEXT: v_log_f32_e32 v0, v0
252 ; GFX10-NEXT: v_log_f32_e32 v1, v1
253 ; GFX10-NEXT: v_sub_f32_e32 v0, v0, v4
254 ; GFX10-NEXT: v_sub_f32_e32 v1, v1, v5
255 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, v0, v2
256 ; GFX10-NEXT: v_mul_legacy_f32_e32 v1, v1, v3
257 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
258 ; GFX10-NEXT: v_cmp_gt_f32_e64 s4, 0xc2fc0000, v1
259 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo
260 ; GFX10-NEXT: v_cndmask_b32_e64 v3, 0, 0x42800000, s4
261 ; GFX10-NEXT: v_add_f32_e32 v0, v0, v2
262 ; GFX10-NEXT: v_add_f32_e32 v1, v1, v3
263 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x1f800000, vcc_lo
264 ; GFX10-NEXT: v_cndmask_b32_e64 v3, 1.0, 0x1f800000, s4
265 ; GFX10-NEXT: v_exp_f32_e32 v0, v0
266 ; GFX10-NEXT: v_exp_f32_e32 v1, v1
267 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v2
268 ; GFX10-NEXT: v_mul_f32_e32 v1, v1, v3
269 ; GFX10-NEXT: s_setpc_b64 s[30:31]
271 ; GFX11-LABEL: v_pow_v2f32:
273 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
274 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
275 ; GFX11-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, v1
276 ; GFX11-NEXT: v_cndmask_b32_e64 v4, 1.0, 0x4f800000, vcc_lo
277 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
278 ; GFX11-NEXT: v_cndmask_b32_e64 v5, 1.0, 0x4f800000, s0
279 ; GFX11-NEXT: v_dual_mul_f32 v0, v0, v4 :: v_dual_mul_f32 v1, v1, v5
280 ; GFX11-NEXT: v_cndmask_b32_e64 v4, 0, 0x42000000, vcc_lo
281 ; GFX11-NEXT: v_cndmask_b32_e64 v5, 0, 0x42000000, s0
282 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
283 ; GFX11-NEXT: v_log_f32_e32 v0, v0
284 ; GFX11-NEXT: v_log_f32_e32 v1, v1
285 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
286 ; GFX11-NEXT: v_dual_sub_f32 v0, v0, v4 :: v_dual_sub_f32 v1, v1, v5
287 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
288 ; GFX11-NEXT: v_dual_mul_dx9_zero_f32 v0, v0, v2 :: v_dual_mul_dx9_zero_f32 v1, v1, v3
289 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
290 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
291 ; GFX11-NEXT: v_cmp_gt_f32_e64 s0, 0xc2fc0000, v1
292 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo
293 ; GFX11-NEXT: v_cndmask_b32_e64 v3, 0, 0x42800000, s0
294 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
295 ; GFX11-NEXT: v_dual_add_f32 v0, v0, v2 :: v_dual_add_f32 v1, v1, v3
296 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x1f800000, vcc_lo
297 ; GFX11-NEXT: v_cndmask_b32_e64 v3, 1.0, 0x1f800000, s0
298 ; GFX11-NEXT: v_exp_f32_e32 v0, v0
299 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)
300 ; GFX11-NEXT: v_exp_f32_e32 v1, v1
301 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
302 ; GFX11-NEXT: v_dual_mul_f32 v0, v0, v2 :: v_dual_mul_f32 v1, v1, v3
303 ; GFX11-NEXT: s_setpc_b64 s[30:31]
304 %pow = call <2 x float> @llvm.pow.v2f32(<2 x float> %x, <2 x float> %y)
308 define half @v_pow_f16(half %x, half %y) {
309 ; GFX6-LABEL: v_pow_f16:
311 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
312 ; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
313 ; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
314 ; GFX6-NEXT: v_mov_b32_e32 v2, 0xc2fc0000
315 ; GFX6-NEXT: v_mov_b32_e32 v3, 0x42800000
316 ; GFX6-NEXT: v_log_f32_e32 v0, v0
317 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
318 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v2
319 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v3, vcc
320 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
321 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
322 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x1f800000
323 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
324 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
325 ; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
326 ; GFX6-NEXT: s_setpc_b64 s[30:31]
328 ; GFX8-LABEL: v_pow_f16:
330 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
331 ; GFX8-NEXT: v_log_f16_e32 v0, v0
332 ; GFX8-NEXT: v_cvt_f32_f16_e32 v1, v1
333 ; GFX8-NEXT: v_cvt_f32_f16_e32 v0, v0
334 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
335 ; GFX8-NEXT: v_cvt_f16_f32_e32 v0, v0
336 ; GFX8-NEXT: v_exp_f16_e32 v0, v0
337 ; GFX8-NEXT: s_setpc_b64 s[30:31]
339 ; GFX9-LABEL: v_pow_f16:
341 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
342 ; GFX9-NEXT: v_log_f16_e32 v0, v0
343 ; GFX9-NEXT: v_cvt_f32_f16_e32 v1, v1
344 ; GFX9-NEXT: v_cvt_f32_f16_e32 v0, v0
345 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
346 ; GFX9-NEXT: v_cvt_f16_f32_e32 v0, v0
347 ; GFX9-NEXT: v_exp_f16_e32 v0, v0
348 ; GFX9-NEXT: s_setpc_b64 s[30:31]
350 ; GFX10-LABEL: v_pow_f16:
352 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
353 ; GFX10-NEXT: v_log_f16_e32 v0, v0
354 ; GFX10-NEXT: v_cvt_f32_f16_e32 v1, v1
355 ; GFX10-NEXT: v_cvt_f32_f16_e32 v0, v0
356 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
357 ; GFX10-NEXT: v_cvt_f16_f32_e32 v0, v0
358 ; GFX10-NEXT: v_exp_f16_e32 v0, v0
359 ; GFX10-NEXT: s_setpc_b64 s[30:31]
361 ; GFX11-LABEL: v_pow_f16:
363 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
364 ; GFX11-NEXT: v_log_f16_e32 v0, v0
365 ; GFX11-NEXT: v_cvt_f32_f16_e32 v1, v1
366 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
367 ; GFX11-NEXT: v_cvt_f32_f16_e32 v0, v0
368 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
369 ; GFX11-NEXT: v_mul_dx9_zero_f32_e32 v0, v0, v1
370 ; GFX11-NEXT: v_cvt_f16_f32_e32 v0, v0
371 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
372 ; GFX11-NEXT: v_exp_f16_e32 v0, v0
373 ; GFX11-NEXT: s_setpc_b64 s[30:31]
374 %pow = call half @llvm.pow.f16(half %x, half %y)
378 define <2 x half> @v_pow_v2f16(<2 x half> %x, <2 x half> %y) {
379 ; GFX6-LABEL: v_pow_v2f16:
381 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
382 ; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
383 ; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
384 ; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
385 ; GFX6-NEXT: s_mov_b32 s4, 0xc2fc0000
386 ; GFX6-NEXT: v_log_f32_e32 v0, v0
387 ; GFX6-NEXT: v_mov_b32_e32 v4, 0x42800000
388 ; GFX6-NEXT: v_log_f32_e32 v1, v1
389 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, v0, v2
390 ; GFX6-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0
391 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
392 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v2
393 ; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v3
394 ; GFX6-NEXT: v_mov_b32_e32 v3, 0x1f800000
395 ; GFX6-NEXT: v_cndmask_b32_e32 v5, 1.0, v3, vcc
396 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
397 ; GFX6-NEXT: v_mul_legacy_f32_e32 v1, v1, v2
398 ; GFX6-NEXT: v_cmp_gt_f32_e32 vcc, s4, v1
399 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc
400 ; GFX6-NEXT: v_add_f32_e32 v1, v1, v2
401 ; GFX6-NEXT: v_exp_f32_e32 v1, v1
402 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
403 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v5
404 ; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
405 ; GFX6-NEXT: v_mul_f32_e32 v1, v1, v2
406 ; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
407 ; GFX6-NEXT: s_setpc_b64 s[30:31]
409 ; GFX8-LABEL: v_pow_v2f16:
411 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
412 ; GFX8-NEXT: v_log_f16_e32 v2, v0
413 ; GFX8-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
414 ; GFX8-NEXT: v_cvt_f32_f16_e32 v3, v1
415 ; GFX8-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
416 ; GFX8-NEXT: v_cvt_f32_f16_e32 v2, v2
417 ; GFX8-NEXT: v_cvt_f32_f16_e32 v0, v0
418 ; GFX8-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
419 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
420 ; GFX8-NEXT: v_cvt_f16_f32_e32 v1, v2
421 ; GFX8-NEXT: v_cvt_f16_f32_e32 v0, v0
422 ; GFX8-NEXT: v_exp_f16_e32 v1, v1
423 ; GFX8-NEXT: v_exp_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD
424 ; GFX8-NEXT: v_or_b32_e32 v0, v1, v0
425 ; GFX8-NEXT: s_setpc_b64 s[30:31]
427 ; GFX9-LABEL: v_pow_v2f16:
429 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
430 ; GFX9-NEXT: v_log_f16_e32 v2, v0
431 ; GFX9-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
432 ; GFX9-NEXT: v_cvt_f32_f16_e32 v3, v1
433 ; GFX9-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
434 ; GFX9-NEXT: v_cvt_f32_f16_e32 v2, v2
435 ; GFX9-NEXT: v_cvt_f32_f16_e32 v0, v0
436 ; GFX9-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
437 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
438 ; GFX9-NEXT: v_cvt_f16_f32_e32 v1, v2
439 ; GFX9-NEXT: v_cvt_f16_f32_e32 v0, v0
440 ; GFX9-NEXT: v_exp_f16_e32 v1, v1
441 ; GFX9-NEXT: v_exp_f16_e32 v0, v0
442 ; GFX9-NEXT: v_lshl_or_b32 v0, v0, 16, v1
443 ; GFX9-NEXT: s_setpc_b64 s[30:31]
445 ; GFX10-LABEL: v_pow_v2f16:
447 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
448 ; GFX10-NEXT: v_log_f16_e32 v2, v0
449 ; GFX10-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
450 ; GFX10-NEXT: v_cvt_f32_f16_e32 v3, v1
451 ; GFX10-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
452 ; GFX10-NEXT: v_cvt_f32_f16_e32 v2, v2
453 ; GFX10-NEXT: v_cvt_f32_f16_e32 v0, v0
454 ; GFX10-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
455 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
456 ; GFX10-NEXT: v_cvt_f16_f32_e32 v2, v2
457 ; GFX10-NEXT: v_cvt_f16_f32_e32 v0, v0
458 ; GFX10-NEXT: v_exp_f16_e32 v1, v2
459 ; GFX10-NEXT: v_exp_f16_e32 v0, v0
460 ; GFX10-NEXT: v_and_b32_e32 v1, 0xffff, v1
461 ; GFX10-NEXT: v_lshl_or_b32 v0, v0, 16, v1
462 ; GFX10-NEXT: s_setpc_b64 s[30:31]
464 ; GFX11-LABEL: v_pow_v2f16:
466 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
467 ; GFX11-NEXT: v_log_f16_e32 v2, v0
468 ; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v0
469 ; GFX11-NEXT: v_lshrrev_b32_e32 v3, 16, v1
470 ; GFX11-NEXT: v_cvt_f32_f16_e32 v1, v1
471 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
472 ; GFX11-NEXT: v_log_f16_e32 v0, v0
473 ; GFX11-NEXT: v_cvt_f32_f16_e32 v3, v3
474 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
475 ; GFX11-NEXT: v_cvt_f32_f16_e32 v2, v2
476 ; GFX11-NEXT: v_cvt_f32_f16_e32 v0, v0
477 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
478 ; GFX11-NEXT: v_dual_mul_dx9_zero_f32 v1, v2, v1 :: v_dual_mul_dx9_zero_f32 v0, v0, v3
479 ; GFX11-NEXT: v_cvt_f16_f32_e32 v1, v1
480 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
481 ; GFX11-NEXT: v_cvt_f16_f32_e32 v0, v0
482 ; GFX11-NEXT: v_exp_f16_e32 v1, v1
483 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
484 ; GFX11-NEXT: v_exp_f16_e32 v0, v0
485 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
486 ; GFX11-NEXT: v_and_b32_e32 v1, 0xffff, v1
487 ; GFX11-NEXT: v_lshl_or_b32 v0, v0, 16, v1
488 ; GFX11-NEXT: s_setpc_b64 s[30:31]
489 %pow = call <2 x half> @llvm.pow.v2f16(<2 x half> %x, <2 x half> %y)
493 define <2 x half> @v_pow_v2f16_fneg_lhs(<2 x half> %x, <2 x half> %y) {
494 ; GFX6-LABEL: v_pow_v2f16_fneg_lhs:
496 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
497 ; GFX6-NEXT: v_lshlrev_b32_e32 v1, 16, v1
498 ; GFX6-NEXT: v_and_b32_e32 v0, 0xffff, v0
499 ; GFX6-NEXT: v_or_b32_e32 v0, v1, v0
500 ; GFX6-NEXT: v_xor_b32_e32 v0, 0x80008000, v0
501 ; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v0
502 ; GFX6-NEXT: v_lshrrev_b32_e32 v0, 16, v0
503 ; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
504 ; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
505 ; GFX6-NEXT: v_log_f32_e32 v1, v1
506 ; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
507 ; GFX6-NEXT: v_log_f32_e32 v0, v0
508 ; GFX6-NEXT: s_mov_b32 s4, 0xc2fc0000
509 ; GFX6-NEXT: v_mul_legacy_f32_e32 v1, v1, v2
510 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
511 ; GFX6-NEXT: v_cmp_gt_f32_e32 vcc, s4, v1
512 ; GFX6-NEXT: v_cndmask_b32_e32 v4, 0, v2, vcc
513 ; GFX6-NEXT: v_add_f32_e32 v1, v1, v4
514 ; GFX6-NEXT: v_mov_b32_e32 v4, 0x1f800000
515 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, v0, v3
516 ; GFX6-NEXT: v_cndmask_b32_e32 v5, 1.0, v4, vcc
517 ; GFX6-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0
518 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
519 ; GFX6-NEXT: v_exp_f32_e32 v1, v1
520 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v2
521 ; GFX6-NEXT: v_exp_f32_e32 v2, v0
522 ; GFX6-NEXT: v_mul_f32_e32 v0, v1, v5
523 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v4, vcc
524 ; GFX6-NEXT: v_mul_f32_e32 v1, v2, v1
525 ; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
526 ; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
527 ; GFX6-NEXT: s_setpc_b64 s[30:31]
529 ; GFX8-LABEL: v_pow_v2f16_fneg_lhs:
531 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
532 ; GFX8-NEXT: v_xor_b32_e32 v0, 0x80008000, v0
533 ; GFX8-NEXT: v_log_f16_e32 v2, v0
534 ; GFX8-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
535 ; GFX8-NEXT: v_cvt_f32_f16_e32 v3, v1
536 ; GFX8-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
537 ; GFX8-NEXT: v_cvt_f32_f16_e32 v2, v2
538 ; GFX8-NEXT: v_cvt_f32_f16_e32 v0, v0
539 ; GFX8-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
540 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
541 ; GFX8-NEXT: v_cvt_f16_f32_e32 v1, v2
542 ; GFX8-NEXT: v_cvt_f16_f32_e32 v0, v0
543 ; GFX8-NEXT: v_exp_f16_e32 v1, v1
544 ; GFX8-NEXT: v_exp_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD
545 ; GFX8-NEXT: v_or_b32_e32 v0, v1, v0
546 ; GFX8-NEXT: s_setpc_b64 s[30:31]
548 ; GFX9-LABEL: v_pow_v2f16_fneg_lhs:
550 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
551 ; GFX9-NEXT: v_xor_b32_e32 v0, 0x80008000, v0
552 ; GFX9-NEXT: v_log_f16_e32 v2, v0
553 ; GFX9-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
554 ; GFX9-NEXT: v_cvt_f32_f16_e32 v3, v1
555 ; GFX9-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
556 ; GFX9-NEXT: v_cvt_f32_f16_e32 v2, v2
557 ; GFX9-NEXT: v_cvt_f32_f16_e32 v0, v0
558 ; GFX9-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
559 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
560 ; GFX9-NEXT: v_cvt_f16_f32_e32 v1, v2
561 ; GFX9-NEXT: v_cvt_f16_f32_e32 v0, v0
562 ; GFX9-NEXT: v_exp_f16_e32 v1, v1
563 ; GFX9-NEXT: v_exp_f16_e32 v0, v0
564 ; GFX9-NEXT: v_lshl_or_b32 v0, v0, 16, v1
565 ; GFX9-NEXT: s_setpc_b64 s[30:31]
567 ; GFX10-LABEL: v_pow_v2f16_fneg_lhs:
569 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
570 ; GFX10-NEXT: v_xor_b32_e32 v0, 0x80008000, v0
571 ; GFX10-NEXT: v_cvt_f32_f16_e32 v3, v1
572 ; GFX10-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
573 ; GFX10-NEXT: v_log_f16_e32 v2, v0
574 ; GFX10-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
575 ; GFX10-NEXT: v_cvt_f32_f16_e32 v2, v2
576 ; GFX10-NEXT: v_cvt_f32_f16_e32 v0, v0
577 ; GFX10-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
578 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
579 ; GFX10-NEXT: v_cvt_f16_f32_e32 v2, v2
580 ; GFX10-NEXT: v_cvt_f16_f32_e32 v0, v0
581 ; GFX10-NEXT: v_exp_f16_e32 v1, v2
582 ; GFX10-NEXT: v_exp_f16_e32 v0, v0
583 ; GFX10-NEXT: v_and_b32_e32 v1, 0xffff, v1
584 ; GFX10-NEXT: v_lshl_or_b32 v0, v0, 16, v1
585 ; GFX10-NEXT: s_setpc_b64 s[30:31]
587 ; GFX11-LABEL: v_pow_v2f16_fneg_lhs:
589 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
590 ; GFX11-NEXT: v_xor_b32_e32 v0, 0x80008000, v0
591 ; GFX11-NEXT: v_lshrrev_b32_e32 v3, 16, v1
592 ; GFX11-NEXT: v_cvt_f32_f16_e32 v1, v1
593 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
594 ; GFX11-NEXT: v_log_f16_e32 v2, v0
595 ; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v0
596 ; GFX11-NEXT: v_cvt_f32_f16_e32 v3, v3
597 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
598 ; GFX11-NEXT: v_log_f16_e32 v0, v0
599 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
600 ; GFX11-NEXT: v_cvt_f32_f16_e32 v2, v2
601 ; GFX11-NEXT: v_cvt_f32_f16_e32 v0, v0
602 ; GFX11-NEXT: v_dual_mul_dx9_zero_f32 v1, v2, v1 :: v_dual_mul_dx9_zero_f32 v0, v0, v3
603 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
604 ; GFX11-NEXT: v_cvt_f16_f32_e32 v1, v1
605 ; GFX11-NEXT: v_cvt_f16_f32_e32 v0, v0
606 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
607 ; GFX11-NEXT: v_exp_f16_e32 v1, v1
608 ; GFX11-NEXT: v_exp_f16_e32 v0, v0
609 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
610 ; GFX11-NEXT: v_and_b32_e32 v1, 0xffff, v1
611 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
612 ; GFX11-NEXT: v_lshl_or_b32 v0, v0, 16, v1
613 ; GFX11-NEXT: s_setpc_b64 s[30:31]
614 %x.fneg = fneg <2 x half> %x
615 %pow = call <2 x half> @llvm.pow.v2f16(<2 x half> %x.fneg, <2 x half> %y)
619 define <2 x half> @v_pow_v2f16_fneg_rhs(<2 x half> %x, <2 x half> %y) {
620 ; GFX6-LABEL: v_pow_v2f16_fneg_rhs:
622 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
623 ; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
624 ; GFX6-NEXT: v_lshlrev_b32_e32 v3, 16, v3
625 ; GFX6-NEXT: v_and_b32_e32 v2, 0xffff, v2
626 ; GFX6-NEXT: v_or_b32_e32 v2, v3, v2
627 ; GFX6-NEXT: v_xor_b32_e32 v2, 0x80008000, v2
628 ; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
629 ; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v2
630 ; GFX6-NEXT: v_log_f32_e32 v0, v0
631 ; GFX6-NEXT: v_lshrrev_b32_e32 v2, 16, v2
632 ; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
633 ; GFX6-NEXT: v_log_f32_e32 v1, v1
634 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, v0, v3
635 ; GFX6-NEXT: s_mov_b32 s4, 0xc2fc0000
636 ; GFX6-NEXT: v_mov_b32_e32 v3, 0x42800000
637 ; GFX6-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0
638 ; GFX6-NEXT: v_cndmask_b32_e32 v4, 0, v3, vcc
639 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v4
640 ; GFX6-NEXT: v_mov_b32_e32 v4, 0x1f800000
641 ; GFX6-NEXT: v_mul_legacy_f32_e32 v1, v1, v2
642 ; GFX6-NEXT: v_cndmask_b32_e32 v5, 1.0, v4, vcc
643 ; GFX6-NEXT: v_cmp_gt_f32_e32 vcc, s4, v1
644 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v3, vcc
645 ; GFX6-NEXT: v_add_f32_e32 v1, v1, v2
646 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
647 ; GFX6-NEXT: v_exp_f32_e32 v1, v1
648 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 1.0, v4, vcc
649 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v5
650 ; GFX6-NEXT: v_mul_f32_e32 v1, v1, v2
651 ; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
652 ; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
653 ; GFX6-NEXT: s_setpc_b64 s[30:31]
655 ; GFX8-LABEL: v_pow_v2f16_fneg_rhs:
657 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
658 ; GFX8-NEXT: v_log_f16_e32 v2, v0
659 ; GFX8-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
660 ; GFX8-NEXT: v_xor_b32_e32 v1, 0x80008000, v1
661 ; GFX8-NEXT: v_cvt_f32_f16_e32 v3, v1
662 ; GFX8-NEXT: v_cvt_f32_f16_e32 v2, v2
663 ; GFX8-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
664 ; GFX8-NEXT: v_cvt_f32_f16_e32 v0, v0
665 ; GFX8-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
666 ; GFX8-NEXT: v_cvt_f16_f32_e32 v2, v2
667 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
668 ; GFX8-NEXT: v_cvt_f16_f32_e32 v0, v0
669 ; GFX8-NEXT: v_exp_f16_e32 v1, v2
670 ; GFX8-NEXT: v_exp_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD
671 ; GFX8-NEXT: v_or_b32_e32 v0, v1, v0
672 ; GFX8-NEXT: s_setpc_b64 s[30:31]
674 ; GFX9-LABEL: v_pow_v2f16_fneg_rhs:
676 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
677 ; GFX9-NEXT: v_log_f16_e32 v2, v0
678 ; GFX9-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
679 ; GFX9-NEXT: v_xor_b32_e32 v1, 0x80008000, v1
680 ; GFX9-NEXT: v_cvt_f32_f16_e32 v3, v1
681 ; GFX9-NEXT: v_cvt_f32_f16_e32 v2, v2
682 ; GFX9-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
683 ; GFX9-NEXT: v_cvt_f32_f16_e32 v0, v0
684 ; GFX9-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
685 ; GFX9-NEXT: v_cvt_f16_f32_e32 v2, v2
686 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
687 ; GFX9-NEXT: v_cvt_f16_f32_e32 v0, v0
688 ; GFX9-NEXT: v_exp_f16_e32 v1, v2
689 ; GFX9-NEXT: v_exp_f16_e32 v0, v0
690 ; GFX9-NEXT: v_lshl_or_b32 v0, v0, 16, v1
691 ; GFX9-NEXT: s_setpc_b64 s[30:31]
693 ; GFX10-LABEL: v_pow_v2f16_fneg_rhs:
695 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
696 ; GFX10-NEXT: v_log_f16_e32 v2, v0
697 ; GFX10-NEXT: v_xor_b32_e32 v1, 0x80008000, v1
698 ; GFX10-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
699 ; GFX10-NEXT: v_cvt_f32_f16_e32 v3, v1
700 ; GFX10-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
701 ; GFX10-NEXT: v_cvt_f32_f16_e32 v2, v2
702 ; GFX10-NEXT: v_cvt_f32_f16_e32 v0, v0
703 ; GFX10-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
704 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
705 ; GFX10-NEXT: v_cvt_f16_f32_e32 v2, v2
706 ; GFX10-NEXT: v_cvt_f16_f32_e32 v0, v0
707 ; GFX10-NEXT: v_exp_f16_e32 v1, v2
708 ; GFX10-NEXT: v_exp_f16_e32 v0, v0
709 ; GFX10-NEXT: v_and_b32_e32 v1, 0xffff, v1
710 ; GFX10-NEXT: v_lshl_or_b32 v0, v0, 16, v1
711 ; GFX10-NEXT: s_setpc_b64 s[30:31]
713 ; GFX11-LABEL: v_pow_v2f16_fneg_rhs:
715 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
716 ; GFX11-NEXT: v_log_f16_e32 v2, v0
717 ; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v0
718 ; GFX11-NEXT: v_xor_b32_e32 v1, 0x80008000, v1
719 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
720 ; GFX11-NEXT: v_log_f16_e32 v0, v0
721 ; GFX11-NEXT: v_lshrrev_b32_e32 v3, 16, v1
722 ; GFX11-NEXT: v_cvt_f32_f16_e32 v1, v1
723 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
724 ; GFX11-NEXT: v_cvt_f32_f16_e32 v2, v2
725 ; GFX11-NEXT: v_cvt_f32_f16_e32 v3, v3
726 ; GFX11-NEXT: v_cvt_f32_f16_e32 v0, v0
727 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
728 ; GFX11-NEXT: v_dual_mul_dx9_zero_f32 v1, v2, v1 :: v_dual_mul_dx9_zero_f32 v0, v0, v3
729 ; GFX11-NEXT: v_cvt_f16_f32_e32 v1, v1
730 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
731 ; GFX11-NEXT: v_cvt_f16_f32_e32 v0, v0
732 ; GFX11-NEXT: v_exp_f16_e32 v1, v1
733 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
734 ; GFX11-NEXT: v_exp_f16_e32 v0, v0
735 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
736 ; GFX11-NEXT: v_and_b32_e32 v1, 0xffff, v1
737 ; GFX11-NEXT: v_lshl_or_b32 v0, v0, 16, v1
738 ; GFX11-NEXT: s_setpc_b64 s[30:31]
739 %y.fneg = fneg <2 x half> %y
740 %pow = call <2 x half> @llvm.pow.v2f16(<2 x half> %x, <2 x half> %y.fneg)
744 define <2 x half> @v_pow_v2f16_fneg_lhs_rhs(<2 x half> %x, <2 x half> %y) {
745 ; GFX6-LABEL: v_pow_v2f16_fneg_lhs_rhs:
747 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
748 ; GFX6-NEXT: v_lshlrev_b32_e32 v1, 16, v1
749 ; GFX6-NEXT: v_and_b32_e32 v0, 0xffff, v0
750 ; GFX6-NEXT: v_or_b32_e32 v0, v1, v0
751 ; GFX6-NEXT: v_xor_b32_e32 v0, 0x80008000, v0
752 ; GFX6-NEXT: v_lshlrev_b32_e32 v1, 16, v3
753 ; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v0
754 ; GFX6-NEXT: v_and_b32_e32 v2, 0xffff, v2
755 ; GFX6-NEXT: v_or_b32_e32 v1, v1, v2
756 ; GFX6-NEXT: v_lshrrev_b32_e32 v0, 16, v0
757 ; GFX6-NEXT: v_xor_b32_e32 v1, 0x80008000, v1
758 ; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
759 ; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v1
760 ; GFX6-NEXT: v_log_f32_e32 v3, v3
761 ; GFX6-NEXT: v_lshrrev_b32_e32 v1, 16, v1
762 ; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
763 ; GFX6-NEXT: v_log_f32_e32 v0, v0
764 ; GFX6-NEXT: v_mul_legacy_f32_e32 v2, v3, v2
765 ; GFX6-NEXT: s_mov_b32 s4, 0xc2fc0000
766 ; GFX6-NEXT: v_mov_b32_e32 v3, 0x42800000
767 ; GFX6-NEXT: v_cmp_gt_f32_e32 vcc, s4, v2
768 ; GFX6-NEXT: v_cndmask_b32_e32 v4, 0, v3, vcc
769 ; GFX6-NEXT: v_add_f32_e32 v2, v2, v4
770 ; GFX6-NEXT: v_mov_b32_e32 v4, 0x1f800000
771 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
772 ; GFX6-NEXT: v_cndmask_b32_e32 v5, 1.0, v4, vcc
773 ; GFX6-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0
774 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v3, vcc
775 ; GFX6-NEXT: v_exp_f32_e32 v2, v2
776 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
777 ; GFX6-NEXT: v_exp_f32_e32 v1, v0
778 ; GFX6-NEXT: v_mul_f32_e32 v0, v2, v5
779 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 1.0, v4, vcc
780 ; GFX6-NEXT: v_mul_f32_e32 v1, v1, v2
781 ; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
782 ; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
783 ; GFX6-NEXT: s_setpc_b64 s[30:31]
785 ; GFX8-LABEL: v_pow_v2f16_fneg_lhs_rhs:
787 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
788 ; GFX8-NEXT: v_xor_b32_e32 v0, 0x80008000, v0
789 ; GFX8-NEXT: v_log_f16_e32 v2, v0
790 ; GFX8-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
791 ; GFX8-NEXT: v_xor_b32_e32 v1, 0x80008000, v1
792 ; GFX8-NEXT: v_cvt_f32_f16_e32 v3, v1
793 ; GFX8-NEXT: v_cvt_f32_f16_e32 v2, v2
794 ; GFX8-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
795 ; GFX8-NEXT: v_cvt_f32_f16_e32 v0, v0
796 ; GFX8-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
797 ; GFX8-NEXT: v_cvt_f16_f32_e32 v2, v2
798 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
799 ; GFX8-NEXT: v_cvt_f16_f32_e32 v0, v0
800 ; GFX8-NEXT: v_exp_f16_e32 v1, v2
801 ; GFX8-NEXT: v_exp_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD
802 ; GFX8-NEXT: v_or_b32_e32 v0, v1, v0
803 ; GFX8-NEXT: s_setpc_b64 s[30:31]
805 ; GFX9-LABEL: v_pow_v2f16_fneg_lhs_rhs:
807 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
808 ; GFX9-NEXT: v_xor_b32_e32 v0, 0x80008000, v0
809 ; GFX9-NEXT: v_log_f16_e32 v2, v0
810 ; GFX9-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
811 ; GFX9-NEXT: v_xor_b32_e32 v1, 0x80008000, v1
812 ; GFX9-NEXT: v_cvt_f32_f16_e32 v3, v1
813 ; GFX9-NEXT: v_cvt_f32_f16_e32 v2, v2
814 ; GFX9-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
815 ; GFX9-NEXT: v_cvt_f32_f16_e32 v0, v0
816 ; GFX9-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
817 ; GFX9-NEXT: v_cvt_f16_f32_e32 v2, v2
818 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
819 ; GFX9-NEXT: v_cvt_f16_f32_e32 v0, v0
820 ; GFX9-NEXT: v_exp_f16_e32 v1, v2
821 ; GFX9-NEXT: v_exp_f16_e32 v0, v0
822 ; GFX9-NEXT: v_lshl_or_b32 v0, v0, 16, v1
823 ; GFX9-NEXT: s_setpc_b64 s[30:31]
825 ; GFX10-LABEL: v_pow_v2f16_fneg_lhs_rhs:
827 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
828 ; GFX10-NEXT: v_xor_b32_e32 v0, 0x80008000, v0
829 ; GFX10-NEXT: v_xor_b32_e32 v1, 0x80008000, v1
830 ; GFX10-NEXT: v_log_f16_e32 v2, v0
831 ; GFX10-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
832 ; GFX10-NEXT: v_cvt_f32_f16_e32 v3, v1
833 ; GFX10-NEXT: v_cvt_f32_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
834 ; GFX10-NEXT: v_cvt_f32_f16_e32 v2, v2
835 ; GFX10-NEXT: v_cvt_f32_f16_e32 v0, v0
836 ; GFX10-NEXT: v_mul_legacy_f32_e32 v2, v2, v3
837 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
838 ; GFX10-NEXT: v_cvt_f16_f32_e32 v2, v2
839 ; GFX10-NEXT: v_cvt_f16_f32_e32 v0, v0
840 ; GFX10-NEXT: v_exp_f16_e32 v1, v2
841 ; GFX10-NEXT: v_exp_f16_e32 v0, v0
842 ; GFX10-NEXT: v_and_b32_e32 v1, 0xffff, v1
843 ; GFX10-NEXT: v_lshl_or_b32 v0, v0, 16, v1
844 ; GFX10-NEXT: s_setpc_b64 s[30:31]
846 ; GFX11-LABEL: v_pow_v2f16_fneg_lhs_rhs:
848 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
849 ; GFX11-NEXT: v_xor_b32_e32 v0, 0x80008000, v0
850 ; GFX11-NEXT: v_xor_b32_e32 v1, 0x80008000, v1
851 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
852 ; GFX11-NEXT: v_log_f16_e32 v2, v0
853 ; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v0
854 ; GFX11-NEXT: v_lshrrev_b32_e32 v3, 16, v1
855 ; GFX11-NEXT: v_cvt_f32_f16_e32 v1, v1
856 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
857 ; GFX11-NEXT: v_log_f16_e32 v0, v0
858 ; GFX11-NEXT: v_cvt_f32_f16_e32 v3, v3
859 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
860 ; GFX11-NEXT: v_cvt_f32_f16_e32 v2, v2
861 ; GFX11-NEXT: v_cvt_f32_f16_e32 v0, v0
862 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
863 ; GFX11-NEXT: v_dual_mul_dx9_zero_f32 v1, v2, v1 :: v_dual_mul_dx9_zero_f32 v0, v0, v3
864 ; GFX11-NEXT: v_cvt_f16_f32_e32 v1, v1
865 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
866 ; GFX11-NEXT: v_cvt_f16_f32_e32 v0, v0
867 ; GFX11-NEXT: v_exp_f16_e32 v1, v1
868 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
869 ; GFX11-NEXT: v_exp_f16_e32 v0, v0
870 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
871 ; GFX11-NEXT: v_and_b32_e32 v1, 0xffff, v1
872 ; GFX11-NEXT: v_lshl_or_b32 v0, v0, 16, v1
873 ; GFX11-NEXT: s_setpc_b64 s[30:31]
874 %x.fneg = fneg <2 x half> %x
875 %y.fneg = fneg <2 x half> %y
876 %pow = call <2 x half> @llvm.pow.v2f16(<2 x half> %x.fneg, <2 x half> %y.fneg)
881 ; define double @v_pow_f64(double %x, double %y) {
882 ; %pow = call double @llvm.pow.f64(double %x, double %y)
886 define float @v_pow_f32_fabs_lhs(float %x, float %y) {
887 ; GFX6-LABEL: v_pow_f32_fabs_lhs:
889 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
890 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x800000
891 ; GFX6-NEXT: v_mov_b32_e32 v3, 0x4f800000
892 ; GFX6-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v2
893 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
894 ; GFX6-NEXT: v_mul_f32_e64 v0, |v0|, v2
895 ; GFX6-NEXT: v_log_f32_e32 v0, v0
896 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42000000
897 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
898 ; GFX6-NEXT: v_sub_f32_e32 v0, v0, v2
899 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
900 ; GFX6-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
901 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
902 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
903 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
904 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
905 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
906 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x1f800000
907 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
908 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
909 ; GFX6-NEXT: s_setpc_b64 s[30:31]
911 ; GFX8-LABEL: v_pow_f32_fabs_lhs:
913 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
914 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x800000
915 ; GFX8-NEXT: v_mov_b32_e32 v3, 0x4f800000
916 ; GFX8-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v2
917 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
918 ; GFX8-NEXT: v_mul_f32_e64 v0, |v0|, v2
919 ; GFX8-NEXT: v_log_f32_e32 v0, v0
920 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42000000
921 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
922 ; GFX8-NEXT: v_sub_f32_e32 v0, v0, v2
923 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
924 ; GFX8-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
925 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42800000
926 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
927 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
928 ; GFX8-NEXT: v_add_f32_e32 v0, v0, v1
929 ; GFX8-NEXT: v_exp_f32_e32 v0, v0
930 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x1f800000
931 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
932 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v1
933 ; GFX8-NEXT: s_setpc_b64 s[30:31]
935 ; GFX9-LABEL: v_pow_f32_fabs_lhs:
937 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
938 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x800000
939 ; GFX9-NEXT: v_mov_b32_e32 v3, 0x4f800000
940 ; GFX9-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v2
941 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
942 ; GFX9-NEXT: v_mul_f32_e64 v0, |v0|, v2
943 ; GFX9-NEXT: v_log_f32_e32 v0, v0
944 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42000000
945 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
946 ; GFX9-NEXT: v_sub_f32_e32 v0, v0, v2
947 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
948 ; GFX9-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
949 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42800000
950 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
951 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
952 ; GFX9-NEXT: v_add_f32_e32 v0, v0, v1
953 ; GFX9-NEXT: v_exp_f32_e32 v0, v0
954 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x1f800000
955 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
956 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1
957 ; GFX9-NEXT: s_setpc_b64 s[30:31]
959 ; GFX10-LABEL: v_pow_f32_fabs_lhs:
961 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
962 ; GFX10-NEXT: v_cmp_gt_f32_e64 s4, 0x800000, |v0|
963 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s4
964 ; GFX10-NEXT: v_mul_f32_e64 v0, |v0|, v2
965 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, s4
966 ; GFX10-NEXT: v_log_f32_e32 v0, v0
967 ; GFX10-NEXT: v_sub_f32_e32 v0, v0, v2
968 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
969 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
970 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
971 ; GFX10-NEXT: v_add_f32_e32 v0, v0, v1
972 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
973 ; GFX10-NEXT: v_exp_f32_e32 v0, v0
974 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1
975 ; GFX10-NEXT: s_setpc_b64 s[30:31]
977 ; GFX11-LABEL: v_pow_f32_fabs_lhs:
979 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
980 ; GFX11-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, |v0|
981 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
982 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s0
983 ; GFX11-NEXT: v_mul_f32_e64 v0, |v0|, v2
984 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, s0
985 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
986 ; GFX11-NEXT: v_log_f32_e32 v0, v0
987 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
988 ; GFX11-NEXT: v_sub_f32_e32 v0, v0, v2
989 ; GFX11-NEXT: v_mul_dx9_zero_f32_e32 v0, v0, v1
990 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
991 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
992 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
993 ; GFX11-NEXT: v_add_f32_e32 v0, v0, v1
994 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
995 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)
996 ; GFX11-NEXT: v_exp_f32_e32 v0, v0
997 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
998 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1
999 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1000 %fabs.x = call float @llvm.fabs.f32(float %x)
1001 %pow = call float @llvm.pow.f32(float %fabs.x, float %y)
1005 define float @v_pow_f32_fabs_rhs(float %x, float %y) {
1006 ; GFX6-LABEL: v_pow_f32_fabs_rhs:
1008 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1009 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x800000
1010 ; GFX6-NEXT: v_mov_b32_e32 v3, 0x4f800000
1011 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v2
1012 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1013 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v2
1014 ; GFX6-NEXT: v_log_f32_e32 v0, v0
1015 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42000000
1016 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1017 ; GFX6-NEXT: v_sub_f32_e32 v0, v0, v2
1018 ; GFX6-NEXT: v_mul_legacy_f32_e64 v0, v0, |v1|
1019 ; GFX6-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1020 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
1021 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1022 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1023 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
1024 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
1025 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x1f800000
1026 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1027 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
1028 ; GFX6-NEXT: s_setpc_b64 s[30:31]
1030 ; GFX8-LABEL: v_pow_f32_fabs_rhs:
1032 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1033 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x800000
1034 ; GFX8-NEXT: v_mov_b32_e32 v3, 0x4f800000
1035 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v2
1036 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1037 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v2
1038 ; GFX8-NEXT: v_log_f32_e32 v0, v0
1039 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42000000
1040 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1041 ; GFX8-NEXT: v_sub_f32_e32 v0, v0, v2
1042 ; GFX8-NEXT: v_mul_legacy_f32_e64 v0, v0, |v1|
1043 ; GFX8-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1044 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42800000
1045 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1046 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1047 ; GFX8-NEXT: v_add_f32_e32 v0, v0, v1
1048 ; GFX8-NEXT: v_exp_f32_e32 v0, v0
1049 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x1f800000
1050 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1051 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v1
1052 ; GFX8-NEXT: s_setpc_b64 s[30:31]
1054 ; GFX9-LABEL: v_pow_f32_fabs_rhs:
1056 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1057 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x800000
1058 ; GFX9-NEXT: v_mov_b32_e32 v3, 0x4f800000
1059 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v2
1060 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1061 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v2
1062 ; GFX9-NEXT: v_log_f32_e32 v0, v0
1063 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42000000
1064 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1065 ; GFX9-NEXT: v_sub_f32_e32 v0, v0, v2
1066 ; GFX9-NEXT: v_mul_legacy_f32_e64 v0, v0, |v1|
1067 ; GFX9-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1068 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42800000
1069 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1070 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1071 ; GFX9-NEXT: v_add_f32_e32 v0, v0, v1
1072 ; GFX9-NEXT: v_exp_f32_e32 v0, v0
1073 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x1f800000
1074 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1075 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1
1076 ; GFX9-NEXT: s_setpc_b64 s[30:31]
1078 ; GFX10-LABEL: v_pow_f32_fabs_rhs:
1080 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1081 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1082 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1083 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v2
1084 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, vcc_lo
1085 ; GFX10-NEXT: v_log_f32_e32 v0, v0
1086 ; GFX10-NEXT: v_sub_f32_e32 v0, v0, v2
1087 ; GFX10-NEXT: v_mul_legacy_f32_e64 v0, v0, |v1|
1088 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1089 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1090 ; GFX10-NEXT: v_add_f32_e32 v0, v0, v1
1091 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1092 ; GFX10-NEXT: v_exp_f32_e32 v0, v0
1093 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1
1094 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1096 ; GFX11-LABEL: v_pow_f32_fabs_rhs:
1098 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1099 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1100 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1101 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1102 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v2
1103 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, vcc_lo
1104 ; GFX11-NEXT: v_log_f32_e32 v0, v0
1105 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1106 ; GFX11-NEXT: v_sub_f32_e32 v0, v0, v2
1107 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1108 ; GFX11-NEXT: v_mul_dx9_zero_f32_e64 v0, v0, |v1|
1109 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1110 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1111 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1112 ; GFX11-NEXT: v_add_f32_e32 v0, v0, v1
1113 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1114 ; GFX11-NEXT: v_exp_f32_e32 v0, v0
1115 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1116 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1
1117 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1118 %fabs.y = call float @llvm.fabs.f32(float %y)
1119 %pow = call float @llvm.pow.f32(float %x, float %fabs.y)
1123 define float @v_pow_f32_fabs_lhs_rhs(float %x, float %y) {
1124 ; GFX6-LABEL: v_pow_f32_fabs_lhs_rhs:
1126 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1127 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x800000
1128 ; GFX6-NEXT: v_mov_b32_e32 v3, 0x4f800000
1129 ; GFX6-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v2
1130 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1131 ; GFX6-NEXT: v_mul_f32_e64 v0, |v0|, v2
1132 ; GFX6-NEXT: v_log_f32_e32 v0, v0
1133 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42000000
1134 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1135 ; GFX6-NEXT: v_sub_f32_e32 v0, v0, v2
1136 ; GFX6-NEXT: v_mul_legacy_f32_e64 v0, v0, |v1|
1137 ; GFX6-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1138 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
1139 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1140 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1141 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
1142 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
1143 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x1f800000
1144 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1145 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
1146 ; GFX6-NEXT: s_setpc_b64 s[30:31]
1148 ; GFX8-LABEL: v_pow_f32_fabs_lhs_rhs:
1150 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1151 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x800000
1152 ; GFX8-NEXT: v_mov_b32_e32 v3, 0x4f800000
1153 ; GFX8-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v2
1154 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1155 ; GFX8-NEXT: v_mul_f32_e64 v0, |v0|, v2
1156 ; GFX8-NEXT: v_log_f32_e32 v0, v0
1157 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42000000
1158 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1159 ; GFX8-NEXT: v_sub_f32_e32 v0, v0, v2
1160 ; GFX8-NEXT: v_mul_legacy_f32_e64 v0, v0, |v1|
1161 ; GFX8-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1162 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42800000
1163 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1164 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1165 ; GFX8-NEXT: v_add_f32_e32 v0, v0, v1
1166 ; GFX8-NEXT: v_exp_f32_e32 v0, v0
1167 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x1f800000
1168 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1169 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v1
1170 ; GFX8-NEXT: s_setpc_b64 s[30:31]
1172 ; GFX9-LABEL: v_pow_f32_fabs_lhs_rhs:
1174 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1175 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x800000
1176 ; GFX9-NEXT: v_mov_b32_e32 v3, 0x4f800000
1177 ; GFX9-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v2
1178 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1179 ; GFX9-NEXT: v_mul_f32_e64 v0, |v0|, v2
1180 ; GFX9-NEXT: v_log_f32_e32 v0, v0
1181 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42000000
1182 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1183 ; GFX9-NEXT: v_sub_f32_e32 v0, v0, v2
1184 ; GFX9-NEXT: v_mul_legacy_f32_e64 v0, v0, |v1|
1185 ; GFX9-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1186 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42800000
1187 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1188 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1189 ; GFX9-NEXT: v_add_f32_e32 v0, v0, v1
1190 ; GFX9-NEXT: v_exp_f32_e32 v0, v0
1191 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x1f800000
1192 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1193 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1
1194 ; GFX9-NEXT: s_setpc_b64 s[30:31]
1196 ; GFX10-LABEL: v_pow_f32_fabs_lhs_rhs:
1198 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1199 ; GFX10-NEXT: v_cmp_gt_f32_e64 s4, 0x800000, |v0|
1200 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s4
1201 ; GFX10-NEXT: v_mul_f32_e64 v0, |v0|, v2
1202 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, s4
1203 ; GFX10-NEXT: v_log_f32_e32 v0, v0
1204 ; GFX10-NEXT: v_sub_f32_e32 v0, v0, v2
1205 ; GFX10-NEXT: v_mul_legacy_f32_e64 v0, v0, |v1|
1206 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1207 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1208 ; GFX10-NEXT: v_add_f32_e32 v0, v0, v1
1209 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1210 ; GFX10-NEXT: v_exp_f32_e32 v0, v0
1211 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1
1212 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1214 ; GFX11-LABEL: v_pow_f32_fabs_lhs_rhs:
1216 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1217 ; GFX11-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, |v0|
1218 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1219 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s0
1220 ; GFX11-NEXT: v_mul_f32_e64 v0, |v0|, v2
1221 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, s0
1222 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1223 ; GFX11-NEXT: v_log_f32_e32 v0, v0
1224 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1225 ; GFX11-NEXT: v_sub_f32_e32 v0, v0, v2
1226 ; GFX11-NEXT: v_mul_dx9_zero_f32_e64 v0, v0, |v1|
1227 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
1228 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1229 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1230 ; GFX11-NEXT: v_add_f32_e32 v0, v0, v1
1231 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1232 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)
1233 ; GFX11-NEXT: v_exp_f32_e32 v0, v0
1234 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1235 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1
1236 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1237 %fabs.x = call float @llvm.fabs.f32(float %x)
1238 %fabs.y = call float @llvm.fabs.f32(float %y)
1239 %pow = call float @llvm.pow.f32(float %fabs.x, float %fabs.y)
1243 define amdgpu_ps float @v_pow_f32_sgpr_vgpr(float inreg %x, float %y) {
1244 ; GFX6-LABEL: v_pow_f32_sgpr_vgpr:
1246 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x800000
1247 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x4f800000
1248 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, s0, v1
1249 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v2, vcc
1250 ; GFX6-NEXT: v_mul_f32_e32 v1, s0, v1
1251 ; GFX6-NEXT: v_log_f32_e32 v1, v1
1252 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42000000
1253 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1254 ; GFX6-NEXT: v_sub_f32_e32 v1, v1, v2
1255 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, v1, v0
1256 ; GFX6-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1257 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
1258 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1259 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1260 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
1261 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
1262 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x1f800000
1263 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1264 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
1265 ; GFX6-NEXT: ; return to shader part epilog
1267 ; GFX8-LABEL: v_pow_f32_sgpr_vgpr:
1269 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x800000
1270 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x4f800000
1271 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, s0, v1
1272 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v2, vcc
1273 ; GFX8-NEXT: v_mul_f32_e32 v1, s0, v1
1274 ; GFX8-NEXT: v_log_f32_e32 v1, v1
1275 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42000000
1276 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1277 ; GFX8-NEXT: v_sub_f32_e32 v1, v1, v2
1278 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, v1, v0
1279 ; GFX8-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1280 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42800000
1281 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1282 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1283 ; GFX8-NEXT: v_add_f32_e32 v0, v0, v1
1284 ; GFX8-NEXT: v_exp_f32_e32 v0, v0
1285 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x1f800000
1286 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1287 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v1
1288 ; GFX8-NEXT: ; return to shader part epilog
1290 ; GFX9-LABEL: v_pow_f32_sgpr_vgpr:
1292 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x800000
1293 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x4f800000
1294 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, s0, v1
1295 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v2, vcc
1296 ; GFX9-NEXT: v_mul_f32_e32 v1, s0, v1
1297 ; GFX9-NEXT: v_log_f32_e32 v1, v1
1298 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42000000
1299 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1300 ; GFX9-NEXT: v_sub_f32_e32 v1, v1, v2
1301 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, v1, v0
1302 ; GFX9-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1303 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42800000
1304 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1305 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1306 ; GFX9-NEXT: v_add_f32_e32 v0, v0, v1
1307 ; GFX9-NEXT: v_exp_f32_e32 v0, v0
1308 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x1f800000
1309 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1310 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1
1311 ; GFX9-NEXT: ; return to shader part epilog
1313 ; GFX10-LABEL: v_pow_f32_sgpr_vgpr:
1315 ; GFX10-NEXT: v_cmp_gt_f32_e64 s1, 0x800000, s0
1316 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s1
1317 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, s1
1318 ; GFX10-NEXT: v_mul_f32_e32 v1, s0, v1
1319 ; GFX10-NEXT: v_log_f32_e32 v1, v1
1320 ; GFX10-NEXT: v_sub_f32_e32 v1, v1, v2
1321 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, v1, v0
1322 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1323 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1324 ; GFX10-NEXT: v_add_f32_e32 v0, v0, v1
1325 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1326 ; GFX10-NEXT: v_exp_f32_e32 v0, v0
1327 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1
1328 ; GFX10-NEXT: ; return to shader part epilog
1330 ; GFX11-LABEL: v_pow_f32_sgpr_vgpr:
1332 ; GFX11-NEXT: v_cmp_gt_f32_e64 s1, 0x800000, s0
1333 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1334 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s1
1335 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, s1
1336 ; GFX11-NEXT: v_mul_f32_e32 v1, s0, v1
1337 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1338 ; GFX11-NEXT: v_log_f32_e32 v1, v1
1339 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1340 ; GFX11-NEXT: v_sub_f32_e32 v1, v1, v2
1341 ; GFX11-NEXT: v_mul_dx9_zero_f32_e32 v0, v1, v0
1342 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
1343 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1344 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1345 ; GFX11-NEXT: v_add_f32_e32 v0, v0, v1
1346 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1347 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)
1348 ; GFX11-NEXT: v_exp_f32_e32 v0, v0
1349 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1350 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1
1351 ; GFX11-NEXT: ; return to shader part epilog
1352 %pow = call float @llvm.pow.f32(float %x, float %y)
1356 define amdgpu_ps float @v_pow_f32_vgpr_sgpr(float %x, float inreg %y) {
1357 ; GFX6-LABEL: v_pow_f32_vgpr_sgpr:
1359 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x800000
1360 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x4f800000
1361 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1362 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v2, vcc
1363 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
1364 ; GFX6-NEXT: v_log_f32_e32 v0, v0
1365 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x42000000
1366 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc
1367 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
1368 ; GFX6-NEXT: v_sub_f32_e32 v0, v0, v1
1369 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, s0, v0
1370 ; GFX6-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1371 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1372 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1373 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
1374 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
1375 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x1f800000
1376 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1377 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
1378 ; GFX6-NEXT: ; return to shader part epilog
1380 ; GFX8-LABEL: v_pow_f32_vgpr_sgpr:
1382 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x800000
1383 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x4f800000
1384 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1385 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v2, vcc
1386 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v1
1387 ; GFX8-NEXT: v_log_f32_e32 v0, v0
1388 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x42000000
1389 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc
1390 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42800000
1391 ; GFX8-NEXT: v_sub_f32_e32 v0, v0, v1
1392 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, s0, v0
1393 ; GFX8-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1394 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1395 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1396 ; GFX8-NEXT: v_add_f32_e32 v0, v0, v1
1397 ; GFX8-NEXT: v_exp_f32_e32 v0, v0
1398 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x1f800000
1399 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1400 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v1
1401 ; GFX8-NEXT: ; return to shader part epilog
1403 ; GFX9-LABEL: v_pow_f32_vgpr_sgpr:
1405 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x800000
1406 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x4f800000
1407 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1408 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v2, vcc
1409 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1
1410 ; GFX9-NEXT: v_log_f32_e32 v0, v0
1411 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x42000000
1412 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc
1413 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42800000
1414 ; GFX9-NEXT: v_sub_f32_e32 v0, v0, v1
1415 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, s0, v0
1416 ; GFX9-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1417 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1418 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1419 ; GFX9-NEXT: v_add_f32_e32 v0, v0, v1
1420 ; GFX9-NEXT: v_exp_f32_e32 v0, v0
1421 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x1f800000
1422 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1423 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1
1424 ; GFX9-NEXT: ; return to shader part epilog
1426 ; GFX10-LABEL: v_pow_f32_vgpr_sgpr:
1428 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1429 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
1430 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1
1431 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1432 ; GFX10-NEXT: v_log_f32_e32 v0, v0
1433 ; GFX10-NEXT: v_sub_f32_e32 v0, v0, v1
1434 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, s0, v0
1435 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1436 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1437 ; GFX10-NEXT: v_add_f32_e32 v0, v0, v1
1438 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1439 ; GFX10-NEXT: v_exp_f32_e32 v0, v0
1440 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1
1441 ; GFX10-NEXT: ; return to shader part epilog
1443 ; GFX11-LABEL: v_pow_f32_vgpr_sgpr:
1445 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1446 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
1447 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1448 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1
1449 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1450 ; GFX11-NEXT: v_log_f32_e32 v0, v0
1451 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1452 ; GFX11-NEXT: v_sub_f32_e32 v0, v0, v1
1453 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1454 ; GFX11-NEXT: v_mul_dx9_zero_f32_e32 v0, s0, v0
1455 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1456 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1457 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1458 ; GFX11-NEXT: v_add_f32_e32 v0, v0, v1
1459 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1460 ; GFX11-NEXT: v_exp_f32_e32 v0, v0
1461 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1462 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1
1463 ; GFX11-NEXT: ; return to shader part epilog
1464 %pow = call float @llvm.pow.f32(float %x, float %y)
1468 define amdgpu_ps float @v_pow_f32_sgpr_sgpr(float inreg %x, float inreg %y) {
1469 ; GFX6-LABEL: v_pow_f32_sgpr_sgpr:
1471 ; GFX6-NEXT: v_mov_b32_e32 v0, 0x800000
1472 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x4f800000
1473 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0
1474 ; GFX6-NEXT: v_cndmask_b32_e32 v0, 1.0, v1, vcc
1475 ; GFX6-NEXT: v_mul_f32_e32 v0, s0, v0
1476 ; GFX6-NEXT: v_log_f32_e32 v0, v0
1477 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x42000000
1478 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc
1479 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
1480 ; GFX6-NEXT: v_sub_f32_e32 v0, v0, v1
1481 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, s1, v0
1482 ; GFX6-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1483 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1484 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1485 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
1486 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
1487 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x1f800000
1488 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1489 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
1490 ; GFX6-NEXT: ; return to shader part epilog
1492 ; GFX8-LABEL: v_pow_f32_sgpr_sgpr:
1494 ; GFX8-NEXT: v_mov_b32_e32 v0, 0x800000
1495 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x4f800000
1496 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0
1497 ; GFX8-NEXT: v_cndmask_b32_e32 v0, 1.0, v1, vcc
1498 ; GFX8-NEXT: v_mul_f32_e32 v0, s0, v0
1499 ; GFX8-NEXT: v_log_f32_e32 v0, v0
1500 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x42000000
1501 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc
1502 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42800000
1503 ; GFX8-NEXT: v_sub_f32_e32 v0, v0, v1
1504 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, s1, v0
1505 ; GFX8-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1506 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1507 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1508 ; GFX8-NEXT: v_add_f32_e32 v0, v0, v1
1509 ; GFX8-NEXT: v_exp_f32_e32 v0, v0
1510 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x1f800000
1511 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1512 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v1
1513 ; GFX8-NEXT: ; return to shader part epilog
1515 ; GFX9-LABEL: v_pow_f32_sgpr_sgpr:
1517 ; GFX9-NEXT: v_mov_b32_e32 v0, 0x800000
1518 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x4f800000
1519 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0
1520 ; GFX9-NEXT: v_cndmask_b32_e32 v0, 1.0, v1, vcc
1521 ; GFX9-NEXT: v_mul_f32_e32 v0, s0, v0
1522 ; GFX9-NEXT: v_log_f32_e32 v0, v0
1523 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x42000000
1524 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc
1525 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42800000
1526 ; GFX9-NEXT: v_sub_f32_e32 v0, v0, v1
1527 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, s1, v0
1528 ; GFX9-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1529 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1530 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1531 ; GFX9-NEXT: v_add_f32_e32 v0, v0, v1
1532 ; GFX9-NEXT: v_exp_f32_e32 v0, v0
1533 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x1f800000
1534 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1535 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1
1536 ; GFX9-NEXT: ; return to shader part epilog
1538 ; GFX10-LABEL: v_pow_f32_sgpr_sgpr:
1540 ; GFX10-NEXT: v_cmp_gt_f32_e64 s2, 0x800000, s0
1541 ; GFX10-NEXT: v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s2
1542 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s2
1543 ; GFX10-NEXT: v_mul_f32_e32 v0, s0, v0
1544 ; GFX10-NEXT: v_log_f32_e32 v0, v0
1545 ; GFX10-NEXT: v_sub_f32_e32 v0, v0, v1
1546 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, s1, v0
1547 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1548 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1549 ; GFX10-NEXT: v_add_f32_e32 v0, v0, v1
1550 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1551 ; GFX10-NEXT: v_exp_f32_e32 v0, v0
1552 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1
1553 ; GFX10-NEXT: ; return to shader part epilog
1555 ; GFX11-LABEL: v_pow_f32_sgpr_sgpr:
1557 ; GFX11-NEXT: v_cmp_gt_f32_e64 s2, 0x800000, s0
1558 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1559 ; GFX11-NEXT: v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s2
1560 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s2
1561 ; GFX11-NEXT: v_mul_f32_e32 v0, s0, v0
1562 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1563 ; GFX11-NEXT: v_log_f32_e32 v0, v0
1564 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1565 ; GFX11-NEXT: v_sub_f32_e32 v0, v0, v1
1566 ; GFX11-NEXT: v_mul_dx9_zero_f32_e32 v0, s1, v0
1567 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
1568 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1569 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1570 ; GFX11-NEXT: v_add_f32_e32 v0, v0, v1
1571 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1572 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)
1573 ; GFX11-NEXT: v_exp_f32_e32 v0, v0
1574 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1575 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1
1576 ; GFX11-NEXT: ; return to shader part epilog
1577 %pow = call float @llvm.pow.f32(float %x, float %y)
1581 define float @v_pow_f32_fneg_lhs(float %x, float %y) {
1582 ; GFX6-LABEL: v_pow_f32_fneg_lhs:
1584 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1585 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x800000
1586 ; GFX6-NEXT: v_mov_b32_e32 v3, 0x4f800000
1587 ; GFX6-NEXT: v_cmp_lt_f32_e64 vcc, -v0, v2
1588 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1589 ; GFX6-NEXT: v_mul_f32_e64 v0, -v0, v2
1590 ; GFX6-NEXT: v_log_f32_e32 v0, v0
1591 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42000000
1592 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1593 ; GFX6-NEXT: v_sub_f32_e32 v0, v0, v2
1594 ; GFX6-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
1595 ; GFX6-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1596 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
1597 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1598 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1599 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
1600 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
1601 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x1f800000
1602 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1603 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
1604 ; GFX6-NEXT: s_setpc_b64 s[30:31]
1606 ; GFX8-LABEL: v_pow_f32_fneg_lhs:
1608 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1609 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x800000
1610 ; GFX8-NEXT: v_mov_b32_e32 v3, 0x4f800000
1611 ; GFX8-NEXT: v_cmp_lt_f32_e64 vcc, -v0, v2
1612 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1613 ; GFX8-NEXT: v_mul_f32_e64 v0, -v0, v2
1614 ; GFX8-NEXT: v_log_f32_e32 v0, v0
1615 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42000000
1616 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1617 ; GFX8-NEXT: v_sub_f32_e32 v0, v0, v2
1618 ; GFX8-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
1619 ; GFX8-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1620 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42800000
1621 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1622 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1623 ; GFX8-NEXT: v_add_f32_e32 v0, v0, v1
1624 ; GFX8-NEXT: v_exp_f32_e32 v0, v0
1625 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x1f800000
1626 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1627 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v1
1628 ; GFX8-NEXT: s_setpc_b64 s[30:31]
1630 ; GFX9-LABEL: v_pow_f32_fneg_lhs:
1632 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1633 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x800000
1634 ; GFX9-NEXT: v_mov_b32_e32 v3, 0x4f800000
1635 ; GFX9-NEXT: v_cmp_lt_f32_e64 vcc, -v0, v2
1636 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1637 ; GFX9-NEXT: v_mul_f32_e64 v0, -v0, v2
1638 ; GFX9-NEXT: v_log_f32_e32 v0, v0
1639 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42000000
1640 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1641 ; GFX9-NEXT: v_sub_f32_e32 v0, v0, v2
1642 ; GFX9-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
1643 ; GFX9-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1644 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42800000
1645 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1646 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1647 ; GFX9-NEXT: v_add_f32_e32 v0, v0, v1
1648 ; GFX9-NEXT: v_exp_f32_e32 v0, v0
1649 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x1f800000
1650 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1651 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1
1652 ; GFX9-NEXT: s_setpc_b64 s[30:31]
1654 ; GFX10-LABEL: v_pow_f32_fneg_lhs:
1656 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1657 ; GFX10-NEXT: v_cmp_gt_f32_e64 s4, 0x800000, -v0
1658 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s4
1659 ; GFX10-NEXT: v_mul_f32_e64 v0, -v0, v2
1660 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, s4
1661 ; GFX10-NEXT: v_log_f32_e32 v0, v0
1662 ; GFX10-NEXT: v_sub_f32_e32 v0, v0, v2
1663 ; GFX10-NEXT: v_mul_legacy_f32_e32 v0, v0, v1
1664 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1665 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1666 ; GFX10-NEXT: v_add_f32_e32 v0, v0, v1
1667 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1668 ; GFX10-NEXT: v_exp_f32_e32 v0, v0
1669 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1
1670 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1672 ; GFX11-LABEL: v_pow_f32_fneg_lhs:
1674 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1675 ; GFX11-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, -v0
1676 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1677 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s0
1678 ; GFX11-NEXT: v_mul_f32_e64 v0, -v0, v2
1679 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, s0
1680 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1681 ; GFX11-NEXT: v_log_f32_e32 v0, v0
1682 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1683 ; GFX11-NEXT: v_sub_f32_e32 v0, v0, v2
1684 ; GFX11-NEXT: v_mul_dx9_zero_f32_e32 v0, v0, v1
1685 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
1686 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1687 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1688 ; GFX11-NEXT: v_add_f32_e32 v0, v0, v1
1689 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1690 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)
1691 ; GFX11-NEXT: v_exp_f32_e32 v0, v0
1692 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1693 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1
1694 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1695 %neg.x = fneg float %x
1696 %pow = call float @llvm.pow.f32(float %neg.x, float %y)
1700 define float @v_pow_f32_fneg_rhs(float %x, float %y) {
1701 ; GFX6-LABEL: v_pow_f32_fneg_rhs:
1703 ; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1704 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x800000
1705 ; GFX6-NEXT: v_mov_b32_e32 v3, 0x4f800000
1706 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v2
1707 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1708 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v2
1709 ; GFX6-NEXT: v_log_f32_e32 v0, v0
1710 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42000000
1711 ; GFX6-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1712 ; GFX6-NEXT: v_sub_f32_e32 v0, v0, v2
1713 ; GFX6-NEXT: v_mul_legacy_f32_e64 v0, v0, -v1
1714 ; GFX6-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1715 ; GFX6-NEXT: v_mov_b32_e32 v2, 0x42800000
1716 ; GFX6-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1717 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1718 ; GFX6-NEXT: v_add_f32_e32 v0, v0, v1
1719 ; GFX6-NEXT: v_exp_f32_e32 v0, v0
1720 ; GFX6-NEXT: v_mov_b32_e32 v1, 0x1f800000
1721 ; GFX6-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1722 ; GFX6-NEXT: v_mul_f32_e32 v0, v0, v1
1723 ; GFX6-NEXT: s_setpc_b64 s[30:31]
1725 ; GFX8-LABEL: v_pow_f32_fneg_rhs:
1727 ; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1728 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x800000
1729 ; GFX8-NEXT: v_mov_b32_e32 v3, 0x4f800000
1730 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v2
1731 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1732 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v2
1733 ; GFX8-NEXT: v_log_f32_e32 v0, v0
1734 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42000000
1735 ; GFX8-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1736 ; GFX8-NEXT: v_sub_f32_e32 v0, v0, v2
1737 ; GFX8-NEXT: v_mul_legacy_f32_e64 v0, v0, -v1
1738 ; GFX8-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1739 ; GFX8-NEXT: v_mov_b32_e32 v2, 0x42800000
1740 ; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1741 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1742 ; GFX8-NEXT: v_add_f32_e32 v0, v0, v1
1743 ; GFX8-NEXT: v_exp_f32_e32 v0, v0
1744 ; GFX8-NEXT: v_mov_b32_e32 v1, 0x1f800000
1745 ; GFX8-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1746 ; GFX8-NEXT: v_mul_f32_e32 v0, v0, v1
1747 ; GFX8-NEXT: s_setpc_b64 s[30:31]
1749 ; GFX9-LABEL: v_pow_f32_fneg_rhs:
1751 ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1752 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x800000
1753 ; GFX9-NEXT: v_mov_b32_e32 v3, 0x4f800000
1754 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v2
1755 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 1.0, v3, vcc
1756 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v2
1757 ; GFX9-NEXT: v_log_f32_e32 v0, v0
1758 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42000000
1759 ; GFX9-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc
1760 ; GFX9-NEXT: v_sub_f32_e32 v0, v0, v2
1761 ; GFX9-NEXT: v_mul_legacy_f32_e64 v0, v0, -v1
1762 ; GFX9-NEXT: v_mov_b32_e32 v1, 0xc2fc0000
1763 ; GFX9-NEXT: v_mov_b32_e32 v2, 0x42800000
1764 ; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1
1765 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc
1766 ; GFX9-NEXT: v_add_f32_e32 v0, v0, v1
1767 ; GFX9-NEXT: v_exp_f32_e32 v0, v0
1768 ; GFX9-NEXT: v_mov_b32_e32 v1, 0x1f800000
1769 ; GFX9-NEXT: v_cndmask_b32_e32 v1, 1.0, v1, vcc
1770 ; GFX9-NEXT: v_mul_f32_e32 v0, v0, v1
1771 ; GFX9-NEXT: s_setpc_b64 s[30:31]
1773 ; GFX10-LABEL: v_pow_f32_fneg_rhs:
1775 ; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1776 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1777 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1778 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v2
1779 ; GFX10-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, vcc_lo
1780 ; GFX10-NEXT: v_log_f32_e32 v0, v0
1781 ; GFX10-NEXT: v_sub_f32_e32 v0, v0, v2
1782 ; GFX10-NEXT: v_mul_legacy_f32_e64 v0, v0, -v1
1783 ; GFX10-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1784 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1785 ; GFX10-NEXT: v_add_f32_e32 v0, v0, v1
1786 ; GFX10-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1787 ; GFX10-NEXT: v_exp_f32_e32 v0, v0
1788 ; GFX10-NEXT: v_mul_f32_e32 v0, v0, v1
1789 ; GFX10-NEXT: s_setpc_b64 s[30:31]
1791 ; GFX11-LABEL: v_pow_f32_fneg_rhs:
1793 ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1794 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1795 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1796 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1797 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v2
1798 ; GFX11-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, vcc_lo
1799 ; GFX11-NEXT: v_log_f32_e32 v0, v0
1800 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1801 ; GFX11-NEXT: v_sub_f32_e32 v0, v0, v2
1802 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1803 ; GFX11-NEXT: v_mul_dx9_zero_f32_e64 v0, v0, -v1
1804 ; GFX11-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
1805 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo
1806 ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1807 ; GFX11-NEXT: v_add_f32_e32 v0, v0, v1
1808 ; GFX11-NEXT: v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
1809 ; GFX11-NEXT: v_exp_f32_e32 v0, v0
1810 ; GFX11-NEXT: s_waitcnt_depctr 0xfff
1811 ; GFX11-NEXT: v_mul_f32_e32 v0, v0, v1
1812 ; GFX11-NEXT: s_setpc_b64 s[30:31]
1813 %neg.y = fneg float %y
1814 %pow = call float @llvm.pow.f32(float %x, float %neg.y)
1818 declare half @llvm.pow.f16(half, half)
1819 declare float @llvm.pow.f32(float, float)
1820 declare double @llvm.pow.f64(double, double)
1822 declare half @llvm.fabs.f16(half)
1823 declare float @llvm.fabs.f32(float)
1825 declare <2 x half> @llvm.pow.v2f16(<2 x half>, <2 x half>)
1826 declare <2 x float> @llvm.pow.v2f32(<2 x float>, <2 x float>)