Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.log2.ll
blobd499e017e92f411a60c158dd14daf1247c4b8fab
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GFX689,SI,GFX689-SDAG,SI-SDAG %s
3 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GFX689,SI,GFX689-GISEL,SI-GISEL %s
4 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GFX689,VI,GFX689-SDAG,VI-SDAG %s
5 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GFX689,VI,GFX689-GISEL,VI-GISEL %s
6 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX689,GFX900,GFX689-SDAG,GFX900-SDAG %s
7 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX689,GFX900,GFX689-GISEL,GFX900-GISEL %s
8 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX1100,GFX1100-SDAG %s
9 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX1100,GFX1100-GISEL %s
11 ; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=R600 %s
12 ; RUN: llc -march=r600 -mcpu=cayman < %s | FileCheck -check-prefix=CM %s
14 define amdgpu_kernel void @s_log2_f32(ptr addrspace(1) %out, float %in) {
15 ; SI-SDAG-LABEL: s_log2_f32:
16 ; SI-SDAG:       ; %bb.0:
17 ; SI-SDAG-NEXT:    s_load_dword s2, s[0:1], 0xb
18 ; SI-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
19 ; SI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
20 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
21 ; SI-SDAG-NEXT:    s_mov_b32 s3, 0xf000
22 ; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
23 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
24 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
25 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
26 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
27 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, s2, v1
28 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
29 ; SI-SDAG-NEXT:    s_mov_b32 s2, -1
30 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v1, v0
31 ; SI-SDAG-NEXT:    buffer_store_dword v0, off, s[0:3], 0
32 ; SI-SDAG-NEXT:    s_endpgm
34 ; SI-GISEL-LABEL: s_log2_f32:
35 ; SI-GISEL:       ; %bb.0:
36 ; SI-GISEL-NEXT:    s_load_dword s2, s[0:1], 0xb
37 ; SI-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
38 ; SI-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
39 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
40 ; SI-GISEL-NEXT:    s_mov_b32 s3, 0xf000
41 ; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
42 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
43 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
44 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, s2, v0
45 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
46 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
47 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
48 ; SI-GISEL-NEXT:    s_mov_b32 s2, -1
49 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
50 ; SI-GISEL-NEXT:    buffer_store_dword v0, off, s[0:3], 0
51 ; SI-GISEL-NEXT:    s_endpgm
53 ; VI-SDAG-LABEL: s_log2_f32:
54 ; VI-SDAG:       ; %bb.0:
55 ; VI-SDAG-NEXT:    s_load_dword s2, s[0:1], 0x2c
56 ; VI-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
57 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
58 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
59 ; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
60 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
61 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
62 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
63 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
64 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, s2, v1
65 ; VI-SDAG-NEXT:    v_log_f32_e32 v1, v1
66 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v1, v0
67 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, s0
68 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s1
69 ; VI-SDAG-NEXT:    flat_store_dword v[0:1], v2
70 ; VI-SDAG-NEXT:    s_endpgm
72 ; VI-GISEL-LABEL: s_log2_f32:
73 ; VI-GISEL:       ; %bb.0:
74 ; VI-GISEL-NEXT:    s_load_dword s2, s[0:1], 0x2c
75 ; VI-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
76 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
77 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
78 ; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
79 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
80 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
81 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, s2, v0
82 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
83 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
84 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
85 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
86 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s0
87 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s1
88 ; VI-GISEL-NEXT:    flat_store_dword v[0:1], v2
89 ; VI-GISEL-NEXT:    s_endpgm
91 ; GFX900-SDAG-LABEL: s_log2_f32:
92 ; GFX900-SDAG:       ; %bb.0:
93 ; GFX900-SDAG-NEXT:    s_load_dword s4, s[0:1], 0x2c
94 ; GFX900-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
95 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
96 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
97 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v2, 0
98 ; GFX900-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
99 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
100 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
101 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
102 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
103 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, s4, v1
104 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v1, v1
105 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v1, v0
106 ; GFX900-SDAG-NEXT:    global_store_dword v2, v0, s[2:3]
107 ; GFX900-SDAG-NEXT:    s_endpgm
109 ; GFX900-GISEL-LABEL: s_log2_f32:
110 ; GFX900-GISEL:       ; %bb.0:
111 ; GFX900-GISEL-NEXT:    s_load_dword s2, s[0:1], 0x2c
112 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
113 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
114 ; GFX900-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
115 ; GFX900-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
116 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
117 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
118 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, s2, v0
119 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
120 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
121 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
122 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
123 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0
124 ; GFX900-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
125 ; GFX900-GISEL-NEXT:    s_endpgm
127 ; GFX1100-SDAG-LABEL: s_log2_f32:
128 ; GFX1100-SDAG:       ; %bb.0:
129 ; GFX1100-SDAG-NEXT:    s_clause 0x1
130 ; GFX1100-SDAG-NEXT:    s_load_b32 s2, s[0:1], 0x2c
131 ; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
132 ; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 0
133 ; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
134 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s2
135 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
136 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s3
137 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42000000, s3
138 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, s2, v1
139 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
140 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v1, v1
141 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
142 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v1, v0
143 ; GFX1100-SDAG-NEXT:    global_store_b32 v2, v0, s[0:1]
144 ; GFX1100-SDAG-NEXT:    s_nop 0
145 ; GFX1100-SDAG-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
146 ; GFX1100-SDAG-NEXT:    s_endpgm
148 ; GFX1100-GISEL-LABEL: s_log2_f32:
149 ; GFX1100-GISEL:       ; %bb.0:
150 ; GFX1100-GISEL-NEXT:    s_clause 0x1
151 ; GFX1100-GISEL-NEXT:    s_load_b32 s2, s[0:1], 0x2c
152 ; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
153 ; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
154 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s2
155 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
156 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s3
157 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, s3
158 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, s2, v0
159 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
160 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
161 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
162 ; GFX1100-GISEL-NEXT:    v_dual_sub_f32 v0, v0, v1 :: v_dual_mov_b32 v1, 0
163 ; GFX1100-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
164 ; GFX1100-GISEL-NEXT:    s_nop 0
165 ; GFX1100-GISEL-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
166 ; GFX1100-GISEL-NEXT:    s_endpgm
168 ; R600-LABEL: s_log2_f32:
169 ; R600:       ; %bb.0:
170 ; R600-NEXT:    ALU 10, @4, KC0[CB0:0-32], KC1[]
171 ; R600-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1
172 ; R600-NEXT:    CF_END
173 ; R600-NEXT:    PAD
174 ; R600-NEXT:    ALU clause starting at 4:
175 ; R600-NEXT:     SETGT * T0.W, literal.x, KC0[2].Z,
176 ; R600-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
177 ; R600-NEXT:     CNDE * T1.W, PV.W, 1.0, literal.x,
178 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
179 ; R600-NEXT:     MUL_IEEE T1.W, KC0[2].Z, PV.W,
180 ; R600-NEXT:     CNDE * T0.W, T0.W, 0.0, literal.x,
181 ; R600-NEXT:    1107296256(3.200000e+01), 0(0.000000e+00)
182 ; R600-NEXT:     LOG_IEEE * T0.X, PV.W,
183 ; R600-NEXT:     ADD T0.X, PS, -T0.W,
184 ; R600-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
185 ; R600-NEXT:    2(2.802597e-45), 0(0.000000e+00)
187 ; CM-LABEL: s_log2_f32:
188 ; CM:       ; %bb.0:
189 ; CM-NEXT:    ALU 13, @4, KC0[CB0:0-32], KC1[]
190 ; CM-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T0.X, T1.X
191 ; CM-NEXT:    CF_END
192 ; CM-NEXT:    PAD
193 ; CM-NEXT:    ALU clause starting at 4:
194 ; CM-NEXT:     SETGT * T0.W, literal.x, KC0[2].Z,
195 ; CM-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
196 ; CM-NEXT:     CNDE * T1.W, PV.W, 1.0, literal.x,
197 ; CM-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
198 ; CM-NEXT:     CNDE T0.Z, T0.W, 0.0, literal.x,
199 ; CM-NEXT:     MUL_IEEE * T0.W, KC0[2].Z, PV.W,
200 ; CM-NEXT:    1107296256(3.200000e+01), 0(0.000000e+00)
201 ; CM-NEXT:     LOG_IEEE T0.X, T0.W,
202 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T0.W,
203 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T0.W,
204 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T0.W,
205 ; CM-NEXT:     ADD * T0.X, PV.X, -T0.Z,
206 ; CM-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
207 ; CM-NEXT:    2(2.802597e-45), 0(0.000000e+00)
208   %result = call float @llvm.log2.f32(float %in)
209   store float %result, ptr addrspace(1) %out
210   ret void
213 ; FIXME: We should be able to merge these packets together on Cayman so we
214 ; have a maximum of 4 instructions.
215 define amdgpu_kernel void @s_log2_v2f32(ptr addrspace(1) %out, <2 x float> %in) {
216 ; SI-SDAG-LABEL: s_log2_v2f32:
217 ; SI-SDAG:       ; %bb.0:
218 ; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
219 ; SI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
220 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
221 ; SI-SDAG-NEXT:    v_mov_b32_e32 v3, 0x4f800000
222 ; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000
223 ; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
224 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s3, v0
225 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc
226 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 1.0, v3, vcc
227 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
228 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
229 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v3, vcc
230 ; SI-SDAG-NEXT:    v_mul_f32_e32 v4, s3, v4
231 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, s2, v1
232 ; SI-SDAG-NEXT:    v_log_f32_e32 v4, v4
233 ; SI-SDAG-NEXT:    v_log_f32_e32 v3, v1
234 ; SI-SDAG-NEXT:    s_mov_b32 s6, -1
235 ; SI-SDAG-NEXT:    s_mov_b32 s4, s0
236 ; SI-SDAG-NEXT:    s_mov_b32 s5, s1
237 ; SI-SDAG-NEXT:    v_sub_f32_e32 v1, v4, v2
238 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v3, v0
239 ; SI-SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
240 ; SI-SDAG-NEXT:    s_endpgm
242 ; SI-GISEL-LABEL: s_log2_v2f32:
243 ; SI-GISEL:       ; %bb.0:
244 ; SI-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
245 ; SI-GISEL-NEXT:    s_mov_b32 s0, 0x800000
246 ; SI-GISEL-NEXT:    v_mov_b32_e32 v0, 0x4f800000
247 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
248 ; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
249 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, s6
250 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, s7
251 ; SI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v2
252 ; SI-GISEL-NEXT:    v_cmp_gt_f32_e64 s[0:1], s0, v3
253 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, 1.0, v0, vcc
254 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, v0, s[0:1]
255 ; SI-GISEL-NEXT:    v_mul_f32_e32 v2, s6, v2
256 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, s7, v0
257 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v2
258 ; SI-GISEL-NEXT:    v_log_f32_e32 v3, v0
259 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
260 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, v1, s[0:1]
261 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v2, v0
262 ; SI-GISEL-NEXT:    v_sub_f32_e32 v1, v3, v1
263 ; SI-GISEL-NEXT:    s_mov_b32 s6, -1
264 ; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000
265 ; SI-GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
266 ; SI-GISEL-NEXT:    s_endpgm
268 ; VI-SDAG-LABEL: s_log2_v2f32:
269 ; VI-SDAG:       ; %bb.0:
270 ; VI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
271 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
272 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
273 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
274 ; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
275 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s3, v0
276 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v3, 0, v1, vcc
277 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 1.0, v2, vcc
278 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
279 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
280 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
281 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, s3, v4
282 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, s2, v1
283 ; VI-SDAG-NEXT:    v_log_f32_e32 v4, v4
284 ; VI-SDAG-NEXT:    v_log_f32_e32 v2, v1
285 ; VI-SDAG-NEXT:    v_sub_f32_e32 v1, v4, v3
286 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v2, v0
287 ; VI-SDAG-NEXT:    v_mov_b32_e32 v3, s1
288 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, s0
289 ; VI-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
290 ; VI-SDAG-NEXT:    s_endpgm
292 ; VI-GISEL-LABEL: s_log2_v2f32:
293 ; VI-GISEL:       ; %bb.0:
294 ; VI-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
295 ; VI-GISEL-NEXT:    s_mov_b32 s0, 0x800000
296 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, 0x4f800000
297 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
298 ; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
299 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, s6
300 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, s7
301 ; VI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v2
302 ; VI-GISEL-NEXT:    v_cmp_gt_f32_e64 s[0:1], s0, v3
303 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v2, 1.0, v0, vcc
304 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, v0, s[0:1]
305 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, s6, v2
306 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, s7, v0
307 ; VI-GISEL-NEXT:    v_log_f32_e32 v2, v2
308 ; VI-GISEL-NEXT:    v_log_f32_e32 v3, v0
309 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
310 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, v1, s[0:1]
311 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v2, v0
312 ; VI-GISEL-NEXT:    v_sub_f32_e32 v1, v3, v1
313 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, s4
314 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, s5
315 ; VI-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
316 ; VI-GISEL-NEXT:    s_endpgm
318 ; GFX900-SDAG-LABEL: s_log2_v2f32:
319 ; GFX900-SDAG:       ; %bb.0:
320 ; GFX900-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
321 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
322 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
323 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
324 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v5, 0
325 ; GFX900-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
326 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s3, v0
327 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v3, 0, v1, vcc
328 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v4, 1.0, v2, vcc
329 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
330 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
331 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
332 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v4, s3, v4
333 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, s2, v1
334 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v4, v4
335 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v2, v1
336 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v1, v4, v3
337 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v2, v0
338 ; GFX900-SDAG-NEXT:    global_store_dwordx2 v5, v[0:1], s[0:1]
339 ; GFX900-SDAG-NEXT:    s_endpgm
341 ; GFX900-GISEL-LABEL: s_log2_v2f32:
342 ; GFX900-GISEL:       ; %bb.0:
343 ; GFX900-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
344 ; GFX900-GISEL-NEXT:    s_mov_b32 s0, 0x800000
345 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v0, 0x4f800000
346 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
347 ; GFX900-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
348 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, s6
349 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, s7
350 ; GFX900-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v2
351 ; GFX900-GISEL-NEXT:    v_cmp_gt_f32_e64 s[0:1], s0, v3
352 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v2, 1.0, v0, vcc
353 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, v0, s[0:1]
354 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v2, s6, v2
355 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, s7, v0
356 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v2, v2
357 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v3, v0
358 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
359 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, v1, s[0:1]
360 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v2, v0
361 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v1, v3, v1
362 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0
363 ; GFX900-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[4:5]
364 ; GFX900-GISEL-NEXT:    s_endpgm
366 ; GFX1100-SDAG-LABEL: s_log2_v2f32:
367 ; GFX1100-SDAG:       ; %bb.0:
368 ; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24
369 ; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v4, 0
370 ; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
371 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s4, 0x800000, s3
372 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s5, 0x800000, s2
373 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
374 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s4
375 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v3, 1.0, 0x4f800000, s5
376 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42000000, s4
377 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42000000, s5
378 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
379 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, s3, v1
380 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v3, s2, v3
381 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
382 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v1, v1
383 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v3, v3
384 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
385 ; GFX1100-SDAG-NEXT:    v_dual_sub_f32 v1, v1, v0 :: v_dual_sub_f32 v0, v3, v2
386 ; GFX1100-SDAG-NEXT:    global_store_b64 v4, v[0:1], s[0:1]
387 ; GFX1100-SDAG-NEXT:    s_nop 0
388 ; GFX1100-SDAG-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
389 ; GFX1100-SDAG-NEXT:    s_endpgm
391 ; GFX1100-GISEL-LABEL: s_log2_v2f32:
392 ; GFX1100-GISEL:       ; %bb.0:
393 ; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24
394 ; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
395 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s4, 0x800000, s2
396 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s5, 0x800000, s3
397 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
398 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s4
399 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s5
400 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42000000, s4
401 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42000000, s5
402 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
403 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v0, s2, v0 :: v_dual_mul_f32 v1, s3, v1
404 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
405 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
406 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v1
407 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
408 ; GFX1100-GISEL-NEXT:    v_dual_sub_f32 v0, v0, v2 :: v_dual_sub_f32 v1, v1, v3
409 ; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 0
410 ; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
411 ; GFX1100-GISEL-NEXT:    s_nop 0
412 ; GFX1100-GISEL-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
413 ; GFX1100-GISEL-NEXT:    s_endpgm
415 ; R600-LABEL: s_log2_v2f32:
416 ; R600:       ; %bb.0:
417 ; R600-NEXT:    ALU 18, @4, KC0[CB0:0-32], KC1[]
418 ; R600-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XY, T1.X, 1
419 ; R600-NEXT:    CF_END
420 ; R600-NEXT:    PAD
421 ; R600-NEXT:    ALU clause starting at 4:
422 ; R600-NEXT:     SETGT T0.W, literal.x, KC0[3].X,
423 ; R600-NEXT:     SETGT * T1.W, literal.x, KC0[2].W,
424 ; R600-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
425 ; R600-NEXT:     CNDE * T2.W, PV.W, 1.0, literal.x,
426 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
427 ; R600-NEXT:     MUL_IEEE T2.W, KC0[3].X, PV.W,
428 ; R600-NEXT:     CNDE * T3.W, T1.W, 1.0, literal.x,
429 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
430 ; R600-NEXT:     MUL_IEEE T0.Z, KC0[2].W, PS,
431 ; R600-NEXT:     CNDE T0.W, T0.W, 0.0, literal.x,
432 ; R600-NEXT:     LOG_IEEE * T0.X, PV.W,
433 ; R600-NEXT:    1107296256(3.200000e+01), 0(0.000000e+00)
434 ; R600-NEXT:     ADD T0.Y, PS, -PV.W,
435 ; R600-NEXT:     CNDE T0.W, T1.W, 0.0, literal.x,
436 ; R600-NEXT:     LOG_IEEE * T0.X, PV.Z,
437 ; R600-NEXT:    1107296256(3.200000e+01), 0(0.000000e+00)
438 ; R600-NEXT:     ADD T0.X, PS, -PV.W,
439 ; R600-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
440 ; R600-NEXT:    2(2.802597e-45), 0(0.000000e+00)
442 ; CM-LABEL: s_log2_v2f32:
443 ; CM:       ; %bb.0:
444 ; CM-NEXT:    ALU 23, @4, KC0[CB0:0-32], KC1[]
445 ; CM-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T1, T0.X
446 ; CM-NEXT:    CF_END
447 ; CM-NEXT:    PAD
448 ; CM-NEXT:    ALU clause starting at 4:
449 ; CM-NEXT:     SETGT * T0.W, literal.x, KC0[3].X,
450 ; CM-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
451 ; CM-NEXT:     CNDE T0.Z, PV.W, 1.0, literal.x,
452 ; CM-NEXT:     SETGT * T1.W, literal.y, KC0[2].W,
453 ; CM-NEXT:    1333788672(4.294967e+09), 8388608(1.175494e-38)
454 ; CM-NEXT:     CNDE T0.Y, PV.W, 1.0, literal.x,
455 ; CM-NEXT:     CNDE T1.Z, T0.W, 0.0, literal.y,
456 ; CM-NEXT:     MUL_IEEE * T0.W, KC0[3].X, PV.Z,
457 ; CM-NEXT:    1333788672(4.294967e+09), 1107296256(3.200000e+01)
458 ; CM-NEXT:     LOG_IEEE T0.X, T0.W,
459 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T0.W,
460 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T0.W,
461 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T0.W,
462 ; CM-NEXT:     ADD T1.Y, PV.X, -T1.Z,
463 ; CM-NEXT:     CNDE T0.Z, T1.W, 0.0, literal.x,
464 ; CM-NEXT:     MUL_IEEE * T0.W, KC0[2].W, T0.Y,
465 ; CM-NEXT:    1107296256(3.200000e+01), 0(0.000000e+00)
466 ; CM-NEXT:     LOG_IEEE T0.X, T0.W,
467 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T0.W,
468 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T0.W,
469 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T0.W,
470 ; CM-NEXT:     ADD * T1.X, PV.X, -T0.Z,
471 ; CM-NEXT:     LSHR * T0.X, KC0[2].Y, literal.x,
472 ; CM-NEXT:    2(2.802597e-45), 0(0.000000e+00)
473   %result = call <2 x float> @llvm.log2.v2f32(<2 x float> %in)
474   store <2 x float> %result, ptr addrspace(1) %out
475   ret void
478 define amdgpu_kernel void @s_log2_v3f32(ptr addrspace(1) %out, <3 x float> %in) {
479 ; SI-SDAG-LABEL: s_log2_v3f32:
480 ; SI-SDAG:       ; %bb.0:
481 ; SI-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0xd
482 ; SI-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
483 ; SI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
484 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
485 ; SI-SDAG-NEXT:    v_mov_b32_e32 v3, 0x4f800000
486 ; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
487 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s5, v0
488 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc
489 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 1.0, v3, vcc
490 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
491 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v5, 0, v1, vcc
492 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 1.0, v3, vcc
493 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
494 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 1.0, v3, vcc
495 ; SI-SDAG-NEXT:    v_mul_f32_e32 v4, s5, v4
496 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, s6, v0
497 ; SI-SDAG-NEXT:    v_log_f32_e32 v4, v4
498 ; SI-SDAG-NEXT:    v_mul_f32_e32 v6, s4, v6
499 ; SI-SDAG-NEXT:    v_log_f32_e32 v3, v0
500 ; SI-SDAG-NEXT:    v_log_f32_e32 v6, v6
501 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v7, 0, v1, vcc
502 ; SI-SDAG-NEXT:    s_mov_b32 s3, 0xf000
503 ; SI-SDAG-NEXT:    s_mov_b32 s2, -1
504 ; SI-SDAG-NEXT:    v_sub_f32_e32 v1, v4, v2
505 ; SI-SDAG-NEXT:    v_sub_f32_e32 v2, v3, v7
506 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v6, v5
507 ; SI-SDAG-NEXT:    buffer_store_dword v2, off, s[0:3], 0 offset:8
508 ; SI-SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
509 ; SI-SDAG-NEXT:    s_endpgm
511 ; SI-GISEL-LABEL: s_log2_v3f32:
512 ; SI-GISEL:       ; %bb.0:
513 ; SI-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0xd
514 ; SI-GISEL-NEXT:    s_load_dwordx2 s[8:9], s[0:1], 0x9
515 ; SI-GISEL-NEXT:    s_mov_b32 s0, 0x800000
516 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
517 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x42000000
518 ; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
519 ; SI-GISEL-NEXT:    v_mov_b32_e32 v0, s4
520 ; SI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v0
521 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
522 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, s4, v0
523 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
524 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v3, vcc
525 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x800000
526 ; SI-GISEL-NEXT:    s_mov_b32 s10, -1
527 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v4
528 ; SI-GISEL-NEXT:    v_mov_b32_e32 v4, s5
529 ; SI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v4
530 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 1.0, v1, vcc
531 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s6, v2
532 ; SI-GISEL-NEXT:    v_mul_f32_e32 v4, s5, v4
533 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, v1, s[0:1]
534 ; SI-GISEL-NEXT:    v_log_f32_e32 v4, v4
535 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, s6, v1
536 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v1
537 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v3, vcc
538 ; SI-GISEL-NEXT:    v_sub_f32_e32 v1, v4, v1
539 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, v3, s[0:1]
540 ; SI-GISEL-NEXT:    s_mov_b32 s11, 0xf000
541 ; SI-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v3
542 ; SI-GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[8:11], 0
543 ; SI-GISEL-NEXT:    buffer_store_dword v2, off, s[8:11], 0 offset:8
544 ; SI-GISEL-NEXT:    s_endpgm
546 ; VI-SDAG-LABEL: s_log2_v3f32:
547 ; VI-SDAG:       ; %bb.0:
548 ; VI-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
549 ; VI-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
550 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
551 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
552 ; VI-SDAG-NEXT:    v_mov_b32_e32 v3, 0x4f800000
553 ; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
554 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
555 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc
556 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 1.0, v3, vcc
557 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s5, v0
558 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v5, 0, v1, vcc
559 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 1.0, v3, vcc
560 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
561 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
562 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v3, vcc
563 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, s6, v4
564 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, s4, v1
565 ; VI-SDAG-NEXT:    v_log_f32_e32 v4, v4
566 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, s5, v6
567 ; VI-SDAG-NEXT:    v_log_f32_e32 v3, v1
568 ; VI-SDAG-NEXT:    v_log_f32_e32 v6, v6
569 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v4, v2
570 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v3, v0
571 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, s1
572 ; VI-SDAG-NEXT:    v_sub_f32_e32 v1, v6, v5
573 ; VI-SDAG-NEXT:    v_mov_b32_e32 v3, s0
574 ; VI-SDAG-NEXT:    flat_store_dwordx3 v[3:4], v[0:2]
575 ; VI-SDAG-NEXT:    s_endpgm
577 ; VI-GISEL-LABEL: s_log2_v3f32:
578 ; VI-GISEL:       ; %bb.0:
579 ; VI-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
580 ; VI-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
581 ; VI-GISEL-NEXT:    s_mov_b32 s0, 0x800000
582 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
583 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x42000000
584 ; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
585 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s4
586 ; VI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v0
587 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
588 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, s4, v0
589 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
590 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v3, vcc
591 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x800000
592 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v4
593 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, s5
594 ; VI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v4
595 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s6, v2
596 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v4, 1.0, v1, vcc
597 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, v1, s[0:1]
598 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, s5, v4
599 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, s6, v1
600 ; VI-GISEL-NEXT:    v_log_f32_e32 v4, v4
601 ; VI-GISEL-NEXT:    v_log_f32_e32 v2, v1
602 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v3, vcc
603 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, v3, s[0:1]
604 ; VI-GISEL-NEXT:    v_sub_f32_e32 v1, v4, v1
605 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v3
606 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, s3
607 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, s2
608 ; VI-GISEL-NEXT:    flat_store_dwordx3 v[3:4], v[0:2]
609 ; VI-GISEL-NEXT:    s_endpgm
611 ; GFX900-SDAG-LABEL: s_log2_v3f32:
612 ; GFX900-SDAG:       ; %bb.0:
613 ; GFX900-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
614 ; GFX900-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
615 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
616 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
617 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v3, 0x4f800000
618 ; GFX900-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
619 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
620 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc
621 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v4, 1.0, v3, vcc
622 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s5, v0
623 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v5, 0, v1, vcc
624 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v6, 1.0, v3, vcc
625 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
626 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
627 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v3, vcc
628 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v4, s6, v4
629 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v6, s5, v6
630 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, s4, v1
631 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v4, v4
632 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v6, v6
633 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v3, v1
634 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v7, 0
635 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v2, v4, v2
636 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v1, v6, v5
637 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v3, v0
638 ; GFX900-SDAG-NEXT:    global_store_dwordx3 v7, v[0:2], s[2:3]
639 ; GFX900-SDAG-NEXT:    s_endpgm
641 ; GFX900-GISEL-LABEL: s_log2_v3f32:
642 ; GFX900-GISEL:       ; %bb.0:
643 ; GFX900-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
644 ; GFX900-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
645 ; GFX900-GISEL-NEXT:    s_mov_b32 s0, 0x800000
646 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
647 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x42000000
648 ; GFX900-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
649 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v0, s4
650 ; GFX900-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v0
651 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
652 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, s4, v0
653 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
654 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v3, vcc
655 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x800000
656 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v4
657 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v4, s5
658 ; GFX900-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v4
659 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s6, v2
660 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v4, 1.0, v1, vcc
661 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, v1, s[0:1]
662 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v4, s5, v4
663 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, s6, v1
664 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v4, v4
665 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v2, v1
666 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v3, vcc
667 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, v3, s[0:1]
668 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v1, v4, v1
669 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v3
670 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0
671 ; GFX900-GISEL-NEXT:    global_store_dwordx3 v3, v[0:2], s[2:3]
672 ; GFX900-GISEL-NEXT:    s_endpgm
674 ; GFX1100-SDAG-LABEL: s_log2_v3f32:
675 ; GFX1100-SDAG:       ; %bb.0:
676 ; GFX1100-SDAG-NEXT:    s_clause 0x1
677 ; GFX1100-SDAG-NEXT:    s_load_b128 s[4:7], s[0:1], 0x34
678 ; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
679 ; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
680 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s2, 0x800000, s6
681 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s5
682 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s7, 0x800000, s4
683 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
684 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s2
685 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v4, 1.0, 0x4f800000, s3
686 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_4)
687 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v5, 1.0, 0x4f800000, s7
688 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42000000, s2
689 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, s3
690 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v2, s6, v2
691 ; GFX1100-SDAG-NEXT:    v_dual_mul_f32 v4, s5, v4 :: v_dual_mul_f32 v5, s4, v5
692 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42000000, s7
693 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
694 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v2, v2
695 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v4, v4
696 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
697 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v5, v5
698 ; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v6, 0
699 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
700 ; GFX1100-SDAG-NEXT:    v_dual_sub_f32 v2, v2, v0 :: v_dual_sub_f32 v1, v4, v1
701 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v5, v3
702 ; GFX1100-SDAG-NEXT:    global_store_b96 v6, v[0:2], s[0:1]
703 ; GFX1100-SDAG-NEXT:    s_nop 0
704 ; GFX1100-SDAG-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
705 ; GFX1100-SDAG-NEXT:    s_endpgm
707 ; GFX1100-GISEL-LABEL: s_log2_v3f32:
708 ; GFX1100-GISEL:       ; %bb.0:
709 ; GFX1100-GISEL-NEXT:    s_clause 0x1
710 ; GFX1100-GISEL-NEXT:    s_load_b128 s[4:7], s[0:1], 0x34
711 ; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
712 ; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
713 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s2, 0x800000, s4
714 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s5
715 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s7, 0x800000, s6
716 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
717 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s2
718 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s3
719 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
720 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s7
721 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 0x42000000, s3
722 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42000000, s2
723 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v0, s4, v0 :: v_dual_mul_f32 v1, s5, v1
724 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 0x42000000, s7
725 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
726 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
727 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v1
728 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v2, s6, v2
729 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
730 ; GFX1100-GISEL-NEXT:    v_dual_sub_f32 v0, v0, v3 :: v_dual_mov_b32 v3, 0
731 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v4
732 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v2, v2
733 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
734 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v5
735 ; GFX1100-GISEL-NEXT:    global_store_b96 v3, v[0:2], s[0:1]
736 ; GFX1100-GISEL-NEXT:    s_nop 0
737 ; GFX1100-GISEL-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
738 ; GFX1100-GISEL-NEXT:    s_endpgm
740 ; R600-LABEL: s_log2_v3f32:
741 ; R600:       ; %bb.0:
742 ; R600-NEXT:    ALU 29, @4, KC0[CB0:0-32], KC1[]
743 ; R600-NEXT:    MEM_RAT_CACHELESS STORE_RAW T2.X, T3.X, 0
744 ; R600-NEXT:    MEM_RAT_CACHELESS STORE_RAW T1.XY, T0.X, 1
745 ; R600-NEXT:    CF_END
746 ; R600-NEXT:    ALU clause starting at 4:
747 ; R600-NEXT:     SETGT T0.W, literal.x, KC0[3].Z,
748 ; R600-NEXT:     SETGT * T1.W, literal.x, KC0[3].Y,
749 ; R600-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
750 ; R600-NEXT:     CNDE * T2.W, PV.W, 1.0, literal.x,
751 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
752 ; R600-NEXT:     MUL_IEEE T2.W, KC0[3].Z, PV.W,
753 ; R600-NEXT:     CNDE * T3.W, T1.W, 1.0, literal.x,
754 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
755 ; R600-NEXT:     MUL_IEEE T0.Y, KC0[3].Y, PS,
756 ; R600-NEXT:     SETGT T0.Z, literal.x, KC0[3].W,
757 ; R600-NEXT:     CNDE T0.W, T0.W, 0.0, literal.y,
758 ; R600-NEXT:     LOG_IEEE * T0.X, PV.W,
759 ; R600-NEXT:    8388608(1.175494e-38), 1107296256(3.200000e+01)
760 ; R600-NEXT:     ADD T1.Y, PS, -PV.W,
761 ; R600-NEXT:     CNDE T1.Z, PV.Z, 1.0, literal.x,
762 ; R600-NEXT:     CNDE T0.W, T1.W, 0.0, literal.y,
763 ; R600-NEXT:     LOG_IEEE * T0.X, PV.Y,
764 ; R600-NEXT:    1333788672(4.294967e+09), 1107296256(3.200000e+01)
765 ; R600-NEXT:     ADD T1.X, PS, -PV.W,
766 ; R600-NEXT:     MUL_IEEE T0.W, KC0[3].W, PV.Z,
767 ; R600-NEXT:     LSHR * T0.X, KC0[2].Y, literal.x,
768 ; R600-NEXT:    2(2.802597e-45), 0(0.000000e+00)
769 ; R600-NEXT:     CNDE T1.W, T0.Z, 0.0, literal.x,
770 ; R600-NEXT:     LOG_IEEE * T0.Y, PV.W,
771 ; R600-NEXT:    1107296256(3.200000e+01), 0(0.000000e+00)
772 ; R600-NEXT:     ADD T2.X, PS, -PV.W,
773 ; R600-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
774 ; R600-NEXT:    8(1.121039e-44), 0(0.000000e+00)
775 ; R600-NEXT:     LSHR * T3.X, PV.W, literal.x,
776 ; R600-NEXT:    2(2.802597e-45), 0(0.000000e+00)
778 ; CM-LABEL: s_log2_v3f32:
779 ; CM:       ; %bb.0:
780 ; CM-NEXT:    ALU 35, @4, KC0[CB0:0-32], KC1[]
781 ; CM-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T0, T3.X
782 ; CM-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T1.X, T2.X
783 ; CM-NEXT:    CF_END
784 ; CM-NEXT:    ALU clause starting at 4:
785 ; CM-NEXT:     SETGT * T0.W, literal.x, KC0[3].W,
786 ; CM-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
787 ; CM-NEXT:     CNDE T0.Y, PV.W, 1.0, literal.x,
788 ; CM-NEXT:     SETGT T0.Z, literal.y, KC0[3].Z,
789 ; CM-NEXT:     SETGT * T1.W, literal.y, KC0[3].Y,
790 ; CM-NEXT:    1333788672(4.294967e+09), 8388608(1.175494e-38)
791 ; CM-NEXT:     CNDE T0.X, PV.W, 1.0, literal.x,
792 ; CM-NEXT:     CNDE T1.Y, PV.Z, 1.0, literal.x,
793 ; CM-NEXT:     CNDE T1.Z, T0.W, 0.0, literal.y,
794 ; CM-NEXT:     MUL_IEEE * T0.W, KC0[3].W, PV.Y,
795 ; CM-NEXT:    1333788672(4.294967e+09), 1107296256(3.200000e+01)
796 ; CM-NEXT:     LOG_IEEE T0.X (MASKED), T0.W,
797 ; CM-NEXT:     LOG_IEEE T0.Y, T0.W,
798 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T0.W,
799 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T0.W,
800 ; CM-NEXT:     ADD T1.X, PV.Y, -T1.Z,
801 ; CM-NEXT:     CNDE T0.Y, T0.Z, 0.0, literal.x,
802 ; CM-NEXT:     ADD_INT T0.Z, KC0[2].Y, literal.y,
803 ; CM-NEXT:     MUL_IEEE * T0.W, KC0[3].Z, T1.Y,
804 ; CM-NEXT:    1107296256(3.200000e+01), 8(1.121039e-44)
805 ; CM-NEXT:     LOG_IEEE T0.X (MASKED), T0.W,
806 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T0.W,
807 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T0.W,
808 ; CM-NEXT:     LOG_IEEE * T0.W, T0.W,
809 ; CM-NEXT:     LSHR T2.X, T0.Z, literal.x,
810 ; CM-NEXT:     ADD T0.Y, PV.W, -T0.Y,
811 ; CM-NEXT:     CNDE T0.Z, T1.W, 0.0, literal.y,
812 ; CM-NEXT:     MUL_IEEE * T0.W, KC0[3].Y, T0.X,
813 ; CM-NEXT:    2(2.802597e-45), 1107296256(3.200000e+01)
814 ; CM-NEXT:     LOG_IEEE T0.X, T0.W,
815 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T0.W,
816 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T0.W,
817 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T0.W,
818 ; CM-NEXT:     ADD * T0.X, PV.X, -T0.Z,
819 ; CM-NEXT:     LSHR * T3.X, KC0[2].Y, literal.x,
820 ; CM-NEXT:    2(2.802597e-45), 0(0.000000e+00)
821   %result = call <3 x float> @llvm.log2.v3f32(<3 x float> %in)
822   store <3 x float> %result, ptr addrspace(1) %out
823   ret void
826 ; FIXME: We should be able to merge these packets together on Cayman so we
827 ; have a maximum of 4 instructions.
828 define amdgpu_kernel void @s_log2_v4f32(ptr addrspace(1) %out, <4 x float> %in) {
829 ; SI-SDAG-LABEL: s_log2_v4f32:
830 ; SI-SDAG:       ; %bb.0:
831 ; SI-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
832 ; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0xd
833 ; SI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
834 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
835 ; SI-SDAG-NEXT:    v_mov_b32_e32 v3, 0x4f800000
836 ; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000
837 ; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
838 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s3, v0
839 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc
840 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 1.0, v3, vcc
841 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
842 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v5, 0, v1, vcc
843 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 1.0, v3, vcc
844 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s1, v0
845 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v7, 0, v1, vcc
846 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v8, 1.0, v3, vcc
847 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s0, v0
848 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
849 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v3, vcc
850 ; SI-SDAG-NEXT:    v_mul_f32_e32 v4, s3, v4
851 ; SI-SDAG-NEXT:    v_mul_f32_e32 v6, s2, v6
852 ; SI-SDAG-NEXT:    v_mul_f32_e32 v8, s1, v8
853 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, s0, v1
854 ; SI-SDAG-NEXT:    v_log_f32_e32 v4, v4
855 ; SI-SDAG-NEXT:    v_log_f32_e32 v6, v6
856 ; SI-SDAG-NEXT:    v_log_f32_e32 v8, v8
857 ; SI-SDAG-NEXT:    v_log_f32_e32 v9, v1
858 ; SI-SDAG-NEXT:    s_mov_b32 s6, -1
859 ; SI-SDAG-NEXT:    v_sub_f32_e32 v3, v4, v2
860 ; SI-SDAG-NEXT:    v_sub_f32_e32 v2, v6, v5
861 ; SI-SDAG-NEXT:    v_sub_f32_e32 v1, v8, v7
862 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v9, v0
863 ; SI-SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0
864 ; SI-SDAG-NEXT:    s_endpgm
866 ; SI-GISEL-LABEL: s_log2_v4f32:
867 ; SI-GISEL:       ; %bb.0:
868 ; SI-GISEL-NEXT:    s_load_dwordx4 s[8:11], s[0:1], 0xd
869 ; SI-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
870 ; SI-GISEL-NEXT:    s_mov_b32 s0, 0x800000
871 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x4f800000
872 ; SI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x42000000
873 ; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
874 ; SI-GISEL-NEXT:    v_mov_b32_e32 v0, s8
875 ; SI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v0
876 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, s9
877 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v3, vcc
878 ; SI-GISEL-NEXT:    v_cmp_gt_f32_e64 s[0:1], s0, v1
879 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, s8, v0
880 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, v3, s[0:1]
881 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
882 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, s9, v1
883 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
884 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x800000
885 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v5, 0, v4, vcc
886 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v5
887 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, v4, s[0:1]
888 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s10, v2
889 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s11, v2
890 ; SI-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v5
891 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v5, 1.0, v3, vcc
892 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 1.0, v3, s[0:1]
893 ; SI-GISEL-NEXT:    v_mul_f32_e32 v5, s10, v5
894 ; SI-GISEL-NEXT:    v_mul_f32_e32 v2, s11, v2
895 ; SI-GISEL-NEXT:    v_log_f32_e32 v5, v5
896 ; SI-GISEL-NEXT:    v_log_f32_e32 v3, v2
897 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
898 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v4, s[0:1]
899 ; SI-GISEL-NEXT:    v_sub_f32_e32 v2, v5, v2
900 ; SI-GISEL-NEXT:    v_sub_f32_e32 v3, v3, v4
901 ; SI-GISEL-NEXT:    s_mov_b32 s6, -1
902 ; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000
903 ; SI-GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0
904 ; SI-GISEL-NEXT:    s_endpgm
906 ; VI-SDAG-LABEL: s_log2_v4f32:
907 ; VI-SDAG:       ; %bb.0:
908 ; VI-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
909 ; VI-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
910 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
911 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
912 ; VI-SDAG-NEXT:    v_mov_b32_e32 v3, 0x4f800000
913 ; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
914 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v0
915 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc
916 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 1.0, v3, vcc
917 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
918 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v5, 0, v1, vcc
919 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 1.0, v3, vcc
920 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s5, v0
921 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v7, 0, v1, vcc
922 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v8, 1.0, v3, vcc
923 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
924 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, s7, v4
925 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, s6, v6
926 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
927 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v3, vcc
928 ; VI-SDAG-NEXT:    v_log_f32_e32 v4, v4
929 ; VI-SDAG-NEXT:    v_log_f32_e32 v6, v6
930 ; VI-SDAG-NEXT:    v_mul_f32_e32 v8, s5, v8
931 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, s4, v1
932 ; VI-SDAG-NEXT:    v_log_f32_e32 v8, v8
933 ; VI-SDAG-NEXT:    v_log_f32_e32 v9, v1
934 ; VI-SDAG-NEXT:    v_sub_f32_e32 v3, v4, v2
935 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v6, v5
936 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, s1
937 ; VI-SDAG-NEXT:    v_sub_f32_e32 v1, v8, v7
938 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v9, v0
939 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, s0
940 ; VI-SDAG-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
941 ; VI-SDAG-NEXT:    s_endpgm
943 ; VI-GISEL-LABEL: s_log2_v4f32:
944 ; VI-GISEL:       ; %bb.0:
945 ; VI-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
946 ; VI-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
947 ; VI-GISEL-NEXT:    s_mov_b32 s0, 0x800000
948 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x4f800000
949 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x42000000
950 ; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
951 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s4
952 ; VI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v0
953 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s5
954 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v3, vcc
955 ; VI-GISEL-NEXT:    v_cmp_gt_f32_e64 s[0:1], s0, v1
956 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, s4, v0
957 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, v3, s[0:1]
958 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
959 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, s5, v1
960 ; VI-GISEL-NEXT:    v_log_f32_e32 v1, v1
961 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x800000
962 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v5, 0, v4, vcc
963 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v5
964 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, v4, s[0:1]
965 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v2
966 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s7, v2
967 ; VI-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v5
968 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v5, 1.0, v3, vcc
969 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 1.0, v3, s[0:1]
970 ; VI-GISEL-NEXT:    v_mul_f32_e32 v5, s6, v5
971 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, s7, v2
972 ; VI-GISEL-NEXT:    v_log_f32_e32 v5, v5
973 ; VI-GISEL-NEXT:    v_log_f32_e32 v3, v2
974 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
975 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v4, s[0:1]
976 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v5, v2
977 ; VI-GISEL-NEXT:    v_sub_f32_e32 v3, v3, v4
978 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, s3
979 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, s2
980 ; VI-GISEL-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
981 ; VI-GISEL-NEXT:    s_endpgm
983 ; GFX900-SDAG-LABEL: s_log2_v4f32:
984 ; GFX900-SDAG:       ; %bb.0:
985 ; GFX900-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
986 ; GFX900-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
987 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
988 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
989 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v3, 0x4f800000
990 ; GFX900-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
991 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v0
992 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v1, vcc
993 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v5, 1.0, v3, vcc
994 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
995 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v6, 0, v1, vcc
996 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v7, 1.0, v3, vcc
997 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s5, v0
998 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v8, 0, v1, vcc
999 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v9, 1.0, v3, vcc
1000 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
1001 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc
1002 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v3, vcc
1003 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v5, s7, v5
1004 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v7, s6, v7
1005 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v9, s5, v9
1006 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, s4, v1
1007 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v5, v5
1008 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v7, v7
1009 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v9, v9
1010 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v10, v1
1011 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v4, 0
1012 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v3, v5, v2
1013 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v2, v7, v6
1014 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v1, v9, v8
1015 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v10, v0
1016 ; GFX900-SDAG-NEXT:    global_store_dwordx4 v4, v[0:3], s[2:3]
1017 ; GFX900-SDAG-NEXT:    s_endpgm
1019 ; GFX900-GISEL-LABEL: s_log2_v4f32:
1020 ; GFX900-GISEL:       ; %bb.0:
1021 ; GFX900-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
1022 ; GFX900-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
1023 ; GFX900-GISEL-NEXT:    s_mov_b32 s0, 0x800000
1024 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x4f800000
1025 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v4, 0x42000000
1026 ; GFX900-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1027 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v0, s4
1028 ; GFX900-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v0
1029 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, s5
1030 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v3, vcc
1031 ; GFX900-GISEL-NEXT:    v_cmp_gt_f32_e64 s[0:1], s0, v1
1032 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, s4, v0
1033 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, v3, s[0:1]
1034 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
1035 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, s5, v1
1036 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v1, v1
1037 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x800000
1038 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v5, 0, v4, vcc
1039 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v5
1040 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, v4, s[0:1]
1041 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v2
1042 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s7, v2
1043 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v5
1044 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v5, 1.0, v3, vcc
1045 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v2, 1.0, v3, s[0:1]
1046 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v5, s6, v5
1047 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v2, s7, v2
1048 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v5, v5
1049 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v3, v2
1050 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v4, vcc
1051 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v4, s[0:1]
1052 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v2, v5, v2
1053 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v3, v3, v4
1054 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v4, 0
1055 ; GFX900-GISEL-NEXT:    global_store_dwordx4 v4, v[0:3], s[2:3]
1056 ; GFX900-GISEL-NEXT:    s_endpgm
1058 ; GFX1100-SDAG-LABEL: s_log2_v4f32:
1059 ; GFX1100-SDAG:       ; %bb.0:
1060 ; GFX1100-SDAG-NEXT:    s_clause 0x1
1061 ; GFX1100-SDAG-NEXT:    s_load_b128 s[4:7], s[0:1], 0x34
1062 ; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1063 ; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1064 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s2, 0x800000, s7
1065 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s6
1066 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s8, 0x800000, s5
1067 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s9, 0x800000, s4
1068 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1069 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s2
1070 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v3, 1.0, 0x4f800000, s3
1071 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1072 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v6, 1.0, 0x4f800000, s8
1073 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v7, 1.0, 0x4f800000, s9
1074 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42000000, s2
1075 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
1076 ; GFX1100-SDAG-NEXT:    v_dual_mul_f32 v2, s7, v2 :: v_dual_mul_f32 v3, s6, v3
1077 ; GFX1100-SDAG-NEXT:    v_dual_mul_f32 v6, s5, v6 :: v_dual_mul_f32 v7, s4, v7
1078 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, s3
1079 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1080 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v2, v2
1081 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v8, v3
1082 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(TRANS32_DEP_3)
1083 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v6, v6
1084 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v7, v7
1085 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 0x42000000, s8
1086 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v5, 0, 0x42000000, s9
1087 ; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v9, 0
1088 ; GFX1100-SDAG-NEXT:    v_dual_sub_f32 v3, v2, v0 :: v_dual_sub_f32 v2, v8, v1
1089 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1090 ; GFX1100-SDAG-NEXT:    v_dual_sub_f32 v1, v6, v4 :: v_dual_sub_f32 v0, v7, v5
1091 ; GFX1100-SDAG-NEXT:    global_store_b128 v9, v[0:3], s[0:1]
1092 ; GFX1100-SDAG-NEXT:    s_nop 0
1093 ; GFX1100-SDAG-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1094 ; GFX1100-SDAG-NEXT:    s_endpgm
1096 ; GFX1100-GISEL-LABEL: s_log2_v4f32:
1097 ; GFX1100-GISEL:       ; %bb.0:
1098 ; GFX1100-GISEL-NEXT:    s_clause 0x1
1099 ; GFX1100-GISEL-NEXT:    s_load_b128 s[4:7], s[0:1], 0x34
1100 ; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1101 ; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1102 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s2, 0x800000, s4
1103 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s5
1104 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s8, 0x800000, s6
1105 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s9, 0x800000, s7
1106 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1107 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s2
1108 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s3
1109 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1110 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s8
1111 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v3, 1.0, 0x4f800000, s9
1112 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 0x42000000, s2
1113 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
1114 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v0, s4, v0 :: v_dual_mul_f32 v1, s5, v1
1115 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v2, s6, v2 :: v_dual_mul_f32 v3, s7, v3
1116 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 0x42000000, s3
1117 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1118 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1119 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v1
1120 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(TRANS32_DEP_3)
1121 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v2, v2
1122 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v3, v3
1123 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 0x42000000, s8
1124 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v7, 0, 0x42000000, s9
1125 ; GFX1100-GISEL-NEXT:    v_dual_sub_f32 v0, v0, v4 :: v_dual_sub_f32 v1, v1, v5
1126 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1127 ; GFX1100-GISEL-NEXT:    v_dual_sub_f32 v2, v2, v6 :: v_dual_sub_f32 v3, v3, v7
1128 ; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v4, 0
1129 ; GFX1100-GISEL-NEXT:    global_store_b128 v4, v[0:3], s[0:1]
1130 ; GFX1100-GISEL-NEXT:    s_nop 0
1131 ; GFX1100-GISEL-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1132 ; GFX1100-GISEL-NEXT:    s_endpgm
1134 ; R600-LABEL: s_log2_v4f32:
1135 ; R600:       ; %bb.0:
1136 ; R600-NEXT:    ALU 33, @4, KC0[CB0:0-32], KC1[]
1137 ; R600-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XYZW, T1.X, 1
1138 ; R600-NEXT:    CF_END
1139 ; R600-NEXT:    PAD
1140 ; R600-NEXT:    ALU clause starting at 4:
1141 ; R600-NEXT:     SETGT T0.W, literal.x, KC0[4].X,
1142 ; R600-NEXT:     SETGT * T1.W, literal.x, KC0[3].W,
1143 ; R600-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
1144 ; R600-NEXT:     CNDE * T2.W, PV.W, 1.0, literal.x,
1145 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
1146 ; R600-NEXT:     MUL_IEEE T0.Z, KC0[4].X, PV.W,
1147 ; R600-NEXT:     SETGT T2.W, literal.x, KC0[3].Z,
1148 ; R600-NEXT:     CNDE * T3.W, T1.W, 1.0, literal.y,
1149 ; R600-NEXT:    8388608(1.175494e-38), 1333788672(4.294967e+09)
1150 ; R600-NEXT:     MUL_IEEE T0.X, KC0[3].W, PS,
1151 ; R600-NEXT:     CNDE T0.Y, T0.W, 0.0, literal.x,
1152 ; R600-NEXT:     SETGT T1.Z, literal.y, KC0[3].Y,
1153 ; R600-NEXT:     CNDE T0.W, PV.W, 1.0, literal.z,
1154 ; R600-NEXT:     LOG_IEEE * T0.Z, PV.Z,
1155 ; R600-NEXT:    1107296256(3.200000e+01), 8388608(1.175494e-38)
1156 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
1157 ; R600-NEXT:     MUL_IEEE T1.X, KC0[3].Z, PV.W,
1158 ; R600-NEXT:     CNDE T1.Y, T1.W, 0.0, literal.x,
1159 ; R600-NEXT:     CNDE T2.Z, PV.Z, 1.0, literal.y,
1160 ; R600-NEXT:     ADD T0.W, PS, -PV.Y,
1161 ; R600-NEXT:     LOG_IEEE * T0.X, PV.X,
1162 ; R600-NEXT:    1107296256(3.200000e+01), 1333788672(4.294967e+09)
1163 ; R600-NEXT:     MUL_IEEE T2.Y, KC0[3].Y, PV.Z,
1164 ; R600-NEXT:     ADD T0.Z, PS, -PV.Y,
1165 ; R600-NEXT:     CNDE T1.W, T2.W, 0.0, literal.x,
1166 ; R600-NEXT:     LOG_IEEE * T0.X, PV.X,
1167 ; R600-NEXT:    1107296256(3.200000e+01), 0(0.000000e+00)
1168 ; R600-NEXT:     ADD T0.Y, PS, -PV.W,
1169 ; R600-NEXT:     CNDE T1.W, T1.Z, 0.0, literal.x,
1170 ; R600-NEXT:     LOG_IEEE * T0.X, PV.Y,
1171 ; R600-NEXT:    1107296256(3.200000e+01), 0(0.000000e+00)
1172 ; R600-NEXT:     ADD T0.X, PS, -PV.W,
1173 ; R600-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
1174 ; R600-NEXT:    2(2.802597e-45), 0(0.000000e+00)
1176 ; CM-LABEL: s_log2_v4f32:
1177 ; CM:       ; %bb.0:
1178 ; CM-NEXT:    ALU 43, @4, KC0[CB0:0-32], KC1[]
1179 ; CM-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T0, T1.X
1180 ; CM-NEXT:    CF_END
1181 ; CM-NEXT:    PAD
1182 ; CM-NEXT:    ALU clause starting at 4:
1183 ; CM-NEXT:     SETGT * T0.W, literal.x, KC0[4].X,
1184 ; CM-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
1185 ; CM-NEXT:     CNDE T0.Y, PV.W, 1.0, literal.x,
1186 ; CM-NEXT:     SETGT T0.Z, literal.y, KC0[3].W,
1187 ; CM-NEXT:     SETGT * T1.W, literal.y, KC0[3].Z,
1188 ; CM-NEXT:    1333788672(4.294967e+09), 8388608(1.175494e-38)
1189 ; CM-NEXT:     CNDE T0.X, PV.W, 1.0, literal.x,
1190 ; CM-NEXT:     CNDE T1.Y, T0.W, 0.0, literal.y,
1191 ; CM-NEXT:     CNDE T1.Z, PV.Z, 1.0, literal.x,
1192 ; CM-NEXT:     MUL_IEEE * T0.W, KC0[4].X, PV.Y,
1193 ; CM-NEXT:    1333788672(4.294967e+09), 1107296256(3.200000e+01)
1194 ; CM-NEXT:     LOG_IEEE T0.X (MASKED), T0.W,
1195 ; CM-NEXT:     LOG_IEEE T0.Y, T0.W,
1196 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T0.W,
1197 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T0.W,
1198 ; CM-NEXT:     CNDE T1.X, T0.Z, 0.0, literal.x,
1199 ; CM-NEXT:     SETGT T2.Y, literal.y, KC0[3].Y,
1200 ; CM-NEXT:     MUL_IEEE T0.Z, KC0[3].W, T1.Z,
1201 ; CM-NEXT:     ADD * T0.W, PV.Y, -T1.Y,
1202 ; CM-NEXT:    1107296256(3.200000e+01), 8388608(1.175494e-38)
1203 ; CM-NEXT:     LOG_IEEE T0.X (MASKED), T0.Z,
1204 ; CM-NEXT:     LOG_IEEE T0.Y, T0.Z,
1205 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T0.Z,
1206 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T0.Z,
1207 ; CM-NEXT:     CNDE T2.X, T2.Y, 1.0, literal.x,
1208 ; CM-NEXT:     CNDE T1.Y, T1.W, 0.0, literal.y,
1209 ; CM-NEXT:     ADD T0.Z, PV.Y, -T1.X,
1210 ; CM-NEXT:     MUL_IEEE * T1.W, KC0[3].Z, T0.X, BS:VEC_021/SCL_122
1211 ; CM-NEXT:    1333788672(4.294967e+09), 1107296256(3.200000e+01)
1212 ; CM-NEXT:     LOG_IEEE T0.X, T1.W,
1213 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T1.W,
1214 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T1.W,
1215 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T1.W,
1216 ; CM-NEXT:     ADD T0.Y, PV.X, -T1.Y,
1217 ; CM-NEXT:     CNDE T1.Z, T2.Y, 0.0, literal.x,
1218 ; CM-NEXT:     MUL_IEEE * T1.W, KC0[3].Y, T2.X,
1219 ; CM-NEXT:    1107296256(3.200000e+01), 0(0.000000e+00)
1220 ; CM-NEXT:     LOG_IEEE T0.X, T1.W,
1221 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T1.W,
1222 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T1.W,
1223 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T1.W,
1224 ; CM-NEXT:     ADD * T0.X, PV.X, -T1.Z,
1225 ; CM-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
1226 ; CM-NEXT:    2(2.802597e-45), 0(0.000000e+00)
1227   %result = call <4 x float> @llvm.log2.v4f32(<4 x float> %in)
1228   store <4 x float> %result, ptr addrspace(1) %out
1229   ret void
1232 define float @v_log2_f32(float %in) {
1233 ; GFX689-SDAG-LABEL: v_log2_f32:
1234 ; GFX689-SDAG:       ; %bb.0:
1235 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1236 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
1237 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1238 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1239 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1240 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1241 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1242 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1243 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1244 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1245 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1247 ; GFX689-GISEL-LABEL: v_log2_f32:
1248 ; GFX689-GISEL:       ; %bb.0:
1249 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1250 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1251 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1252 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1253 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1254 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1255 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1256 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1257 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1258 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1259 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1261 ; GFX1100-SDAG-LABEL: v_log2_f32:
1262 ; GFX1100-SDAG:       ; %bb.0:
1263 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1264 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1265 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1266 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1267 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1268 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1269 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1270 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1271 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1272 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1274 ; GFX1100-GISEL-LABEL: v_log2_f32:
1275 ; GFX1100-GISEL:       ; %bb.0:
1276 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1277 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1278 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
1279 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1280 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1281 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1282 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1283 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1284 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1285 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
1287 ; R600-LABEL: v_log2_f32:
1288 ; R600:       ; %bb.0:
1289 ; R600-NEXT:    CF_END
1290 ; R600-NEXT:    PAD
1292 ; CM-LABEL: v_log2_f32:
1293 ; CM:       ; %bb.0:
1294 ; CM-NEXT:    CF_END
1295 ; CM-NEXT:    PAD
1296   %result = call float @llvm.log2.f32(float %in)
1297   ret float %result
1300 define float @v_log2_fabs_f32(float %in) {
1301 ; GFX689-SDAG-LABEL: v_log2_fabs_f32:
1302 ; GFX689-SDAG:       ; %bb.0:
1303 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1304 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
1305 ; GFX689-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
1306 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1307 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1308 ; GFX689-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v2
1309 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1310 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1311 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1312 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1313 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1315 ; GFX689-GISEL-LABEL: v_log2_fabs_f32:
1316 ; GFX689-GISEL:       ; %bb.0:
1317 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1318 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1319 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1320 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
1321 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1322 ; GFX689-GISEL-NEXT:    v_mul_f32_e64 v0, |v0|, v1
1323 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1324 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1325 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1326 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1327 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1329 ; GFX1100-SDAG-LABEL: v_log2_fabs_f32:
1330 ; GFX1100-SDAG:       ; %bb.0:
1331 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1332 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, |v0|
1333 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1334 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s0
1335 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, s0
1336 ; GFX1100-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v2
1337 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1338 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1339 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1340 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1341 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1343 ; GFX1100-GISEL-LABEL: v_log2_fabs_f32:
1344 ; GFX1100-GISEL:       ; %bb.0:
1345 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1346 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, |v0|
1347 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1348 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s0
1349 ; GFX1100-GISEL-NEXT:    v_mul_f32_e64 v0, |v0|, v1
1350 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, s0
1351 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1352 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1353 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1354 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1355 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
1357 ; R600-LABEL: v_log2_fabs_f32:
1358 ; R600:       ; %bb.0:
1359 ; R600-NEXT:    CF_END
1360 ; R600-NEXT:    PAD
1362 ; CM-LABEL: v_log2_fabs_f32:
1363 ; CM:       ; %bb.0:
1364 ; CM-NEXT:    CF_END
1365 ; CM-NEXT:    PAD
1366   %fabs = call float @llvm.fabs.f32(float %in)
1367   %result = call float @llvm.log2.f32(float %fabs)
1368   ret float %result
1371 define float @v_log2_fneg_fabs_f32(float %in) {
1372 ; GFX689-SDAG-LABEL: v_log2_fneg_fabs_f32:
1373 ; GFX689-SDAG:       ; %bb.0:
1374 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1375 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x80800000
1376 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
1377 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1378 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1379 ; GFX689-SDAG-NEXT:    v_mul_f32_e64 v0, -|v0|, v2
1380 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1381 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1382 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1383 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1384 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1386 ; GFX689-GISEL-LABEL: v_log2_fneg_fabs_f32:
1387 ; GFX689-GISEL:       ; %bb.0:
1388 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1389 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1390 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1391 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, -|v0|, v1
1392 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1393 ; GFX689-GISEL-NEXT:    v_mul_f32_e64 v0, -|v0|, v1
1394 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1395 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1396 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1397 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1398 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1400 ; GFX1100-SDAG-LABEL: v_log2_fneg_fabs_f32:
1401 ; GFX1100-SDAG:       ; %bb.0:
1402 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1403 ; GFX1100-SDAG-NEXT:    v_cmp_lt_f32_e64 s0, 0x80800000, |v0|
1404 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1405 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s0
1406 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, s0
1407 ; GFX1100-SDAG-NEXT:    v_mul_f32_e64 v0, -|v0|, v2
1408 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1409 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1410 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1411 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1412 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1414 ; GFX1100-GISEL-LABEL: v_log2_fneg_fabs_f32:
1415 ; GFX1100-GISEL:       ; %bb.0:
1416 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1417 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, -|v0|
1418 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1419 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s0
1420 ; GFX1100-GISEL-NEXT:    v_mul_f32_e64 v0, -|v0|, v1
1421 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, s0
1422 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1423 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1424 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1425 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1426 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
1428 ; R600-LABEL: v_log2_fneg_fabs_f32:
1429 ; R600:       ; %bb.0:
1430 ; R600-NEXT:    CF_END
1431 ; R600-NEXT:    PAD
1433 ; CM-LABEL: v_log2_fneg_fabs_f32:
1434 ; CM:       ; %bb.0:
1435 ; CM-NEXT:    CF_END
1436 ; CM-NEXT:    PAD
1437   %fabs = call float @llvm.fabs.f32(float %in)
1438   %fneg.fabs = fneg float %fabs
1439   %result = call float @llvm.log2.f32(float %fneg.fabs)
1440   ret float %result
1443 define float @v_log2_fneg_f32(float %in) {
1444 ; GFX689-SDAG-LABEL: v_log2_fneg_f32:
1445 ; GFX689-SDAG:       ; %bb.0:
1446 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1447 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x80800000
1448 ; GFX689-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
1449 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1450 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1451 ; GFX689-SDAG-NEXT:    v_mul_f32_e64 v0, -v0, v2
1452 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1453 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1454 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1455 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1456 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1458 ; GFX689-GISEL-LABEL: v_log2_fneg_f32:
1459 ; GFX689-GISEL:       ; %bb.0:
1460 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1461 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1462 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1463 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, -v0, v1
1464 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1465 ; GFX689-GISEL-NEXT:    v_mul_f32_e64 v0, -v0, v1
1466 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1467 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1468 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1469 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1470 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1472 ; GFX1100-SDAG-LABEL: v_log2_fneg_f32:
1473 ; GFX1100-SDAG:       ; %bb.0:
1474 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1475 ; GFX1100-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc_lo, 0x80800000, v0
1476 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1477 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1478 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1479 ; GFX1100-SDAG-NEXT:    v_mul_f32_e64 v0, -v0, v2
1480 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1481 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1482 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1483 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1485 ; GFX1100-GISEL-LABEL: v_log2_fneg_f32:
1486 ; GFX1100-GISEL:       ; %bb.0:
1487 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1488 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, -v0
1489 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1490 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s0
1491 ; GFX1100-GISEL-NEXT:    v_mul_f32_e64 v0, -v0, v1
1492 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, s0
1493 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1494 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1495 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1496 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1497 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
1499 ; R600-LABEL: v_log2_fneg_f32:
1500 ; R600:       ; %bb.0:
1501 ; R600-NEXT:    CF_END
1502 ; R600-NEXT:    PAD
1504 ; CM-LABEL: v_log2_fneg_f32:
1505 ; CM:       ; %bb.0:
1506 ; CM-NEXT:    CF_END
1507 ; CM-NEXT:    PAD
1508   %fneg = fneg float %in
1509   %result = call float @llvm.log2.f32(float %fneg)
1510   ret float %result
1513 define float @v_log2_f32_fast(float %in) {
1514 ; GFX689-SDAG-LABEL: v_log2_f32_fast:
1515 ; GFX689-SDAG:       ; %bb.0:
1516 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1517 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
1518 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1519 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1520 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1521 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1522 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1523 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1524 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1525 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1526 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1528 ; GFX689-GISEL-LABEL: v_log2_f32_fast:
1529 ; GFX689-GISEL:       ; %bb.0:
1530 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1531 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1532 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1533 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1534 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1535 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1536 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1537 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1538 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1539 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1540 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1542 ; GFX1100-SDAG-LABEL: v_log2_f32_fast:
1543 ; GFX1100-SDAG:       ; %bb.0:
1544 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1545 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1546 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1547 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1548 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1549 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1550 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1551 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1552 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1553 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1555 ; GFX1100-GISEL-LABEL: v_log2_f32_fast:
1556 ; GFX1100-GISEL:       ; %bb.0:
1557 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1558 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1559 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
1560 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1561 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1562 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1563 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1564 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1565 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1566 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
1568 ; R600-LABEL: v_log2_f32_fast:
1569 ; R600:       ; %bb.0:
1570 ; R600-NEXT:    CF_END
1571 ; R600-NEXT:    PAD
1573 ; CM-LABEL: v_log2_f32_fast:
1574 ; CM:       ; %bb.0:
1575 ; CM-NEXT:    CF_END
1576 ; CM-NEXT:    PAD
1577   %result = call fast float @llvm.log2.f32(float %in)
1578   ret float %result
1581 define float @v_log2_f32_unsafe_math_attr(float %in) "unsafe-fp-math"="true" {
1582 ; GFX689-SDAG-LABEL: v_log2_f32_unsafe_math_attr:
1583 ; GFX689-SDAG:       ; %bb.0:
1584 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1585 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
1586 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1587 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1588 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1589 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1590 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1591 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1592 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1593 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1594 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1596 ; GFX689-GISEL-LABEL: v_log2_f32_unsafe_math_attr:
1597 ; GFX689-GISEL:       ; %bb.0:
1598 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1599 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1600 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1601 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1602 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1603 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1604 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1605 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1606 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1607 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1608 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1610 ; GFX1100-SDAG-LABEL: v_log2_f32_unsafe_math_attr:
1611 ; GFX1100-SDAG:       ; %bb.0:
1612 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1613 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1614 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1615 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1616 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1617 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1618 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1619 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1620 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1621 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1623 ; GFX1100-GISEL-LABEL: v_log2_f32_unsafe_math_attr:
1624 ; GFX1100-GISEL:       ; %bb.0:
1625 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1626 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1627 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
1628 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1629 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1630 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1631 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1632 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1633 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1634 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
1636 ; R600-LABEL: v_log2_f32_unsafe_math_attr:
1637 ; R600:       ; %bb.0:
1638 ; R600-NEXT:    CF_END
1639 ; R600-NEXT:    PAD
1641 ; CM-LABEL: v_log2_f32_unsafe_math_attr:
1642 ; CM:       ; %bb.0:
1643 ; CM-NEXT:    CF_END
1644 ; CM-NEXT:    PAD
1645   %result = call float @llvm.log2.f32(float %in)
1646   ret float %result
1649 define float @v_log2_f32_approx_fn_attr(float %in) "approx-func-fp-math"="true" {
1650 ; GFX689-SDAG-LABEL: v_log2_f32_approx_fn_attr:
1651 ; GFX689-SDAG:       ; %bb.0:
1652 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1653 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
1654 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1655 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1656 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1657 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1658 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1659 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1660 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1661 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1662 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1664 ; GFX689-GISEL-LABEL: v_log2_f32_approx_fn_attr:
1665 ; GFX689-GISEL:       ; %bb.0:
1666 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1667 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1668 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1669 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1670 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1671 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1672 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1673 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1674 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1675 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1676 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1678 ; GFX1100-SDAG-LABEL: v_log2_f32_approx_fn_attr:
1679 ; GFX1100-SDAG:       ; %bb.0:
1680 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1681 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1682 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1683 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1684 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1685 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1686 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1687 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1688 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1689 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1691 ; GFX1100-GISEL-LABEL: v_log2_f32_approx_fn_attr:
1692 ; GFX1100-GISEL:       ; %bb.0:
1693 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1694 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1695 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
1696 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1697 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1698 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1699 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1700 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1701 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1702 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
1704 ; R600-LABEL: v_log2_f32_approx_fn_attr:
1705 ; R600:       ; %bb.0:
1706 ; R600-NEXT:    CF_END
1707 ; R600-NEXT:    PAD
1709 ; CM-LABEL: v_log2_f32_approx_fn_attr:
1710 ; CM:       ; %bb.0:
1711 ; CM-NEXT:    CF_END
1712 ; CM-NEXT:    PAD
1713   %result = call float @llvm.log2.f32(float %in)
1714   ret float %result
1717 define float @v_log2_f32_ninf(float %in) {
1718 ; GFX689-SDAG-LABEL: v_log2_f32_ninf:
1719 ; GFX689-SDAG:       ; %bb.0:
1720 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1721 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
1722 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1723 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1724 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1725 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1726 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1727 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1728 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1729 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1730 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1732 ; GFX689-GISEL-LABEL: v_log2_f32_ninf:
1733 ; GFX689-GISEL:       ; %bb.0:
1734 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1735 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1736 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1737 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1738 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1739 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1740 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1741 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1742 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1743 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1744 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1746 ; GFX1100-SDAG-LABEL: v_log2_f32_ninf:
1747 ; GFX1100-SDAG:       ; %bb.0:
1748 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1749 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1750 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1751 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1752 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1753 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1754 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1755 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1756 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1757 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1759 ; GFX1100-GISEL-LABEL: v_log2_f32_ninf:
1760 ; GFX1100-GISEL:       ; %bb.0:
1761 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1762 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1763 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
1764 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1765 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1766 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1767 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1768 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1769 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1770 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
1772 ; R600-LABEL: v_log2_f32_ninf:
1773 ; R600:       ; %bb.0:
1774 ; R600-NEXT:    CF_END
1775 ; R600-NEXT:    PAD
1777 ; CM-LABEL: v_log2_f32_ninf:
1778 ; CM:       ; %bb.0:
1779 ; CM-NEXT:    CF_END
1780 ; CM-NEXT:    PAD
1781   %result = call ninf float @llvm.log2.f32(float %in)
1782   ret float %result
1785 define float @v_log2_f32_afn(float %in) {
1786 ; GFX689-SDAG-LABEL: v_log2_f32_afn:
1787 ; GFX689-SDAG:       ; %bb.0:
1788 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1789 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
1790 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1791 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1792 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1793 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1794 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1795 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1796 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1797 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1798 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1800 ; GFX689-GISEL-LABEL: v_log2_f32_afn:
1801 ; GFX689-GISEL:       ; %bb.0:
1802 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1803 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1804 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1805 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1806 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1807 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1808 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1809 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1810 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1811 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1812 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1814 ; GFX1100-SDAG-LABEL: v_log2_f32_afn:
1815 ; GFX1100-SDAG:       ; %bb.0:
1816 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1817 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1818 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1819 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1820 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1821 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1822 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1823 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1824 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1825 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1827 ; GFX1100-GISEL-LABEL: v_log2_f32_afn:
1828 ; GFX1100-GISEL:       ; %bb.0:
1829 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1830 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1831 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
1832 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1833 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1834 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1835 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1836 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1837 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1838 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
1840 ; R600-LABEL: v_log2_f32_afn:
1841 ; R600:       ; %bb.0:
1842 ; R600-NEXT:    CF_END
1843 ; R600-NEXT:    PAD
1845 ; CM-LABEL: v_log2_f32_afn:
1846 ; CM:       ; %bb.0:
1847 ; CM-NEXT:    CF_END
1848 ; CM-NEXT:    PAD
1849   %result = call afn float @llvm.log2.f32(float %in)
1850   ret float %result
1853 define float @v_log2_f32_afn_daz(float %in) #0 {
1854 ; GFX689-LABEL: v_log2_f32_afn_daz:
1855 ; GFX689:       ; %bb.0:
1856 ; GFX689-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1857 ; GFX689-NEXT:    v_log_f32_e32 v0, v0
1858 ; GFX689-NEXT:    s_setpc_b64 s[30:31]
1860 ; GFX1100-LABEL: v_log2_f32_afn_daz:
1861 ; GFX1100:       ; %bb.0:
1862 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1863 ; GFX1100-NEXT:    v_log_f32_e32 v0, v0
1864 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
1866 ; R600-LABEL: v_log2_f32_afn_daz:
1867 ; R600:       ; %bb.0:
1868 ; R600-NEXT:    CF_END
1869 ; R600-NEXT:    PAD
1871 ; CM-LABEL: v_log2_f32_afn_daz:
1872 ; CM:       ; %bb.0:
1873 ; CM-NEXT:    CF_END
1874 ; CM-NEXT:    PAD
1875   %result = call afn float @llvm.log2.f32(float %in)
1876   ret float %result
1879 define float @v_log2_f32_afn_dynamic(float %in) #1 {
1880 ; GFX689-SDAG-LABEL: v_log2_f32_afn_dynamic:
1881 ; GFX689-SDAG:       ; %bb.0:
1882 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1883 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
1884 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
1885 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1886 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1887 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1888 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1889 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1890 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1891 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1892 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1894 ; GFX689-GISEL-LABEL: v_log2_f32_afn_dynamic:
1895 ; GFX689-GISEL:       ; %bb.0:
1896 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1897 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1898 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1899 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
1900 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1901 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1902 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1903 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1904 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1905 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1906 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1908 ; GFX1100-SDAG-LABEL: v_log2_f32_afn_dynamic:
1909 ; GFX1100-SDAG:       ; %bb.0:
1910 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1911 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1912 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
1913 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1914 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1915 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
1916 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1917 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1918 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1919 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1921 ; GFX1100-GISEL-LABEL: v_log2_f32_afn_dynamic:
1922 ; GFX1100-GISEL:       ; %bb.0:
1923 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1924 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
1925 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
1926 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1927 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
1928 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
1929 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1930 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1931 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1932 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
1934 ; R600-LABEL: v_log2_f32_afn_dynamic:
1935 ; R600:       ; %bb.0:
1936 ; R600-NEXT:    CF_END
1937 ; R600-NEXT:    PAD
1939 ; CM-LABEL: v_log2_f32_afn_dynamic:
1940 ; CM:       ; %bb.0:
1941 ; CM-NEXT:    CF_END
1942 ; CM-NEXT:    PAD
1943   %result = call afn float @llvm.log2.f32(float %in)
1944   ret float %result
1947 define float @v_fabs_log2_f32_afn(float %in) {
1948 ; GFX689-SDAG-LABEL: v_fabs_log2_f32_afn:
1949 ; GFX689-SDAG:       ; %bb.0:
1950 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1951 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
1952 ; GFX689-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
1953 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1954 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
1955 ; GFX689-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v2
1956 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
1957 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
1958 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1959 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1960 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
1962 ; GFX689-GISEL-LABEL: v_fabs_log2_f32_afn:
1963 ; GFX689-GISEL:       ; %bb.0:
1964 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1965 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1966 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1967 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
1968 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1969 ; GFX689-GISEL-NEXT:    v_mul_f32_e64 v0, |v0|, v1
1970 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
1971 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
1972 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
1973 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
1974 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
1976 ; GFX1100-SDAG-LABEL: v_fabs_log2_f32_afn:
1977 ; GFX1100-SDAG:       ; %bb.0:
1978 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1979 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, |v0|
1980 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1981 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s0
1982 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, s0
1983 ; GFX1100-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v2
1984 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1985 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1986 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1987 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
1988 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
1990 ; GFX1100-GISEL-LABEL: v_fabs_log2_f32_afn:
1991 ; GFX1100-GISEL:       ; %bb.0:
1992 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1993 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, |v0|
1994 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1995 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s0
1996 ; GFX1100-GISEL-NEXT:    v_mul_f32_e64 v0, |v0|, v1
1997 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, s0
1998 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1999 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2000 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2001 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2002 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2004 ; R600-LABEL: v_fabs_log2_f32_afn:
2005 ; R600:       ; %bb.0:
2006 ; R600-NEXT:    CF_END
2007 ; R600-NEXT:    PAD
2009 ; CM-LABEL: v_fabs_log2_f32_afn:
2010 ; CM:       ; %bb.0:
2011 ; CM-NEXT:    CF_END
2012 ; CM-NEXT:    PAD
2013   %fabs = call float @llvm.fabs.f32(float %in)
2014   %result = call afn float @llvm.log2.f32(float %fabs)
2015   ret float %result
2018 define float @v_log2_f32_daz(float %in) #0 {
2019 ; GFX689-LABEL: v_log2_f32_daz:
2020 ; GFX689:       ; %bb.0:
2021 ; GFX689-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2022 ; GFX689-NEXT:    v_log_f32_e32 v0, v0
2023 ; GFX689-NEXT:    s_setpc_b64 s[30:31]
2025 ; GFX1100-LABEL: v_log2_f32_daz:
2026 ; GFX1100:       ; %bb.0:
2027 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2028 ; GFX1100-NEXT:    v_log_f32_e32 v0, v0
2029 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
2031 ; R600-LABEL: v_log2_f32_daz:
2032 ; R600:       ; %bb.0:
2033 ; R600-NEXT:    CF_END
2034 ; R600-NEXT:    PAD
2036 ; CM-LABEL: v_log2_f32_daz:
2037 ; CM:       ; %bb.0:
2038 ; CM-NEXT:    CF_END
2039 ; CM-NEXT:    PAD
2040   %result = call float @llvm.log2.f32(float %in)
2041   ret float %result
2044 define float @v_log2_f32_nnan(float %in) {
2045 ; GFX689-SDAG-LABEL: v_log2_f32_nnan:
2046 ; GFX689-SDAG:       ; %bb.0:
2047 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2048 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2049 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2050 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2051 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2052 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2053 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
2054 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
2055 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2056 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2057 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
2059 ; GFX689-GISEL-LABEL: v_log2_f32_nnan:
2060 ; GFX689-GISEL:       ; %bb.0:
2061 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2062 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2063 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2064 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2065 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2066 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2067 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
2068 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
2069 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2070 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2071 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
2073 ; GFX1100-SDAG-LABEL: v_log2_f32_nnan:
2074 ; GFX1100-SDAG:       ; %bb.0:
2075 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2076 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2077 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
2078 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2079 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2080 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2081 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2082 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2083 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2084 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2086 ; GFX1100-GISEL-LABEL: v_log2_f32_nnan:
2087 ; GFX1100-GISEL:       ; %bb.0:
2088 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2089 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2090 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
2091 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2092 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2093 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2094 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2095 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2096 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2097 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2099 ; R600-LABEL: v_log2_f32_nnan:
2100 ; R600:       ; %bb.0:
2101 ; R600-NEXT:    CF_END
2102 ; R600-NEXT:    PAD
2104 ; CM-LABEL: v_log2_f32_nnan:
2105 ; CM:       ; %bb.0:
2106 ; CM-NEXT:    CF_END
2107 ; CM-NEXT:    PAD
2108   %result = call nnan float @llvm.log2.f32(float %in)
2109   ret float %result
2112 define float @v_log2_f32_nnan_daz(float %in) #0 {
2113 ; GFX689-LABEL: v_log2_f32_nnan_daz:
2114 ; GFX689:       ; %bb.0:
2115 ; GFX689-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2116 ; GFX689-NEXT:    v_log_f32_e32 v0, v0
2117 ; GFX689-NEXT:    s_setpc_b64 s[30:31]
2119 ; GFX1100-LABEL: v_log2_f32_nnan_daz:
2120 ; GFX1100:       ; %bb.0:
2121 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2122 ; GFX1100-NEXT:    v_log_f32_e32 v0, v0
2123 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
2125 ; R600-LABEL: v_log2_f32_nnan_daz:
2126 ; R600:       ; %bb.0:
2127 ; R600-NEXT:    CF_END
2128 ; R600-NEXT:    PAD
2130 ; CM-LABEL: v_log2_f32_nnan_daz:
2131 ; CM:       ; %bb.0:
2132 ; CM-NEXT:    CF_END
2133 ; CM-NEXT:    PAD
2134   %result = call nnan float @llvm.log2.f32(float %in)
2135   ret float %result
2138 define float @v_log2_f32_nnan_dynamic(float %in) #1 {
2139 ; GFX689-SDAG-LABEL: v_log2_f32_nnan_dynamic:
2140 ; GFX689-SDAG:       ; %bb.0:
2141 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2142 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2143 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2144 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2145 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2146 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2147 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
2148 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
2149 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2150 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2151 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
2153 ; GFX689-GISEL-LABEL: v_log2_f32_nnan_dynamic:
2154 ; GFX689-GISEL:       ; %bb.0:
2155 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2156 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2157 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2158 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2159 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2160 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2161 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
2162 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
2163 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2164 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2165 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
2167 ; GFX1100-SDAG-LABEL: v_log2_f32_nnan_dynamic:
2168 ; GFX1100-SDAG:       ; %bb.0:
2169 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2170 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2171 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
2172 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2173 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2174 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2175 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2176 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2177 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2178 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2180 ; GFX1100-GISEL-LABEL: v_log2_f32_nnan_dynamic:
2181 ; GFX1100-GISEL:       ; %bb.0:
2182 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2183 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2184 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
2185 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2186 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2187 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2188 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2189 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2190 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2191 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2193 ; R600-LABEL: v_log2_f32_nnan_dynamic:
2194 ; R600:       ; %bb.0:
2195 ; R600-NEXT:    CF_END
2196 ; R600-NEXT:    PAD
2198 ; CM-LABEL: v_log2_f32_nnan_dynamic:
2199 ; CM:       ; %bb.0:
2200 ; CM-NEXT:    CF_END
2201 ; CM-NEXT:    PAD
2202   %result = call nnan float @llvm.log2.f32(float %in)
2203   ret float %result
2206 define float @v_log2_f32_ninf_daz(float %in) #0 {
2207 ; GFX689-LABEL: v_log2_f32_ninf_daz:
2208 ; GFX689:       ; %bb.0:
2209 ; GFX689-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2210 ; GFX689-NEXT:    v_log_f32_e32 v0, v0
2211 ; GFX689-NEXT:    s_setpc_b64 s[30:31]
2213 ; GFX1100-LABEL: v_log2_f32_ninf_daz:
2214 ; GFX1100:       ; %bb.0:
2215 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2216 ; GFX1100-NEXT:    v_log_f32_e32 v0, v0
2217 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
2219 ; R600-LABEL: v_log2_f32_ninf_daz:
2220 ; R600:       ; %bb.0:
2221 ; R600-NEXT:    CF_END
2222 ; R600-NEXT:    PAD
2224 ; CM-LABEL: v_log2_f32_ninf_daz:
2225 ; CM:       ; %bb.0:
2226 ; CM-NEXT:    CF_END
2227 ; CM-NEXT:    PAD
2228   %result = call ninf float @llvm.log2.f32(float %in)
2229   ret float %result
2232 define float @v_log2_f32_ninf_dynamic(float %in) #1 {
2233 ; GFX689-SDAG-LABEL: v_log2_f32_ninf_dynamic:
2234 ; GFX689-SDAG:       ; %bb.0:
2235 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2236 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2237 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2238 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2239 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2240 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2241 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
2242 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
2243 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2244 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2245 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
2247 ; GFX689-GISEL-LABEL: v_log2_f32_ninf_dynamic:
2248 ; GFX689-GISEL:       ; %bb.0:
2249 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2250 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2251 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2252 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2253 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2254 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2255 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
2256 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
2257 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2258 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2259 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
2261 ; GFX1100-SDAG-LABEL: v_log2_f32_ninf_dynamic:
2262 ; GFX1100-SDAG:       ; %bb.0:
2263 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2264 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2265 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
2266 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2267 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2268 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2269 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2270 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2271 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2272 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2274 ; GFX1100-GISEL-LABEL: v_log2_f32_ninf_dynamic:
2275 ; GFX1100-GISEL:       ; %bb.0:
2276 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2277 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2278 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
2279 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2280 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2281 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2282 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2283 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2284 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2285 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2287 ; R600-LABEL: v_log2_f32_ninf_dynamic:
2288 ; R600:       ; %bb.0:
2289 ; R600-NEXT:    CF_END
2290 ; R600-NEXT:    PAD
2292 ; CM-LABEL: v_log2_f32_ninf_dynamic:
2293 ; CM:       ; %bb.0:
2294 ; CM-NEXT:    CF_END
2295 ; CM-NEXT:    PAD
2296   %result = call ninf float @llvm.log2.f32(float %in)
2297   ret float %result
2300 define float @v_log2_f32_nnan_ninf(float %in) {
2301 ; GFX689-SDAG-LABEL: v_log2_f32_nnan_ninf:
2302 ; GFX689-SDAG:       ; %bb.0:
2303 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2304 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2305 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2306 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2307 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2308 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2309 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
2310 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
2311 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2312 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2313 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
2315 ; GFX689-GISEL-LABEL: v_log2_f32_nnan_ninf:
2316 ; GFX689-GISEL:       ; %bb.0:
2317 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2318 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2319 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2320 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2321 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2322 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2323 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
2324 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
2325 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2326 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2327 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
2329 ; GFX1100-SDAG-LABEL: v_log2_f32_nnan_ninf:
2330 ; GFX1100-SDAG:       ; %bb.0:
2331 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2332 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2333 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
2334 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2335 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2336 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2337 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2338 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2339 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2340 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2342 ; GFX1100-GISEL-LABEL: v_log2_f32_nnan_ninf:
2343 ; GFX1100-GISEL:       ; %bb.0:
2344 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2345 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2346 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
2347 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2348 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2349 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2350 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2351 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2352 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2353 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2355 ; R600-LABEL: v_log2_f32_nnan_ninf:
2356 ; R600:       ; %bb.0:
2357 ; R600-NEXT:    CF_END
2358 ; R600-NEXT:    PAD
2360 ; CM-LABEL: v_log2_f32_nnan_ninf:
2361 ; CM:       ; %bb.0:
2362 ; CM-NEXT:    CF_END
2363 ; CM-NEXT:    PAD
2364   %result = call nnan ninf float @llvm.log2.f32(float %in)
2365   ret float %result
2368 define float @v_log2_f32_nnan_ninf_daz(float %in) #0 {
2369 ; GFX689-LABEL: v_log2_f32_nnan_ninf_daz:
2370 ; GFX689:       ; %bb.0:
2371 ; GFX689-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2372 ; GFX689-NEXT:    v_log_f32_e32 v0, v0
2373 ; GFX689-NEXT:    s_setpc_b64 s[30:31]
2375 ; GFX1100-LABEL: v_log2_f32_nnan_ninf_daz:
2376 ; GFX1100:       ; %bb.0:
2377 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2378 ; GFX1100-NEXT:    v_log_f32_e32 v0, v0
2379 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
2381 ; R600-LABEL: v_log2_f32_nnan_ninf_daz:
2382 ; R600:       ; %bb.0:
2383 ; R600-NEXT:    CF_END
2384 ; R600-NEXT:    PAD
2386 ; CM-LABEL: v_log2_f32_nnan_ninf_daz:
2387 ; CM:       ; %bb.0:
2388 ; CM-NEXT:    CF_END
2389 ; CM-NEXT:    PAD
2390   %result = call nnan ninf float @llvm.log2.f32(float %in)
2391   ret float %result
2394 define float @v_log2_f32_nnan_ninf_dynamic(float %in) #1 {
2395 ; GFX689-SDAG-LABEL: v_log2_f32_nnan_ninf_dynamic:
2396 ; GFX689-SDAG:       ; %bb.0:
2397 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2398 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2399 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2400 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2401 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2402 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2403 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
2404 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
2405 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2406 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2407 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
2409 ; GFX689-GISEL-LABEL: v_log2_f32_nnan_ninf_dynamic:
2410 ; GFX689-GISEL:       ; %bb.0:
2411 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2412 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2413 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2414 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2415 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2416 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2417 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
2418 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
2419 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2420 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2421 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
2423 ; GFX1100-SDAG-LABEL: v_log2_f32_nnan_ninf_dynamic:
2424 ; GFX1100-SDAG:       ; %bb.0:
2425 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2426 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2427 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
2428 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2429 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2430 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2431 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2432 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2433 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2434 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2436 ; GFX1100-GISEL-LABEL: v_log2_f32_nnan_ninf_dynamic:
2437 ; GFX1100-GISEL:       ; %bb.0:
2438 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2439 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2440 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
2441 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2442 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2443 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2444 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2445 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2446 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2447 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2449 ; R600-LABEL: v_log2_f32_nnan_ninf_dynamic:
2450 ; R600:       ; %bb.0:
2451 ; R600-NEXT:    CF_END
2452 ; R600-NEXT:    PAD
2454 ; CM-LABEL: v_log2_f32_nnan_ninf_dynamic:
2455 ; CM:       ; %bb.0:
2456 ; CM-NEXT:    CF_END
2457 ; CM-NEXT:    PAD
2458   %result = call nnan ninf float @llvm.log2.f32(float %in)
2459   ret float %result
2462 define float @v_log2_f32_fast_daz(float %in) #0 {
2463 ; GFX689-LABEL: v_log2_f32_fast_daz:
2464 ; GFX689:       ; %bb.0:
2465 ; GFX689-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2466 ; GFX689-NEXT:    v_log_f32_e32 v0, v0
2467 ; GFX689-NEXT:    s_setpc_b64 s[30:31]
2469 ; GFX1100-LABEL: v_log2_f32_fast_daz:
2470 ; GFX1100:       ; %bb.0:
2471 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2472 ; GFX1100-NEXT:    v_log_f32_e32 v0, v0
2473 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
2475 ; R600-LABEL: v_log2_f32_fast_daz:
2476 ; R600:       ; %bb.0:
2477 ; R600-NEXT:    CF_END
2478 ; R600-NEXT:    PAD
2480 ; CM-LABEL: v_log2_f32_fast_daz:
2481 ; CM:       ; %bb.0:
2482 ; CM-NEXT:    CF_END
2483 ; CM-NEXT:    PAD
2484   %result = call fast float @llvm.log2.f32(float %in)
2485   ret float %result
2488 define float @v_log2_f32_dynamic_mode(float %in) #1 {
2489 ; GFX689-SDAG-LABEL: v_log2_f32_dynamic_mode:
2490 ; GFX689-SDAG:       ; %bb.0:
2491 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2492 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2493 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2494 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2495 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2496 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2497 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
2498 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
2499 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2500 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2501 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
2503 ; GFX689-GISEL-LABEL: v_log2_f32_dynamic_mode:
2504 ; GFX689-GISEL:       ; %bb.0:
2505 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2506 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2507 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2508 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2509 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2510 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2511 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
2512 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
2513 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2514 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2515 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
2517 ; GFX1100-SDAG-LABEL: v_log2_f32_dynamic_mode:
2518 ; GFX1100-SDAG:       ; %bb.0:
2519 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2520 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2521 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
2522 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2523 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2524 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2525 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2526 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2527 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2528 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2530 ; GFX1100-GISEL-LABEL: v_log2_f32_dynamic_mode:
2531 ; GFX1100-GISEL:       ; %bb.0:
2532 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2533 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2534 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
2535 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2536 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2537 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2538 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2539 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2540 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2541 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2543 ; R600-LABEL: v_log2_f32_dynamic_mode:
2544 ; R600:       ; %bb.0:
2545 ; R600-NEXT:    CF_END
2546 ; R600-NEXT:    PAD
2548 ; CM-LABEL: v_log2_f32_dynamic_mode:
2549 ; CM:       ; %bb.0:
2550 ; CM-NEXT:    CF_END
2551 ; CM-NEXT:    PAD
2552   %result = call float @llvm.log2.f32(float %in)
2553   ret float %result
2556 define float @v_log2_f32_undef() {
2557 ; GFX689-SDAG-LABEL: v_log2_f32_undef:
2558 ; GFX689-SDAG:       ; %bb.0:
2559 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2560 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, s4
2561 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
2563 ; GFX689-GISEL-LABEL: v_log2_f32_undef:
2564 ; GFX689-GISEL:       ; %bb.0:
2565 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2566 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
2567 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2568 ; GFX689-GISEL-NEXT:    v_mul_f32_e32 v1, s4, v1
2569 ; GFX689-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
2570 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
2571 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
2572 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v1, 0x42000000
2573 ; GFX689-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2574 ; GFX689-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2575 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
2577 ; GFX1100-SDAG-LABEL: v_log2_f32_undef:
2578 ; GFX1100-SDAG:       ; %bb.0:
2579 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2580 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, s0
2581 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2583 ; GFX1100-GISEL-LABEL: v_log2_f32_undef:
2584 ; GFX1100-GISEL:       ; %bb.0:
2585 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2586 ; GFX1100-GISEL-NEXT:    v_mul_f32_e64 v0, 0x4f800000, s0
2587 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x800000, s0
2588 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2589 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, s0, v0, vcc_lo
2590 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2591 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
2592 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2593 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2594 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2595 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2597 ; R600-LABEL: v_log2_f32_undef:
2598 ; R600:       ; %bb.0:
2599 ; R600-NEXT:    CF_END
2600 ; R600-NEXT:    PAD
2602 ; CM-LABEL: v_log2_f32_undef:
2603 ; CM:       ; %bb.0:
2604 ; CM-NEXT:    CF_END
2605 ; CM-NEXT:    PAD
2606   %result = call float @llvm.log2.f32(float undef)
2607   ret float %result
2610 define float @v_log2_f32_0() {
2611 ; GFX689-SDAG-LABEL: v_log2_f32_0:
2612 ; GFX689-SDAG:       ; %bb.0:
2613 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2614 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, 0
2615 ; GFX689-SDAG-NEXT:    v_add_f32_e32 v0, 0xc2000000, v0
2616 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
2618 ; GFX689-GISEL-LABEL: v_log2_f32_0:
2619 ; GFX689-GISEL:       ; %bb.0:
2620 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2621 ; GFX689-GISEL-NEXT:    v_mov_b32_e32 v0, 0xff800000
2622 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
2624 ; GFX1100-SDAG-LABEL: v_log2_f32_0:
2625 ; GFX1100-SDAG:       ; %bb.0:
2626 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2627 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, 0
2628 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2629 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v0, 0xc2000000, v0
2630 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2632 ; GFX1100-GISEL-LABEL: v_log2_f32_0:
2633 ; GFX1100-GISEL:       ; %bb.0:
2634 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2635 ; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, 0xff800000
2636 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2638 ; R600-LABEL: v_log2_f32_0:
2639 ; R600:       ; %bb.0:
2640 ; R600-NEXT:    CF_END
2641 ; R600-NEXT:    PAD
2643 ; CM-LABEL: v_log2_f32_0:
2644 ; CM:       ; %bb.0:
2645 ; CM-NEXT:    CF_END
2646 ; CM-NEXT:    PAD
2647   %result = call float @llvm.log2.f32(float 0.0)
2648   ret float %result
2651 define float @v_log2_f32_from_fpext_f16(i16 %src.i) {
2652 ; GFX689-LABEL: v_log2_f32_from_fpext_f16:
2653 ; GFX689:       ; %bb.0:
2654 ; GFX689-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2655 ; GFX689-NEXT:    v_cvt_f32_f16_e32 v0, v0
2656 ; GFX689-NEXT:    v_log_f32_e32 v0, v0
2657 ; GFX689-NEXT:    s_setpc_b64 s[30:31]
2659 ; GFX1100-LABEL: v_log2_f32_from_fpext_f16:
2660 ; GFX1100:       ; %bb.0:
2661 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2662 ; GFX1100-NEXT:    v_cvt_f32_f16_e32 v0, v0
2663 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2664 ; GFX1100-NEXT:    v_log_f32_e32 v0, v0
2665 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
2667 ; R600-LABEL: v_log2_f32_from_fpext_f16:
2668 ; R600:       ; %bb.0:
2669 ; R600-NEXT:    CF_END
2670 ; R600-NEXT:    PAD
2672 ; CM-LABEL: v_log2_f32_from_fpext_f16:
2673 ; CM:       ; %bb.0:
2674 ; CM-NEXT:    CF_END
2675 ; CM-NEXT:    PAD
2676   %src = bitcast i16 %src.i to half
2677   %fpext = fpext half %src to float
2678   %result = call float @llvm.log2.f32(float %fpext)
2679   ret float %result
2682 define float @v_log2_f32_from_fpext_math_f16(i16 %src0.i, i16 %src1.i) {
2683 ; SI-SDAG-LABEL: v_log2_f32_from_fpext_math_f16:
2684 ; SI-SDAG:       ; %bb.0:
2685 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2686 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
2687 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
2688 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2689 ; SI-SDAG-NEXT:    v_add_f32_e32 v0, v0, v1
2690 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2691 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2692 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2693 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
2694 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2695 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
2696 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2697 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2698 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2700 ; SI-GISEL-LABEL: v_log2_f32_from_fpext_math_f16:
2701 ; SI-GISEL:       ; %bb.0:
2702 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2703 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
2704 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
2705 ; SI-GISEL-NEXT:    v_add_f32_e32 v0, v0, v1
2706 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
2707 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
2708 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2709 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2711 ; VI-LABEL: v_log2_f32_from_fpext_math_f16:
2712 ; VI:       ; %bb.0:
2713 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2714 ; VI-NEXT:    v_add_f16_e32 v0, v0, v1
2715 ; VI-NEXT:    v_cvt_f32_f16_e32 v0, v0
2716 ; VI-NEXT:    v_log_f32_e32 v0, v0
2717 ; VI-NEXT:    s_setpc_b64 s[30:31]
2719 ; GFX900-LABEL: v_log2_f32_from_fpext_math_f16:
2720 ; GFX900:       ; %bb.0:
2721 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2722 ; GFX900-NEXT:    v_add_f16_e32 v0, v0, v1
2723 ; GFX900-NEXT:    v_cvt_f32_f16_e32 v0, v0
2724 ; GFX900-NEXT:    v_log_f32_e32 v0, v0
2725 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2727 ; GFX1100-LABEL: v_log2_f32_from_fpext_math_f16:
2728 ; GFX1100:       ; %bb.0:
2729 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2730 ; GFX1100-NEXT:    v_add_f16_e32 v0, v0, v1
2731 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2732 ; GFX1100-NEXT:    v_cvt_f32_f16_e32 v0, v0
2733 ; GFX1100-NEXT:    v_log_f32_e32 v0, v0
2734 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
2736 ; R600-LABEL: v_log2_f32_from_fpext_math_f16:
2737 ; R600:       ; %bb.0:
2738 ; R600-NEXT:    CF_END
2739 ; R600-NEXT:    PAD
2741 ; CM-LABEL: v_log2_f32_from_fpext_math_f16:
2742 ; CM:       ; %bb.0:
2743 ; CM-NEXT:    CF_END
2744 ; CM-NEXT:    PAD
2745   %src0 = bitcast i16 %src0.i to half
2746   %src1 = bitcast i16 %src1.i to half
2747   %fadd = fadd half %src0, %src1
2748   %fpext = fpext half %fadd to float
2749   %result = call float @llvm.log2.f32(float %fpext)
2750   ret float %result
2753 define float @v_log2_f32_from_fpext_bf16(bfloat %src) {
2754 ; GFX689-SDAG-LABEL: v_log2_f32_from_fpext_bf16:
2755 ; GFX689-SDAG:       ; %bb.0:
2756 ; GFX689-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2757 ; GFX689-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2758 ; GFX689-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2759 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2760 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2761 ; GFX689-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2762 ; GFX689-SDAG-NEXT:    v_log_f32_e32 v0, v0
2763 ; GFX689-SDAG-NEXT:    v_mov_b32_e32 v1, 0x42000000
2764 ; GFX689-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2765 ; GFX689-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2766 ; GFX689-SDAG-NEXT:    s_setpc_b64 s[30:31]
2768 ; GFX689-GISEL-LABEL: v_log2_f32_from_fpext_bf16:
2769 ; GFX689-GISEL:       ; %bb.0:
2770 ; GFX689-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2771 ; GFX689-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
2772 ; GFX689-GISEL-NEXT:    v_log_f32_e32 v0, v0
2773 ; GFX689-GISEL-NEXT:    s_setpc_b64 s[30:31]
2775 ; GFX1100-SDAG-LABEL: v_log2_f32_from_fpext_bf16:
2776 ; GFX1100-SDAG:       ; %bb.0:
2777 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2778 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2779 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
2780 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
2781 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2782 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2783 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2784 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2785 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2786 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2788 ; GFX1100-GISEL-LABEL: v_log2_f32_from_fpext_bf16:
2789 ; GFX1100-GISEL:       ; %bb.0:
2790 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2791 ; GFX1100-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
2792 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2793 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2794 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2796 ; R600-LABEL: v_log2_f32_from_fpext_bf16:
2797 ; R600:       ; %bb.0:
2798 ; R600-NEXT:    CF_END
2799 ; R600-NEXT:    PAD
2801 ; CM-LABEL: v_log2_f32_from_fpext_bf16:
2802 ; CM:       ; %bb.0:
2803 ; CM-NEXT:    CF_END
2804 ; CM-NEXT:    PAD
2805   %fpext = fpext bfloat %src to float
2806   %result = call float @llvm.log2.f32(float %fpext)
2807   ret float %result
2810 define half @v_log2_f16(half %in) {
2811 ; SI-SDAG-LABEL: v_log2_f16:
2812 ; SI-SDAG:       ; %bb.0:
2813 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2814 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
2815 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
2816 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2817 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
2818 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
2819 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2821 ; SI-GISEL-LABEL: v_log2_f16:
2822 ; SI-GISEL:       ; %bb.0:
2823 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2824 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
2825 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2826 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
2827 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2829 ; VI-LABEL: v_log2_f16:
2830 ; VI:       ; %bb.0:
2831 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2832 ; VI-NEXT:    v_log_f16_e32 v0, v0
2833 ; VI-NEXT:    s_setpc_b64 s[30:31]
2835 ; GFX900-LABEL: v_log2_f16:
2836 ; GFX900:       ; %bb.0:
2837 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2838 ; GFX900-NEXT:    v_log_f16_e32 v0, v0
2839 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2841 ; GFX1100-LABEL: v_log2_f16:
2842 ; GFX1100:       ; %bb.0:
2843 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2844 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
2845 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
2847 ; R600-LABEL: v_log2_f16:
2848 ; R600:       ; %bb.0:
2849 ; R600-NEXT:    CF_END
2850 ; R600-NEXT:    PAD
2852 ; CM-LABEL: v_log2_f16:
2853 ; CM:       ; %bb.0:
2854 ; CM-NEXT:    CF_END
2855 ; CM-NEXT:    PAD
2856   %result = call half @llvm.log2.f16(half %in)
2857   ret half %result
2860 define half @v_log2_fabs_f16(half %in) {
2861 ; SI-SDAG-LABEL: v_log2_fabs_f16:
2862 ; SI-SDAG:       ; %bb.0:
2863 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2864 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
2865 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e64 v0, |v0|
2866 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2867 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
2868 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
2869 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2871 ; SI-GISEL-LABEL: v_log2_fabs_f16:
2872 ; SI-GISEL:       ; %bb.0:
2873 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2874 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e64 v0, |v0|
2875 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2876 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
2877 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2879 ; VI-LABEL: v_log2_fabs_f16:
2880 ; VI:       ; %bb.0:
2881 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2882 ; VI-NEXT:    v_log_f16_e64 v0, |v0|
2883 ; VI-NEXT:    s_setpc_b64 s[30:31]
2885 ; GFX900-LABEL: v_log2_fabs_f16:
2886 ; GFX900:       ; %bb.0:
2887 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2888 ; GFX900-NEXT:    v_log_f16_e64 v0, |v0|
2889 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2891 ; GFX1100-LABEL: v_log2_fabs_f16:
2892 ; GFX1100:       ; %bb.0:
2893 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2894 ; GFX1100-NEXT:    v_log_f16_e64 v0, |v0|
2895 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
2897 ; R600-LABEL: v_log2_fabs_f16:
2898 ; R600:       ; %bb.0:
2899 ; R600-NEXT:    CF_END
2900 ; R600-NEXT:    PAD
2902 ; CM-LABEL: v_log2_fabs_f16:
2903 ; CM:       ; %bb.0:
2904 ; CM-NEXT:    CF_END
2905 ; CM-NEXT:    PAD
2906   %fabs = call half @llvm.fabs.f16(half %in)
2907   %result = call half @llvm.log2.f16(half %fabs)
2908   ret half %result
2911 define half @v_log2_fneg_fabs_f16(half %in) {
2912 ; SI-SDAG-LABEL: v_log2_fneg_fabs_f16:
2913 ; SI-SDAG:       ; %bb.0:
2914 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2915 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
2916 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e64 v0, -|v0|
2917 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2918 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
2919 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
2920 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2922 ; SI-GISEL-LABEL: v_log2_fneg_fabs_f16:
2923 ; SI-GISEL:       ; %bb.0:
2924 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2925 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e64 v0, -|v0|
2926 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2927 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
2928 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2930 ; VI-LABEL: v_log2_fneg_fabs_f16:
2931 ; VI:       ; %bb.0:
2932 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2933 ; VI-NEXT:    v_log_f16_e64 v0, -|v0|
2934 ; VI-NEXT:    s_setpc_b64 s[30:31]
2936 ; GFX900-LABEL: v_log2_fneg_fabs_f16:
2937 ; GFX900:       ; %bb.0:
2938 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2939 ; GFX900-NEXT:    v_log_f16_e64 v0, -|v0|
2940 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2942 ; GFX1100-LABEL: v_log2_fneg_fabs_f16:
2943 ; GFX1100:       ; %bb.0:
2944 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2945 ; GFX1100-NEXT:    v_log_f16_e64 v0, -|v0|
2946 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
2948 ; R600-LABEL: v_log2_fneg_fabs_f16:
2949 ; R600:       ; %bb.0:
2950 ; R600-NEXT:    CF_END
2951 ; R600-NEXT:    PAD
2953 ; CM-LABEL: v_log2_fneg_fabs_f16:
2954 ; CM:       ; %bb.0:
2955 ; CM-NEXT:    CF_END
2956 ; CM-NEXT:    PAD
2957   %fabs = call half @llvm.fabs.f16(half %in)
2958   %fneg.fabs = fneg half %fabs
2959   %result = call half @llvm.log2.f16(half %fneg.fabs)
2960   ret half %result
2963 define half @v_log2_fneg_f16(half %in) {
2964 ; SI-SDAG-LABEL: v_log2_fneg_f16:
2965 ; SI-SDAG:       ; %bb.0:
2966 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2967 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e64 v0, -v0
2968 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
2969 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2970 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
2971 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
2972 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2974 ; SI-GISEL-LABEL: v_log2_fneg_f16:
2975 ; SI-GISEL:       ; %bb.0:
2976 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2977 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e64 v0, -v0
2978 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2979 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
2980 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2982 ; VI-LABEL: v_log2_fneg_f16:
2983 ; VI:       ; %bb.0:
2984 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2985 ; VI-NEXT:    v_log_f16_e64 v0, -v0
2986 ; VI-NEXT:    s_setpc_b64 s[30:31]
2988 ; GFX900-LABEL: v_log2_fneg_f16:
2989 ; GFX900:       ; %bb.0:
2990 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2991 ; GFX900-NEXT:    v_log_f16_e64 v0, -v0
2992 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2994 ; GFX1100-LABEL: v_log2_fneg_f16:
2995 ; GFX1100:       ; %bb.0:
2996 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2997 ; GFX1100-NEXT:    v_log_f16_e64 v0, -v0
2998 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
3000 ; R600-LABEL: v_log2_fneg_f16:
3001 ; R600:       ; %bb.0:
3002 ; R600-NEXT:    CF_END
3003 ; R600-NEXT:    PAD
3005 ; CM-LABEL: v_log2_fneg_f16:
3006 ; CM:       ; %bb.0:
3007 ; CM-NEXT:    CF_END
3008 ; CM-NEXT:    PAD
3009   %fneg = fneg half %in
3010   %result = call half @llvm.log2.f16(half %fneg)
3011   ret half %result
3014 define half @v_log2_f16_fast(half %in) {
3015 ; SI-SDAG-LABEL: v_log2_f16_fast:
3016 ; SI-SDAG:       ; %bb.0:
3017 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3018 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3019 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3020 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3021 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3022 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3023 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3025 ; SI-GISEL-LABEL: v_log2_f16_fast:
3026 ; SI-GISEL:       ; %bb.0:
3027 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3028 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
3029 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3030 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
3031 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3033 ; VI-LABEL: v_log2_f16_fast:
3034 ; VI:       ; %bb.0:
3035 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3036 ; VI-NEXT:    v_log_f16_e32 v0, v0
3037 ; VI-NEXT:    s_setpc_b64 s[30:31]
3039 ; GFX900-LABEL: v_log2_f16_fast:
3040 ; GFX900:       ; %bb.0:
3041 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3042 ; GFX900-NEXT:    v_log_f16_e32 v0, v0
3043 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3045 ; GFX1100-LABEL: v_log2_f16_fast:
3046 ; GFX1100:       ; %bb.0:
3047 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3048 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
3049 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
3051 ; R600-LABEL: v_log2_f16_fast:
3052 ; R600:       ; %bb.0:
3053 ; R600-NEXT:    CF_END
3054 ; R600-NEXT:    PAD
3056 ; CM-LABEL: v_log2_f16_fast:
3057 ; CM:       ; %bb.0:
3058 ; CM-NEXT:    CF_END
3059 ; CM-NEXT:    PAD
3060   %result = call fast half @llvm.log2.f16(half %in)
3061   ret half %result
3064 define <2 x half> @v_log2_v2f16(<2 x half> %in) {
3065 ; SI-SDAG-LABEL: v_log2_v2f16:
3066 ; SI-SDAG:       ; %bb.0:
3067 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3068 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3069 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3070 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3071 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3072 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3073 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
3074 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3075 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3076 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3077 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3078 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3080 ; SI-GISEL-LABEL: v_log2_v2f16:
3081 ; SI-GISEL:       ; %bb.0:
3082 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3083 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
3084 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
3085 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3086 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
3087 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
3088 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
3089 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3091 ; VI-SDAG-LABEL: v_log2_v2f16:
3092 ; VI-SDAG:       ; %bb.0:
3093 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3094 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3095 ; VI-SDAG-NEXT:    v_log_f16_e32 v0, v0
3096 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3097 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3099 ; VI-GISEL-LABEL: v_log2_v2f16:
3100 ; VI-GISEL:       ; %bb.0:
3101 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3102 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v0
3103 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3104 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
3105 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3107 ; GFX900-SDAG-LABEL: v_log2_v2f16:
3108 ; GFX900-SDAG:       ; %bb.0:
3109 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3110 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3111 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v0, v0
3112 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
3113 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3115 ; GFX900-GISEL-LABEL: v_log2_v2f16:
3116 ; GFX900-GISEL:       ; %bb.0:
3117 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3118 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v1, v0
3119 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3120 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v1, v0
3121 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3123 ; GFX1100-LABEL: v_log2_v2f16:
3124 ; GFX1100:       ; %bb.0:
3125 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3126 ; GFX1100-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3127 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
3128 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3129 ; GFX1100-NEXT:    v_log_f16_e32 v1, v1
3130 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
3131 ; GFX1100-NEXT:    v_pack_b32_f16 v0, v0, v1
3132 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
3134 ; R600-LABEL: v_log2_v2f16:
3135 ; R600:       ; %bb.0:
3136 ; R600-NEXT:    CF_END
3137 ; R600-NEXT:    PAD
3139 ; CM-LABEL: v_log2_v2f16:
3140 ; CM:       ; %bb.0:
3141 ; CM-NEXT:    CF_END
3142 ; CM-NEXT:    PAD
3143   %result = call <2 x half> @llvm.log2.v2f16(<2 x half> %in)
3144   ret <2 x half> %result
3147 define <2 x half> @v_log2_fabs_v2f16(<2 x half> %in) {
3148 ; SI-SDAG-LABEL: v_log2_fabs_v2f16:
3149 ; SI-SDAG:       ; %bb.0:
3150 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3151 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3152 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3153 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e64 v0, |v0|
3154 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e64 v1, |v1|
3155 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3156 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
3157 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3158 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3159 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3160 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3161 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3163 ; SI-GISEL-LABEL: v_log2_fabs_v2f16:
3164 ; SI-GISEL:       ; %bb.0:
3165 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3166 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
3167 ; SI-GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
3168 ; SI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
3169 ; SI-GISEL-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v0
3170 ; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3171 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
3172 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
3173 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3174 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
3175 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
3176 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
3177 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3179 ; VI-SDAG-LABEL: v_log2_fabs_v2f16:
3180 ; VI-SDAG:       ; %bb.0:
3181 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3182 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, |v0| dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3183 ; VI-SDAG-NEXT:    v_log_f16_e64 v0, |v0|
3184 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3185 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3187 ; VI-GISEL-LABEL: v_log2_fabs_v2f16:
3188 ; VI-GISEL:       ; %bb.0:
3189 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3190 ; VI-GISEL-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v0
3191 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v0
3192 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3193 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
3194 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3196 ; GFX900-SDAG-LABEL: v_log2_fabs_v2f16:
3197 ; GFX900-SDAG:       ; %bb.0:
3198 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3199 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v1, |v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3200 ; GFX900-SDAG-NEXT:    v_log_f16_e64 v0, |v0|
3201 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
3202 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3204 ; GFX900-GISEL-LABEL: v_log2_fabs_v2f16:
3205 ; GFX900-GISEL:       ; %bb.0:
3206 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3207 ; GFX900-GISEL-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v0
3208 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v1, v0
3209 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3210 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v1, v0
3211 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3213 ; GFX1100-SDAG-LABEL: v_log2_fabs_v2f16:
3214 ; GFX1100-SDAG:       ; %bb.0:
3215 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3216 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3217 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v0, |v0|
3218 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3219 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v1, |v1|
3220 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3221 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
3222 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3224 ; GFX1100-GISEL-LABEL: v_log2_fabs_v2f16:
3225 ; GFX1100-GISEL:       ; %bb.0:
3226 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3227 ; GFX1100-GISEL-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v0
3228 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
3229 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3230 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v0, v0
3231 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v1, v1
3232 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3233 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v0, v0, v1
3234 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3236 ; R600-LABEL: v_log2_fabs_v2f16:
3237 ; R600:       ; %bb.0:
3238 ; R600-NEXT:    CF_END
3239 ; R600-NEXT:    PAD
3241 ; CM-LABEL: v_log2_fabs_v2f16:
3242 ; CM:       ; %bb.0:
3243 ; CM-NEXT:    CF_END
3244 ; CM-NEXT:    PAD
3245   %fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %in)
3246   %result = call <2 x half> @llvm.log2.v2f16(<2 x half> %fabs)
3247   ret <2 x half> %result
3250 define <2 x half> @v_log2_fneg_fabs_v2f16(<2 x half> %in) {
3251 ; SI-SDAG-LABEL: v_log2_fneg_fabs_v2f16:
3252 ; SI-SDAG:       ; %bb.0:
3253 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3254 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3255 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3256 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
3257 ; SI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3258 ; SI-SDAG-NEXT:    v_or_b32_e32 v0, 0x80008000, v0
3259 ; SI-SDAG-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3260 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3261 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3262 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3263 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
3264 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3265 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3266 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3267 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3268 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3270 ; SI-GISEL-LABEL: v_log2_fneg_fabs_v2f16:
3271 ; SI-GISEL:       ; %bb.0:
3272 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3273 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
3274 ; SI-GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
3275 ; SI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
3276 ; SI-GISEL-NEXT:    v_or_b32_e32 v0, 0x80008000, v0
3277 ; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3278 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
3279 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
3280 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3281 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
3282 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
3283 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
3284 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3286 ; VI-SDAG-LABEL: v_log2_fneg_fabs_v2f16:
3287 ; VI-SDAG:       ; %bb.0:
3288 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3289 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, -|v0| dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3290 ; VI-SDAG-NEXT:    v_log_f16_e64 v0, -|v0|
3291 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3292 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3294 ; VI-GISEL-LABEL: v_log2_fneg_fabs_v2f16:
3295 ; VI-GISEL:       ; %bb.0:
3296 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3297 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, 0x80008000, v0
3298 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v0
3299 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3300 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
3301 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3303 ; GFX900-SDAG-LABEL: v_log2_fneg_fabs_v2f16:
3304 ; GFX900-SDAG:       ; %bb.0:
3305 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3306 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v1, -|v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3307 ; GFX900-SDAG-NEXT:    v_log_f16_e64 v0, -|v0|
3308 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
3309 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3311 ; GFX900-GISEL-LABEL: v_log2_fneg_fabs_v2f16:
3312 ; GFX900-GISEL:       ; %bb.0:
3313 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3314 ; GFX900-GISEL-NEXT:    v_or_b32_e32 v0, 0x80008000, v0
3315 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v1, v0
3316 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3317 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v1, v0
3318 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3320 ; GFX1100-SDAG-LABEL: v_log2_fneg_fabs_v2f16:
3321 ; GFX1100-SDAG:       ; %bb.0:
3322 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3323 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3324 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v0, -|v0|
3325 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3326 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v1, -|v1|
3327 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3328 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
3329 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3331 ; GFX1100-GISEL-LABEL: v_log2_fneg_fabs_v2f16:
3332 ; GFX1100-GISEL:       ; %bb.0:
3333 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3334 ; GFX1100-GISEL-NEXT:    v_or_b32_e32 v0, 0x80008000, v0
3335 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
3336 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3337 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v0, v0
3338 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v1, v1
3339 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3340 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v0, v0, v1
3341 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3343 ; R600-LABEL: v_log2_fneg_fabs_v2f16:
3344 ; R600:       ; %bb.0:
3345 ; R600-NEXT:    CF_END
3346 ; R600-NEXT:    PAD
3348 ; CM-LABEL: v_log2_fneg_fabs_v2f16:
3349 ; CM:       ; %bb.0:
3350 ; CM-NEXT:    CF_END
3351 ; CM-NEXT:    PAD
3352   %fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %in)
3353   %fneg.fabs = fneg <2 x half> %fabs
3354   %result = call <2 x half> @llvm.log2.v2f16(<2 x half> %fneg.fabs)
3355   ret <2 x half> %result
3358 define <2 x half> @v_log2_fneg_v2f16(<2 x half> %in) {
3359 ; SI-SDAG-LABEL: v_log2_fneg_v2f16:
3360 ; SI-SDAG:       ; %bb.0:
3361 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3362 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3363 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3364 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
3365 ; SI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3366 ; SI-SDAG-NEXT:    v_xor_b32_e32 v0, 0x80008000, v0
3367 ; SI-SDAG-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3368 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3369 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3370 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3371 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
3372 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3373 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3374 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3375 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3376 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3378 ; SI-GISEL-LABEL: v_log2_fneg_v2f16:
3379 ; SI-GISEL:       ; %bb.0:
3380 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3381 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
3382 ; SI-GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
3383 ; SI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
3384 ; SI-GISEL-NEXT:    v_xor_b32_e32 v0, 0x80008000, v0
3385 ; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3386 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
3387 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
3388 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3389 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
3390 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
3391 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
3392 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3394 ; VI-SDAG-LABEL: v_log2_fneg_v2f16:
3395 ; VI-SDAG:       ; %bb.0:
3396 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3397 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, -v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3398 ; VI-SDAG-NEXT:    v_log_f16_e64 v0, -v0
3399 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3400 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3402 ; VI-GISEL-LABEL: v_log2_fneg_v2f16:
3403 ; VI-GISEL:       ; %bb.0:
3404 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3405 ; VI-GISEL-NEXT:    v_xor_b32_e32 v0, 0x80008000, v0
3406 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v0
3407 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3408 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
3409 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3411 ; GFX900-SDAG-LABEL: v_log2_fneg_v2f16:
3412 ; GFX900-SDAG:       ; %bb.0:
3413 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3414 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v1, -v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3415 ; GFX900-SDAG-NEXT:    v_log_f16_e64 v0, -v0
3416 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
3417 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3419 ; GFX900-GISEL-LABEL: v_log2_fneg_v2f16:
3420 ; GFX900-GISEL:       ; %bb.0:
3421 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3422 ; GFX900-GISEL-NEXT:    v_xor_b32_e32 v0, 0x80008000, v0
3423 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v1, v0
3424 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3425 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v1, v0
3426 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3428 ; GFX1100-SDAG-LABEL: v_log2_fneg_v2f16:
3429 ; GFX1100-SDAG:       ; %bb.0:
3430 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3431 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3432 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v0, -v0
3433 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3434 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v1, -v1
3435 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3436 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
3437 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3439 ; GFX1100-GISEL-LABEL: v_log2_fneg_v2f16:
3440 ; GFX1100-GISEL:       ; %bb.0:
3441 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3442 ; GFX1100-GISEL-NEXT:    v_xor_b32_e32 v0, 0x80008000, v0
3443 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
3444 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3445 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v0, v0
3446 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v1, v1
3447 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3448 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v0, v0, v1
3449 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3451 ; R600-LABEL: v_log2_fneg_v2f16:
3452 ; R600:       ; %bb.0:
3453 ; R600-NEXT:    CF_END
3454 ; R600-NEXT:    PAD
3456 ; CM-LABEL: v_log2_fneg_v2f16:
3457 ; CM:       ; %bb.0:
3458 ; CM-NEXT:    CF_END
3459 ; CM-NEXT:    PAD
3460   %fneg = fneg <2 x half> %in
3461   %result = call <2 x half> @llvm.log2.v2f16(<2 x half> %fneg)
3462   ret <2 x half> %result
3465 define <2 x half> @v_log2_v2f16_fast(<2 x half> %in) {
3466 ; SI-SDAG-LABEL: v_log2_v2f16_fast:
3467 ; SI-SDAG:       ; %bb.0:
3468 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3469 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3470 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3471 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3472 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3473 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3474 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
3475 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3476 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3477 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3478 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3479 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3481 ; SI-GISEL-LABEL: v_log2_v2f16_fast:
3482 ; SI-GISEL:       ; %bb.0:
3483 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3484 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
3485 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
3486 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3487 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
3488 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
3489 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
3490 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3492 ; VI-SDAG-LABEL: v_log2_v2f16_fast:
3493 ; VI-SDAG:       ; %bb.0:
3494 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3495 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3496 ; VI-SDAG-NEXT:    v_log_f16_e32 v0, v0
3497 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3498 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3500 ; VI-GISEL-LABEL: v_log2_v2f16_fast:
3501 ; VI-GISEL:       ; %bb.0:
3502 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3503 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v0
3504 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3505 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
3506 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3508 ; GFX900-SDAG-LABEL: v_log2_v2f16_fast:
3509 ; GFX900-SDAG:       ; %bb.0:
3510 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3511 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3512 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v0, v0
3513 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
3514 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3516 ; GFX900-GISEL-LABEL: v_log2_v2f16_fast:
3517 ; GFX900-GISEL:       ; %bb.0:
3518 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3519 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v1, v0
3520 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3521 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v1, v0
3522 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3524 ; GFX1100-LABEL: v_log2_v2f16_fast:
3525 ; GFX1100:       ; %bb.0:
3526 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3527 ; GFX1100-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
3528 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
3529 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3530 ; GFX1100-NEXT:    v_log_f16_e32 v1, v1
3531 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
3532 ; GFX1100-NEXT:    v_pack_b32_f16 v0, v0, v1
3533 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
3535 ; R600-LABEL: v_log2_v2f16_fast:
3536 ; R600:       ; %bb.0:
3537 ; R600-NEXT:    CF_END
3538 ; R600-NEXT:    PAD
3540 ; CM-LABEL: v_log2_v2f16_fast:
3541 ; CM:       ; %bb.0:
3542 ; CM-NEXT:    CF_END
3543 ; CM-NEXT:    PAD
3544   %result = call fast <2 x half> @llvm.log2.v2f16(<2 x half> %in)
3545   ret <2 x half> %result
3548 define <3 x half> @v_log2_v3f16(<3 x half> %in) {
3549 ; SI-SDAG-LABEL: v_log2_v3f16:
3550 ; SI-SDAG:       ; %bb.0:
3551 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3552 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3553 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3554 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
3555 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3556 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3557 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
3558 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3559 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
3560 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v2
3561 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3562 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3563 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
3564 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3565 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3566 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
3567 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3569 ; SI-GISEL-LABEL: v_log2_v3f16:
3570 ; SI-GISEL:       ; %bb.0:
3571 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3572 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
3573 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
3574 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2
3575 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3576 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
3577 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v2
3578 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
3579 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
3580 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v2, v2
3581 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3583 ; VI-SDAG-LABEL: v_log2_v3f16:
3584 ; VI-SDAG:       ; %bb.0:
3585 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3586 ; VI-SDAG-NEXT:    v_log_f16_sdwa v2, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3587 ; VI-SDAG-NEXT:    v_log_f16_e32 v0, v0
3588 ; VI-SDAG-NEXT:    v_log_f16_e32 v1, v1
3589 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v2
3590 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3592 ; VI-GISEL-LABEL: v_log2_v3f16:
3593 ; VI-GISEL:       ; %bb.0:
3594 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3595 ; VI-GISEL-NEXT:    v_log_f16_e32 v2, v0
3596 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3597 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v1
3598 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v2, v0
3599 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3601 ; GFX900-SDAG-LABEL: v_log2_v3f16:
3602 ; GFX900-SDAG:       ; %bb.0:
3603 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3604 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3605 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v0, v0
3606 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v1, v1
3607 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v2
3608 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3610 ; GFX900-GISEL-LABEL: v_log2_v3f16:
3611 ; GFX900-GISEL:       ; %bb.0:
3612 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3613 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v2, v0
3614 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3615 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v1, v1
3616 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v2, v0
3617 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3619 ; GFX1100-LABEL: v_log2_v3f16:
3620 ; GFX1100:       ; %bb.0:
3621 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3622 ; GFX1100-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3623 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
3624 ; GFX1100-NEXT:    v_log_f16_e32 v1, v1
3625 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3626 ; GFX1100-NEXT:    v_log_f16_e32 v2, v2
3627 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
3628 ; GFX1100-NEXT:    v_pack_b32_f16 v0, v0, v2
3629 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
3631 ; R600-LABEL: v_log2_v3f16:
3632 ; R600:       ; %bb.0:
3633 ; R600-NEXT:    CF_END
3634 ; R600-NEXT:    PAD
3636 ; CM-LABEL: v_log2_v3f16:
3637 ; CM:       ; %bb.0:
3638 ; CM-NEXT:    CF_END
3639 ; CM-NEXT:    PAD
3640   %result = call <3 x half> @llvm.log2.v3f16(<3 x half> %in)
3641   ret <3 x half> %result
3644 define <3 x half> @v_log2_v3f16_fast(<3 x half> %in) {
3645 ; SI-SDAG-LABEL: v_log2_v3f16_fast:
3646 ; SI-SDAG:       ; %bb.0:
3647 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3648 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3649 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3650 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
3651 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3652 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3653 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
3654 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3655 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
3656 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v2
3657 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3658 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3659 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
3660 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3661 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3662 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
3663 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3665 ; SI-GISEL-LABEL: v_log2_v3f16_fast:
3666 ; SI-GISEL:       ; %bb.0:
3667 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3668 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
3669 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
3670 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2
3671 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3672 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
3673 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v2
3674 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
3675 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
3676 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v2, v2
3677 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3679 ; VI-SDAG-LABEL: v_log2_v3f16_fast:
3680 ; VI-SDAG:       ; %bb.0:
3681 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3682 ; VI-SDAG-NEXT:    v_log_f16_sdwa v2, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3683 ; VI-SDAG-NEXT:    v_log_f16_e32 v0, v0
3684 ; VI-SDAG-NEXT:    v_log_f16_e32 v1, v1
3685 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v2
3686 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3688 ; VI-GISEL-LABEL: v_log2_v3f16_fast:
3689 ; VI-GISEL:       ; %bb.0:
3690 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3691 ; VI-GISEL-NEXT:    v_log_f16_e32 v2, v0
3692 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3693 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v1
3694 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v2, v0
3695 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3697 ; GFX900-SDAG-LABEL: v_log2_v3f16_fast:
3698 ; GFX900-SDAG:       ; %bb.0:
3699 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3700 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3701 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v0, v0
3702 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v1, v1
3703 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v2
3704 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3706 ; GFX900-GISEL-LABEL: v_log2_v3f16_fast:
3707 ; GFX900-GISEL:       ; %bb.0:
3708 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3709 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v2, v0
3710 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3711 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v1, v1
3712 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v2, v0
3713 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3715 ; GFX1100-LABEL: v_log2_v3f16_fast:
3716 ; GFX1100:       ; %bb.0:
3717 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3718 ; GFX1100-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3719 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
3720 ; GFX1100-NEXT:    v_log_f16_e32 v1, v1
3721 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3722 ; GFX1100-NEXT:    v_log_f16_e32 v2, v2
3723 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
3724 ; GFX1100-NEXT:    v_pack_b32_f16 v0, v0, v2
3725 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
3727 ; R600-LABEL: v_log2_v3f16_fast:
3728 ; R600:       ; %bb.0:
3729 ; R600-NEXT:    CF_END
3730 ; R600-NEXT:    PAD
3732 ; CM-LABEL: v_log2_v3f16_fast:
3733 ; CM:       ; %bb.0:
3734 ; CM-NEXT:    CF_END
3735 ; CM-NEXT:    PAD
3736   %result = call fast <3 x half> @llvm.log2.v3f16(<3 x half> %in)
3737   ret <3 x half> %result
3740 define <4 x half> @v_log2_v4f16(<4 x half> %in) {
3741 ; SI-SDAG-LABEL: v_log2_v4f16:
3742 ; SI-SDAG:       ; %bb.0:
3743 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3744 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3745 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3746 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
3747 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v3, v3
3748 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3749 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3750 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
3751 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v3, v3
3752 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3753 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
3754 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v2
3755 ; SI-SDAG-NEXT:    v_log_f32_e32 v3, v3
3756 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3757 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3758 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
3759 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v3, v3
3760 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3761 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3762 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
3763 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v3, v3
3764 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3766 ; SI-GISEL-LABEL: v_log2_v4f16:
3767 ; SI-GISEL:       ; %bb.0:
3768 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3769 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
3770 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
3771 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2
3772 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v3, v3
3773 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3774 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
3775 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v2
3776 ; SI-GISEL-NEXT:    v_log_f32_e32 v3, v3
3777 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
3778 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
3779 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v2, v2
3780 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v3, v3
3781 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3783 ; VI-SDAG-LABEL: v_log2_v4f16:
3784 ; VI-SDAG:       ; %bb.0:
3785 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3786 ; VI-SDAG-NEXT:    v_log_f16_sdwa v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3787 ; VI-SDAG-NEXT:    v_log_f16_sdwa v3, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3788 ; VI-SDAG-NEXT:    v_log_f16_e32 v0, v0
3789 ; VI-SDAG-NEXT:    v_log_f16_e32 v1, v1
3790 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v3
3791 ; VI-SDAG-NEXT:    v_or_b32_e32 v1, v1, v2
3792 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3794 ; VI-GISEL-LABEL: v_log2_v4f16:
3795 ; VI-GISEL:       ; %bb.0:
3796 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3797 ; VI-GISEL-NEXT:    v_log_f16_e32 v2, v0
3798 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3799 ; VI-GISEL-NEXT:    v_log_f16_e32 v3, v1
3800 ; VI-GISEL-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3801 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v2, v0
3802 ; VI-GISEL-NEXT:    v_or_b32_e32 v1, v3, v1
3803 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3805 ; GFX900-SDAG-LABEL: v_log2_v4f16:
3806 ; GFX900-SDAG:       ; %bb.0:
3807 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3808 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3809 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3810 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v0, v0
3811 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v1, v1
3812 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v3
3813 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v1, v1, v2
3814 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3816 ; GFX900-GISEL-LABEL: v_log2_v4f16:
3817 ; GFX900-GISEL:       ; %bb.0:
3818 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3819 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v2, v0
3820 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3821 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v3, v1
3822 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3823 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v2, v0
3824 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v1, v3, v1
3825 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3827 ; GFX1100-SDAG-LABEL: v_log2_v4f16:
3828 ; GFX1100-SDAG:       ; %bb.0:
3829 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3830 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3831 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
3832 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v1, v1
3833 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v0, v0
3834 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3835 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v2, v2
3836 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v3, v3
3837 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3838 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v2
3839 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v1, v1, v3
3840 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3842 ; GFX1100-GISEL-LABEL: v_log2_v4f16:
3843 ; GFX1100-GISEL:       ; %bb.0:
3844 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3845 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3846 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
3847 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v0, v0
3848 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v1, v1
3849 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3850 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v2, v2
3851 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v3, v3
3852 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3853 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v0, v0, v2
3854 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v1, v1, v3
3855 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3857 ; R600-LABEL: v_log2_v4f16:
3858 ; R600:       ; %bb.0:
3859 ; R600-NEXT:    CF_END
3860 ; R600-NEXT:    PAD
3862 ; CM-LABEL: v_log2_v4f16:
3863 ; CM:       ; %bb.0:
3864 ; CM-NEXT:    CF_END
3865 ; CM-NEXT:    PAD
3866   %result = call <4 x half> @llvm.log2.v4f16(<4 x half> %in)
3867   ret <4 x half> %result
3870 define <4 x half> @v_log2_v4f16_fast(<4 x half> %in) {
3871 ; SI-SDAG-LABEL: v_log2_v4f16_fast:
3872 ; SI-SDAG:       ; %bb.0:
3873 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3874 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3875 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3876 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
3877 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v3, v3
3878 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3879 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3880 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
3881 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v3, v3
3882 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3883 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
3884 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v2
3885 ; SI-SDAG-NEXT:    v_log_f32_e32 v3, v3
3886 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
3887 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
3888 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
3889 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v3, v3
3890 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
3891 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
3892 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
3893 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v3, v3
3894 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3896 ; SI-GISEL-LABEL: v_log2_v4f16_fast:
3897 ; SI-GISEL:       ; %bb.0:
3898 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3899 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
3900 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
3901 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2
3902 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v3, v3
3903 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3904 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
3905 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v2
3906 ; SI-GISEL-NEXT:    v_log_f32_e32 v3, v3
3907 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
3908 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
3909 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v2, v2
3910 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v3, v3
3911 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3913 ; VI-SDAG-LABEL: v_log2_v4f16_fast:
3914 ; VI-SDAG:       ; %bb.0:
3915 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3916 ; VI-SDAG-NEXT:    v_log_f16_sdwa v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3917 ; VI-SDAG-NEXT:    v_log_f16_sdwa v3, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3918 ; VI-SDAG-NEXT:    v_log_f16_e32 v0, v0
3919 ; VI-SDAG-NEXT:    v_log_f16_e32 v1, v1
3920 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v3
3921 ; VI-SDAG-NEXT:    v_or_b32_e32 v1, v1, v2
3922 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3924 ; VI-GISEL-LABEL: v_log2_v4f16_fast:
3925 ; VI-GISEL:       ; %bb.0:
3926 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3927 ; VI-GISEL-NEXT:    v_log_f16_e32 v2, v0
3928 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3929 ; VI-GISEL-NEXT:    v_log_f16_e32 v3, v1
3930 ; VI-GISEL-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1
3931 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v2, v0
3932 ; VI-GISEL-NEXT:    v_or_b32_e32 v1, v3, v1
3933 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3935 ; GFX900-SDAG-LABEL: v_log2_v4f16_fast:
3936 ; GFX900-SDAG:       ; %bb.0:
3937 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3938 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3939 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3940 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v0, v0
3941 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v1, v1
3942 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v3
3943 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v1, v1, v2
3944 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3946 ; GFX900-GISEL-LABEL: v_log2_v4f16_fast:
3947 ; GFX900-GISEL:       ; %bb.0:
3948 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3949 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v2, v0
3950 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3951 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v3, v1
3952 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
3953 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v2, v0
3954 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v1, v3, v1
3955 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3957 ; GFX1100-SDAG-LABEL: v_log2_v4f16_fast:
3958 ; GFX1100-SDAG:       ; %bb.0:
3959 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3960 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3961 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
3962 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v1, v1
3963 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v0, v0
3964 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3965 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v2, v2
3966 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v3, v3
3967 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3968 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v2
3969 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v1, v1, v3
3970 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3972 ; GFX1100-GISEL-LABEL: v_log2_v4f16_fast:
3973 ; GFX1100-GISEL:       ; %bb.0:
3974 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3975 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3976 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
3977 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v0, v0
3978 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v1, v1
3979 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3980 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v2, v2
3981 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v3, v3
3982 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3983 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v0, v0, v2
3984 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v1, v1, v3
3985 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3987 ; R600-LABEL: v_log2_v4f16_fast:
3988 ; R600:       ; %bb.0:
3989 ; R600-NEXT:    CF_END
3990 ; R600-NEXT:    PAD
3992 ; CM-LABEL: v_log2_v4f16_fast:
3993 ; CM:       ; %bb.0:
3994 ; CM-NEXT:    CF_END
3995 ; CM-NEXT:    PAD
3996   %result = call fast <4 x half> @llvm.log2.v4f16(<4 x half> %in)
3997   ret <4 x half> %result
4000 declare float @llvm.fabs.f32(float) #2
4001 declare float @llvm.log2.f32(float) #2
4002 declare <2 x float> @llvm.log2.v2f32(<2 x float>) #2
4003 declare <3 x float> @llvm.log2.v3f32(<3 x float>) #2
4004 declare <4 x float> @llvm.log2.v4f32(<4 x float>) #2
4005 declare half @llvm.fabs.f16(half) #2
4006 declare half @llvm.log2.f16(half) #2
4007 declare <2 x half> @llvm.log2.v2f16(<2 x half>) #2
4008 declare <3 x half> @llvm.log2.v3f16(<3 x half>) #2
4009 declare <4 x half> @llvm.log2.v4f16(<4 x half>) #2
4010 declare <2 x half> @llvm.fabs.v2f16(<2 x half>) #2
4012 attributes #0 = { "denormal-fp-math-f32"="ieee,preserve-sign" }
4013 attributes #1 = { "denormal-fp-math-f32"="dynamic,dynamic" }
4014 attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
4015 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
4016 ; SI: {{.*}}