Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.log.ll
blob528232a203acfe19dde8f4acacf9aadf4078a0f5
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_log_f32(ptr addrspace(1) %out, float %in) {
15 ; SI-SDAG-LABEL: s_log_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[4:5], s[0:1], 0x9
19 ; SI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
20 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
21 ; SI-SDAG-NEXT:    s_mov_b32 s0, 0x3f317217
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, 1.0, v1, vcc
25 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, s2, v0
26 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
27 ; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000
28 ; SI-SDAG-NEXT:    s_mov_b32 s6, -1
29 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
30 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s0, -v1
31 ; SI-SDAG-NEXT:    s_mov_b32 s0, 0x3377d1cf
32 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s0, v2
33 ; SI-SDAG-NEXT:    s_mov_b32 s0, 0x7f800000
34 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
35 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s0
36 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[0:1]
37 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
38 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
39 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
40 ; SI-SDAG-NEXT:    buffer_store_dword v0, off, s[4:7], 0
41 ; SI-SDAG-NEXT:    s_endpgm
43 ; SI-GISEL-LABEL: s_log_f32:
44 ; SI-GISEL:       ; %bb.0:
45 ; SI-GISEL-NEXT:    s_load_dword s2, s[0:1], 0xb
46 ; SI-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
47 ; SI-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
48 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
49 ; SI-GISEL-NEXT:    s_mov_b32 s0, 0x3f317217
50 ; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
51 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
52 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
53 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, s2, v0
54 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
55 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
56 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
57 ; SI-GISEL-NEXT:    s_mov_b32 s6, -1
58 ; SI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
59 ; SI-GISEL-NEXT:    v_fma_f32 v4, v0, s0, -v3
60 ; SI-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
61 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
62 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, v2
63 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[0:1]
64 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
65 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
66 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
67 ; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000
68 ; SI-GISEL-NEXT:    buffer_store_dword v0, off, s[4:7], 0
69 ; SI-GISEL-NEXT:    s_endpgm
71 ; VI-SDAG-LABEL: s_log_f32:
72 ; VI-SDAG:       ; %bb.0:
73 ; VI-SDAG-NEXT:    s_load_dword s2, s[0:1], 0x2c
74 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
75 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
76 ; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
77 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
78 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
79 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, s2, v0
80 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
81 ; VI-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
82 ; VI-SDAG-NEXT:    s_mov_b32 s0, 0x7f800000
83 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
84 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
85 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
86 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3f317000, v2
87 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
88 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
89 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
90 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
91 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
92 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s0
93 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[0:1]
94 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
95 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
96 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
97 ; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
98 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, s2
99 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, s3
100 ; VI-SDAG-NEXT:    flat_store_dword v[0:1], v2
101 ; VI-SDAG-NEXT:    s_endpgm
103 ; VI-GISEL-LABEL: s_log_f32:
104 ; VI-GISEL:       ; %bb.0:
105 ; VI-GISEL-NEXT:    s_load_dword s2, s[0:1], 0x2c
106 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
107 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
108 ; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
109 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s2, v0
110 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
111 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, s2, v0
112 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
113 ; VI-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
114 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
115 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
116 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
117 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v2
118 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
119 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
120 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
121 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
122 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
123 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
124 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, v2
125 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[0:1]
126 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
127 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
128 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
129 ; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
130 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s2
131 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s3
132 ; VI-GISEL-NEXT:    flat_store_dword v[0:1], v2
133 ; VI-GISEL-NEXT:    s_endpgm
135 ; GFX900-SDAG-LABEL: s_log_f32:
136 ; GFX900-SDAG:       ; %bb.0:
137 ; GFX900-SDAG-NEXT:    s_load_dword s4, s[0:1], 0x2c
138 ; GFX900-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
139 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
140 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
141 ; GFX900-SDAG-NEXT:    s_mov_b32 s0, 0x3f317217
142 ; GFX900-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
143 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
144 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
145 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, s4, v0
146 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
147 ; GFX900-SDAG-NEXT:    s_mov_b32 s1, 0x3377d1cf
148 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0
149 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317217, v0
150 ; GFX900-SDAG-NEXT:    v_fma_f32 v3, v0, s0, -v2
151 ; GFX900-SDAG-NEXT:    v_fma_f32 v3, v0, s1, v3
152 ; GFX900-SDAG-NEXT:    s_mov_b32 s0, 0x7f800000
153 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v2, v2, v3
154 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s0
155 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
156 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v2, 0x41b17218
157 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc
158 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v2
159 ; GFX900-SDAG-NEXT:    global_store_dword v1, v0, s[2:3]
160 ; GFX900-SDAG-NEXT:    s_endpgm
162 ; GFX900-GISEL-LABEL: s_log_f32:
163 ; GFX900-GISEL:       ; %bb.0:
164 ; GFX900-GISEL-NEXT:    s_load_dword s4, s[0:1], 0x2c
165 ; GFX900-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x24
166 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
167 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
168 ; GFX900-GISEL-NEXT:    s_mov_b32 s0, 0x3f317217
169 ; GFX900-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
170 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
171 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
172 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, s4, v0
173 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
174 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
175 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
176 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
177 ; GFX900-GISEL-NEXT:    v_fma_f32 v4, v0, s0, -v3
178 ; GFX900-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
179 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
180 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, v2
181 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[0:1]
182 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
183 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
184 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
185 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0
186 ; GFX900-GISEL-NEXT:    global_store_dword v1, v0, s[2:3]
187 ; GFX900-GISEL-NEXT:    s_endpgm
189 ; GFX1100-SDAG-LABEL: s_log_f32:
190 ; GFX1100-SDAG:       ; %bb.0:
191 ; GFX1100-SDAG-NEXT:    s_clause 0x1
192 ; GFX1100-SDAG-NEXT:    s_load_b32 s2, s[0:1], 0x2c
193 ; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
194 ; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
195 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s2
196 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
197 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s3
198 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, s2, v0
199 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
200 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
201 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
202 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
203 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
204 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
205 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
206 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
207 ; GFX1100-SDAG-NEXT:    v_dual_add_f32 v1, v1, v2 :: v_dual_mov_b32 v2, 0
208 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
209 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
210 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, s3
211 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
212 ; GFX1100-SDAG-NEXT:    global_store_b32 v2, v0, s[0:1]
213 ; GFX1100-SDAG-NEXT:    s_nop 0
214 ; GFX1100-SDAG-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
215 ; GFX1100-SDAG-NEXT:    s_endpgm
217 ; GFX1100-GISEL-LABEL: s_log_f32:
218 ; GFX1100-GISEL:       ; %bb.0:
219 ; GFX1100-GISEL-NEXT:    s_clause 0x1
220 ; GFX1100-GISEL-NEXT:    s_load_b32 s2, s[0:1], 0x2c
221 ; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
222 ; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
223 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s2
224 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
225 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s3
226 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, s2, v0
227 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
228 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
229 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
230 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
231 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
232 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
233 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
234 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
235 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
236 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, 0x41b17218, s3
237 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
238 ; GFX1100-GISEL-NEXT:    v_dual_cndmask_b32 v0, v0, v1 :: v_dual_mov_b32 v1, 0
239 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v2
240 ; GFX1100-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
241 ; GFX1100-GISEL-NEXT:    s_nop 0
242 ; GFX1100-GISEL-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
243 ; GFX1100-GISEL-NEXT:    s_endpgm
245 ; R600-LABEL: s_log_f32:
246 ; R600:       ; %bb.0:
247 ; R600-NEXT:    ALU 23, @4, KC0[CB0:0-32], KC1[]
248 ; R600-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1
249 ; R600-NEXT:    CF_END
250 ; R600-NEXT:    PAD
251 ; R600-NEXT:    ALU clause starting at 4:
252 ; R600-NEXT:     SETGT * T0.W, literal.x, KC0[2].Z,
253 ; R600-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
254 ; R600-NEXT:     CNDE * T1.W, PV.W, 1.0, literal.x,
255 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
256 ; R600-NEXT:     MUL_IEEE * T1.W, KC0[2].Z, PV.W,
257 ; R600-NEXT:     LOG_IEEE * T0.X, PV.W,
258 ; R600-NEXT:     AND_INT * T1.W, PS, literal.x,
259 ; R600-NEXT:    -4096(nan), 0(0.000000e+00)
260 ; R600-NEXT:     ADD * T2.W, T0.X, -PV.W,
261 ; R600-NEXT:     MUL_IEEE * T3.W, PV.W, literal.x,
262 ; R600-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
263 ; R600-NEXT:     MULADD_IEEE * T3.W, T1.W, literal.x, PV.W,
264 ; R600-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
265 ; R600-NEXT:     MULADD_IEEE * T2.W, T2.W, literal.x, PV.W,
266 ; R600-NEXT:    1060204544(6.931152e-01), 0(0.000000e+00)
267 ; R600-NEXT:     MULADD_IEEE T1.W, T1.W, literal.x, PV.W,
268 ; R600-NEXT:     SETGT * T2.W, literal.y, |T0.X|,
269 ; R600-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
270 ; R600-NEXT:     CNDE T1.W, PS, T0.X, PV.W,
271 ; R600-NEXT:     CNDE * T0.W, T0.W, 0.0, literal.x,
272 ; R600-NEXT:    1102148120(2.218071e+01), 0(0.000000e+00)
273 ; R600-NEXT:     ADD T0.X, PV.W, -PS,
274 ; R600-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
275 ; R600-NEXT:    2(2.802597e-45), 0(0.000000e+00)
277 ; CM-LABEL: s_log_f32:
278 ; CM:       ; %bb.0:
279 ; CM-NEXT:    ALU 26, @4, KC0[CB0:0-32], KC1[]
280 ; CM-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T0.X, T1.X
281 ; CM-NEXT:    CF_END
282 ; CM-NEXT:    PAD
283 ; CM-NEXT:    ALU clause starting at 4:
284 ; CM-NEXT:     SETGT * T0.W, literal.x, KC0[2].Z,
285 ; CM-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
286 ; CM-NEXT:     CNDE * T1.W, PV.W, 1.0, literal.x,
287 ; CM-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
288 ; CM-NEXT:     MUL_IEEE * T1.W, KC0[2].Z, PV.W,
289 ; CM-NEXT:     LOG_IEEE T0.X, T1.W,
290 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T1.W,
291 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T1.W,
292 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T1.W,
293 ; CM-NEXT:     AND_INT * T1.W, PV.X, literal.x,
294 ; CM-NEXT:    -4096(nan), 0(0.000000e+00)
295 ; CM-NEXT:     ADD * T2.W, T0.X, -PV.W,
296 ; CM-NEXT:     MUL_IEEE * T3.W, PV.W, literal.x,
297 ; CM-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
298 ; CM-NEXT:     MULADD_IEEE * T3.W, T1.W, literal.x, PV.W,
299 ; CM-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
300 ; CM-NEXT:     MULADD_IEEE * T2.W, T2.W, literal.x, PV.W,
301 ; CM-NEXT:    1060204544(6.931152e-01), 0(0.000000e+00)
302 ; CM-NEXT:     MULADD_IEEE T0.Z, T1.W, literal.x, PV.W,
303 ; CM-NEXT:     SETGT * T1.W, literal.y, |T0.X|,
304 ; CM-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
305 ; CM-NEXT:     CNDE T0.Z, PV.W, T0.X, PV.Z,
306 ; CM-NEXT:     CNDE * T0.W, T0.W, 0.0, literal.x,
307 ; CM-NEXT:    1102148120(2.218071e+01), 0(0.000000e+00)
308 ; CM-NEXT:     ADD * T0.X, PV.Z, -PV.W,
309 ; CM-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
310 ; CM-NEXT:    2(2.802597e-45), 0(0.000000e+00)
311   %result = call float @llvm.log.f32(float %in)
312   store float %result, ptr addrspace(1) %out
313   ret void
316 ; FIXME: We should be able to merge these packets together on Cayman so we
317 ; have a maximum of 4 instructions.
318 define amdgpu_kernel void @s_log_v2f32(ptr addrspace(1) %out, <2 x float> %in) {
319 ; SI-SDAG-LABEL: s_log_v2f32:
320 ; SI-SDAG:       ; %bb.0:
321 ; SI-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
322 ; SI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
323 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
324 ; SI-SDAG-NEXT:    s_mov_b32 s8, 0x3377d1cf
325 ; SI-SDAG-NEXT:    s_mov_b32 s9, 0x7f800000
326 ; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
327 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s3, v0
328 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v1, vcc
329 ; SI-SDAG-NEXT:    v_mul_f32_e32 v2, s3, v2
330 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v2
331 ; SI-SDAG-NEXT:    s_mov_b32 s3, 0x3f317217
332 ; SI-SDAG-NEXT:    s_mov_b32 s4, s0
333 ; SI-SDAG-NEXT:    s_mov_b32 s5, s1
334 ; SI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v2
335 ; SI-SDAG-NEXT:    v_fma_f32 v4, v2, s3, -v3
336 ; SI-SDAG-NEXT:    v_fma_f32 v4, v2, s8, v4
337 ; SI-SDAG-NEXT:    v_add_f32_e32 v3, v3, v4
338 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, s9
339 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
340 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s2, v0
341 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, 1.0, v1, s[0:1]
342 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, s2, v0
343 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
344 ; SI-SDAG-NEXT:    v_mov_b32_e32 v3, 0x41b17218
345 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v3, vcc
346 ; SI-SDAG-NEXT:    v_sub_f32_e32 v1, v2, v1
347 ; SI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317217, v0
348 ; SI-SDAG-NEXT:    v_fma_f32 v4, v0, s3, -v2
349 ; SI-SDAG-NEXT:    v_fma_f32 v4, v0, s8, v4
350 ; SI-SDAG-NEXT:    v_add_f32_e32 v2, v2, v4
351 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s9
352 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
353 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, v3, s[0:1]
354 ; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000
355 ; SI-SDAG-NEXT:    s_mov_b32 s6, -1
356 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v2
357 ; SI-SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
358 ; SI-SDAG-NEXT:    s_endpgm
360 ; SI-GISEL-LABEL: s_log_v2f32:
361 ; SI-GISEL:       ; %bb.0:
362 ; SI-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
363 ; SI-GISEL-NEXT:    s_mov_b32 s0, 0x800000
364 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
365 ; SI-GISEL-NEXT:    s_mov_b32 s2, 0x3377d1cf
366 ; SI-GISEL-NEXT:    s_mov_b32 s3, 0x7f800000
367 ; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
368 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, s6
369 ; SI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v2
370 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v2, 1.0, v1, vcc
371 ; SI-GISEL-NEXT:    v_mul_f32_e32 v2, s6, v2
372 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v2
373 ; SI-GISEL-NEXT:    s_mov_b32 s0, 0x3f317217
374 ; SI-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
375 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3f317217
376 ; SI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v2
377 ; SI-GISEL-NEXT:    v_fma_f32 v5, v2, s0, -v4
378 ; SI-GISEL-NEXT:    v_fma_f32 v5, v2, s2, v5
379 ; SI-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
380 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, s3
381 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, v2, v4, s[0:1]
382 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s7, v0
383 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, v1, s[0:1]
384 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, s7, v0
385 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v0
386 ; SI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x41b17218
387 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v4, vcc
388 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v2, v0
389 ; SI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317217, v1
390 ; SI-GISEL-NEXT:    v_fma_f32 v3, v1, v3, -v2
391 ; SI-GISEL-NEXT:    v_fma_f32 v3, v1, s2, v3
392 ; SI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
393 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s3
394 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
395 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, v4, s[0:1]
396 ; SI-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v2
397 ; SI-GISEL-NEXT:    s_mov_b32 s6, -1
398 ; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000
399 ; SI-GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
400 ; SI-GISEL-NEXT:    s_endpgm
402 ; VI-SDAG-LABEL: s_log_v2f32:
403 ; VI-SDAG:       ; %bb.0:
404 ; VI-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
405 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
406 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
407 ; VI-SDAG-NEXT:    s_mov_b32 s2, 0x7f800000
408 ; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
409 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v0
410 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v1, vcc
411 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, s7, v2
412 ; VI-SDAG-NEXT:    v_log_f32_e32 v2, v2
413 ; VI-SDAG-NEXT:    v_and_b32_e32 v3, 0xfffff000, v2
414 ; VI-SDAG-NEXT:    v_sub_f32_e32 v4, v2, v3
415 ; VI-SDAG-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v3
416 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, 0x3f317000, v4
417 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v4
418 ; VI-SDAG-NEXT:    v_add_f32_e32 v4, v5, v4
419 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
420 ; VI-SDAG-NEXT:    v_add_f32_e32 v4, v6, v4
421 ; VI-SDAG-NEXT:    v_add_f32_e32 v3, v3, v4
422 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, s2
423 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
424 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s6, v0
425 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, 1.0, v1, s[0:1]
426 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, s6, v0
427 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
428 ; VI-SDAG-NEXT:    v_mov_b32_e32 v3, 0x41b17218
429 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v3, vcc
430 ; VI-SDAG-NEXT:    v_sub_f32_e32 v1, v2, v1
431 ; VI-SDAG-NEXT:    v_and_b32_e32 v2, 0xfffff000, v0
432 ; VI-SDAG-NEXT:    v_sub_f32_e32 v4, v0, v2
433 ; VI-SDAG-NEXT:    v_mul_f32_e32 v5, 0x3f317000, v4
434 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v4
435 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, 0x3805fdf4, v2
436 ; VI-SDAG-NEXT:    v_add_f32_e32 v4, v6, v4
437 ; VI-SDAG-NEXT:    v_add_f32_e32 v4, v5, v4
438 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
439 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v2, v4
440 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s2
441 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
442 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, 0, v3, s[0:1]
443 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v2
444 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, s4
445 ; VI-SDAG-NEXT:    v_mov_b32_e32 v3, s5
446 ; VI-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
447 ; VI-SDAG-NEXT:    s_endpgm
449 ; VI-GISEL-LABEL: s_log_v2f32:
450 ; VI-GISEL:       ; %bb.0:
451 ; VI-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
452 ; VI-GISEL-NEXT:    s_mov_b32 s0, 0x800000
453 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, 0x4f800000
454 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x800000
455 ; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
456 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, s6
457 ; VI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v1
458 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v0, vcc
459 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, s6, v1
460 ; VI-GISEL-NEXT:    v_log_f32_e32 v1, v1
461 ; VI-GISEL-NEXT:    s_mov_b32 s0, 0x7f800000
462 ; VI-GISEL-NEXT:    v_and_b32_e32 v3, 0xfffff000, v1
463 ; VI-GISEL-NEXT:    v_sub_f32_e32 v4, v1, v3
464 ; VI-GISEL-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v3
465 ; VI-GISEL-NEXT:    v_mul_f32_e32 v6, 0x3805fdf4, v4
466 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3f317000, v4
467 ; VI-GISEL-NEXT:    v_add_f32_e32 v5, v5, v6
468 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
469 ; VI-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
470 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
471 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v1|, s0
472 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s[0:1]
473 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s7, v2
474 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, v0, s[0:1]
475 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, s7, v0
476 ; VI-GISEL-NEXT:    v_log_f32_e32 v2, v0
477 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x41b17218
478 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
479 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v1, v0
480 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v2
481 ; VI-GISEL-NEXT:    v_sub_f32_e32 v5, v2, v1
482 ; VI-GISEL-NEXT:    v_mul_f32_e32 v6, 0x3805fdf4, v5
483 ; VI-GISEL-NEXT:    v_mul_f32_e32 v7, 0x3805fdf4, v1
484 ; VI-GISEL-NEXT:    v_add_f32_e32 v6, v7, v6
485 ; VI-GISEL-NEXT:    v_mul_f32_e32 v5, 0x3f317000, v5
486 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x7f800000
487 ; VI-GISEL-NEXT:    v_add_f32_e32 v5, v5, v6
488 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
489 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v5
490 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v2|, v4
491 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
492 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, v3, s[0:1]
493 ; VI-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v2
494 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, s4
495 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, s5
496 ; VI-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
497 ; VI-GISEL-NEXT:    s_endpgm
499 ; GFX900-SDAG-LABEL: s_log_v2f32:
500 ; GFX900-SDAG:       ; %bb.0:
501 ; GFX900-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
502 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
503 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
504 ; GFX900-SDAG-NEXT:    s_mov_b32 s2, 0x3f317217
505 ; GFX900-SDAG-NEXT:    s_mov_b32 s3, 0x3377d1cf
506 ; GFX900-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
507 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v0
508 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v3, 1.0, v1, vcc
509 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v3, s7, v3
510 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v3, v3
511 ; GFX900-SDAG-NEXT:    s_mov_b32 s7, 0x7f800000
512 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v2, 0
513 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v3
514 ; GFX900-SDAG-NEXT:    v_fma_f32 v5, v3, s2, -v4
515 ; GFX900-SDAG-NEXT:    v_fma_f32 v5, v3, s3, v5
516 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v4, v4, v5
517 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v3|, s7
518 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[0:1]
519 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s6, v0
520 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, 1.0, v1, s[0:1]
521 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, s6, v0
522 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
523 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v4, 0x41b17218
524 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v4, vcc
525 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v1, v3, v1
526 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
527 ; GFX900-SDAG-NEXT:    v_fma_f32 v5, v0, s2, -v3
528 ; GFX900-SDAG-NEXT:    v_fma_f32 v5, v0, s3, v5
529 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v3, v3, v5
530 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s7
531 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc
532 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v3, 0, v4, s[0:1]
533 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v3
534 ; GFX900-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[4:5]
535 ; GFX900-SDAG-NEXT:    s_endpgm
537 ; GFX900-GISEL-LABEL: s_log_v2f32:
538 ; GFX900-GISEL:       ; %bb.0:
539 ; GFX900-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
540 ; GFX900-GISEL-NEXT:    s_mov_b32 s0, 0x800000
541 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
542 ; GFX900-GISEL-NEXT:    s_mov_b32 s2, 0x3377d1cf
543 ; GFX900-GISEL-NEXT:    s_mov_b32 s3, 0x7f800000
544 ; GFX900-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
545 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, s6
546 ; GFX900-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v2
547 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v2, 1.0, v1, vcc
548 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v2, s6, v2
549 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v2, v2
550 ; GFX900-GISEL-NEXT:    s_mov_b32 s0, 0x3f317217
551 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
552 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3f317217
553 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v2
554 ; GFX900-GISEL-NEXT:    v_fma_f32 v5, v2, s0, -v4
555 ; GFX900-GISEL-NEXT:    v_fma_f32 v5, v2, s2, v5
556 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
557 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, s3
558 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v2, v2, v4, s[0:1]
559 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s7, v0
560 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, v1, s[0:1]
561 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, s7, v0
562 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v1, v0
563 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v4, 0x41b17218
564 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v4, vcc
565 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v2, v0
566 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317217, v1
567 ; GFX900-GISEL-NEXT:    v_fma_f32 v3, v1, v3, -v2
568 ; GFX900-GISEL-NEXT:    v_fma_f32 v3, v1, s2, v3
569 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
570 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s3
571 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
572 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v2, 0, v4, s[0:1]
573 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v2
574 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0
575 ; GFX900-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[4:5]
576 ; GFX900-GISEL-NEXT:    s_endpgm
578 ; GFX1100-SDAG-LABEL: s_log_v2f32:
579 ; GFX1100-SDAG:       ; %bb.0:
580 ; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24
581 ; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
582 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s4, 0x800000, s3
583 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s5, 0x800000, s2
584 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
585 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s4
586 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s5
587 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
588 ; GFX1100-SDAG-NEXT:    v_dual_mul_f32 v0, s3, v0 :: v_dual_mul_f32 v1, s2, v1
589 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
590 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
591 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v1, v1
592 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
593 ; GFX1100-SDAG-NEXT:    v_dual_mul_f32 v2, 0x3f317217, v0 :: v_dual_mul_f32 v3, 0x3f317217, v1
594 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
595 ; GFX1100-SDAG-NEXT:    v_fma_f32 v4, 0x3f317217, v0, -v2
596 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
597 ; GFX1100-SDAG-NEXT:    v_fma_f32 v5, 0x3f317217, v1, -v3
598 ; GFX1100-SDAG-NEXT:    v_dual_fmac_f32 v4, 0x3377d1cf, v0 :: v_dual_fmac_f32 v5, 0x3377d1cf, v1
599 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
600 ; GFX1100-SDAG-NEXT:    v_dual_add_f32 v2, v2, v4 :: v_dual_add_f32 v3, v3, v5
601 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 0x41b17218, s4
602 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v5, 0, 0x41b17218, s5
603 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc_lo
604 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1|
605 ; GFX1100-SDAG-NEXT:    v_dual_cndmask_b32 v2, v1, v3 :: v_dual_mov_b32 v3, 0
606 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
607 ; GFX1100-SDAG-NEXT:    v_dual_sub_f32 v1, v0, v4 :: v_dual_sub_f32 v0, v2, v5
608 ; GFX1100-SDAG-NEXT:    global_store_b64 v3, v[0:1], s[0:1]
609 ; GFX1100-SDAG-NEXT:    s_nop 0
610 ; GFX1100-SDAG-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
611 ; GFX1100-SDAG-NEXT:    s_endpgm
613 ; GFX1100-GISEL-LABEL: s_log_v2f32:
614 ; GFX1100-GISEL:       ; %bb.0:
615 ; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24
616 ; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
617 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s4, 0x800000, s2
618 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s5, 0x800000, s3
619 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
620 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s4
621 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s5
622 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
623 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v0, s2, v0 :: v_dual_mul_f32 v1, s3, v1
624 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
625 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
626 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v1
627 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
628 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v2, 0x3f317217, v0 :: v_dual_mul_f32 v3, 0x3f317217, v1
629 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
630 ; GFX1100-GISEL-NEXT:    v_fma_f32 v4, v0, 0x3f317217, -v2
631 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
632 ; GFX1100-GISEL-NEXT:    v_fma_f32 v5, 0x3f317217, v1, -v3
633 ; GFX1100-GISEL-NEXT:    v_dual_fmac_f32 v4, 0x3377d1cf, v0 :: v_dual_fmac_f32 v5, 0x3377d1cf, v1
634 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
635 ; GFX1100-GISEL-NEXT:    v_dual_add_f32 v2, v2, v4 :: v_dual_add_f32 v3, v3, v5
636 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 0x41b17218, s4
637 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v5, 0, 0x41b17218, s5
638 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc_lo
639 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1|
640 ; GFX1100-GISEL-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_cndmask_b32 v1, v1, v3
641 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
642 ; GFX1100-GISEL-NEXT:    v_dual_sub_f32 v0, v0, v4 :: v_dual_sub_f32 v1, v1, v5
643 ; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
644 ; GFX1100-GISEL-NEXT:    s_nop 0
645 ; GFX1100-GISEL-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
646 ; GFX1100-GISEL-NEXT:    s_endpgm
648 ; R600-LABEL: s_log_v2f32:
649 ; R600:       ; %bb.0:
650 ; R600-NEXT:    ALU 41, @4, KC0[CB0:0-32], KC1[]
651 ; R600-NEXT:    MEM_RAT_CACHELESS STORE_RAW T2.XY, T0.X, 1
652 ; R600-NEXT:    CF_END
653 ; R600-NEXT:    PAD
654 ; R600-NEXT:    ALU clause starting at 4:
655 ; R600-NEXT:     SETGT T0.W, literal.x, KC0[3].X,
656 ; R600-NEXT:     SETGT * T1.W, literal.x, KC0[2].W,
657 ; R600-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
658 ; R600-NEXT:     CNDE * T2.W, PV.W, 1.0, literal.x,
659 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
660 ; R600-NEXT:     MUL_IEEE T2.W, KC0[3].X, PV.W,
661 ; R600-NEXT:     CNDE * T3.W, T1.W, 1.0, literal.x,
662 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
663 ; R600-NEXT:     MUL_IEEE T3.W, KC0[2].W, PS,
664 ; R600-NEXT:     LOG_IEEE * T0.X, PV.W,
665 ; R600-NEXT:     AND_INT T2.W, PS, literal.x,
666 ; R600-NEXT:     LOG_IEEE * T0.Y, PV.W,
667 ; R600-NEXT:    -4096(nan), 0(0.000000e+00)
668 ; R600-NEXT:     ADD T3.W, T0.X, -PV.W,
669 ; R600-NEXT:     AND_INT * T4.W, PS, literal.x,
670 ; R600-NEXT:    -4096(nan), 0(0.000000e+00)
671 ; R600-NEXT:     ADD T5.W, T0.Y, -PS,
672 ; R600-NEXT:     MUL_IEEE * T6.W, PV.W, literal.x,
673 ; R600-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
674 ; R600-NEXT:     MULADD_IEEE T6.W, T2.W, literal.x, PS,
675 ; R600-NEXT:     MUL_IEEE * T7.W, PV.W, literal.x,
676 ; R600-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
677 ; R600-NEXT:     MULADD_IEEE T7.W, T4.W, literal.x, PS,
678 ; R600-NEXT:     MULADD_IEEE * T3.W, T3.W, literal.y, PV.W, BS:VEC_021/SCL_122
679 ; R600-NEXT:    939916788(3.194618e-05), 1060204544(6.931152e-01)
680 ; R600-NEXT:     MULADD_IEEE T0.Z, T2.W, literal.x, PS,
681 ; R600-NEXT:     SETGT T2.W, literal.y, |T0.X|,
682 ; R600-NEXT:     MULADD_IEEE * T3.W, T5.W, literal.x, PV.W, BS:VEC_021/SCL_122
683 ; R600-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
684 ; R600-NEXT:     MULADD_IEEE T1.Y, T4.W, literal.x, PS,
685 ; R600-NEXT:     SETGT T1.Z, literal.y, |T0.Y|,
686 ; R600-NEXT:     CNDE T2.W, PV.W, T0.X, PV.Z,
687 ; R600-NEXT:     CNDE * T0.W, T0.W, 0.0, literal.z,
688 ; R600-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
689 ; R600-NEXT:    1102148120(2.218071e+01), 0(0.000000e+00)
690 ; R600-NEXT:     ADD T2.Y, PV.W, -PS,
691 ; R600-NEXT:     CNDE T0.W, PV.Z, T0.Y, PV.Y,
692 ; R600-NEXT:     CNDE * T1.W, T1.W, 0.0, literal.x,
693 ; R600-NEXT:    1102148120(2.218071e+01), 0(0.000000e+00)
694 ; R600-NEXT:     ADD T2.X, PV.W, -PS,
695 ; R600-NEXT:     LSHR * T0.X, KC0[2].Y, literal.x,
696 ; R600-NEXT:    2(2.802597e-45), 0(0.000000e+00)
698 ; CM-LABEL: s_log_v2f32:
699 ; CM:       ; %bb.0:
700 ; CM-NEXT:    ALU 47, @4, KC0[CB0:0-32], KC1[]
701 ; CM-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T1, T0.X
702 ; CM-NEXT:    CF_END
703 ; CM-NEXT:    PAD
704 ; CM-NEXT:    ALU clause starting at 4:
705 ; CM-NEXT:     SETGT * T0.W, literal.x, KC0[3].X,
706 ; CM-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
707 ; CM-NEXT:     CNDE T0.Z, PV.W, 1.0, literal.x,
708 ; CM-NEXT:     SETGT * T1.W, literal.y, KC0[2].W,
709 ; CM-NEXT:    1333788672(4.294967e+09), 8388608(1.175494e-38)
710 ; CM-NEXT:     CNDE T1.Z, PV.W, 1.0, literal.x,
711 ; CM-NEXT:     MUL_IEEE * T2.W, KC0[3].X, PV.Z,
712 ; CM-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
713 ; CM-NEXT:     LOG_IEEE T0.X, T2.W,
714 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T2.W,
715 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T2.W,
716 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T2.W,
717 ; CM-NEXT:     AND_INT T0.Z, PV.X, literal.x,
718 ; CM-NEXT:     MUL_IEEE * T2.W, KC0[2].W, T1.Z,
719 ; CM-NEXT:    -4096(nan), 0(0.000000e+00)
720 ; CM-NEXT:     LOG_IEEE T0.X (MASKED), T2.W,
721 ; CM-NEXT:     LOG_IEEE T0.Y, T2.W,
722 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T2.W,
723 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T2.W,
724 ; CM-NEXT:     ADD T1.Z, T0.X, -T0.Z,
725 ; CM-NEXT:     AND_INT * T2.W, PV.Y, literal.x,
726 ; CM-NEXT:    -4096(nan), 0(0.000000e+00)
727 ; CM-NEXT:     ADD T2.Z, T0.Y, -PV.W,
728 ; CM-NEXT:     MUL_IEEE * T3.W, PV.Z, literal.x,
729 ; CM-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
730 ; CM-NEXT:     MULADD_IEEE T3.Z, T0.Z, literal.x, PV.W,
731 ; CM-NEXT:     MUL_IEEE * T3.W, PV.Z, literal.x,
732 ; CM-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
733 ; CM-NEXT:     MULADD_IEEE T4.Z, T2.W, literal.x, PV.W,
734 ; CM-NEXT:     MULADD_IEEE * T3.W, T1.Z, literal.y, PV.Z,
735 ; CM-NEXT:    939916788(3.194618e-05), 1060204544(6.931152e-01)
736 ; CM-NEXT:     MULADD_IEEE T1.Y, T0.Z, literal.x, PV.W,
737 ; CM-NEXT:     SETGT T0.Z, literal.y, |T0.X|,
738 ; CM-NEXT:     MULADD_IEEE * T3.W, T2.Z, literal.x, PV.Z, BS:VEC_120/SCL_212
739 ; CM-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
740 ; CM-NEXT:     MULADD_IEEE T1.X, T2.W, literal.x, PV.W,
741 ; CM-NEXT:     SETGT T2.Y, literal.y, |T0.Y|,
742 ; CM-NEXT:     CNDE T0.Z, PV.Z, T0.X, PV.Y,
743 ; CM-NEXT:     CNDE * T0.W, T0.W, 0.0, literal.z, BS:VEC_120/SCL_212
744 ; CM-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
745 ; CM-NEXT:    1102148120(2.218071e+01), 0(0.000000e+00)
746 ; CM-NEXT:     ADD T1.Y, PV.Z, -PV.W,
747 ; CM-NEXT:     CNDE T0.Z, PV.Y, T0.Y, PV.X,
748 ; CM-NEXT:     CNDE * T0.W, T1.W, 0.0, literal.x,
749 ; CM-NEXT:    1102148120(2.218071e+01), 0(0.000000e+00)
750 ; CM-NEXT:     ADD * T1.X, PV.Z, -PV.W,
751 ; CM-NEXT:     LSHR * T0.X, KC0[2].Y, literal.x,
752 ; CM-NEXT:    2(2.802597e-45), 0(0.000000e+00)
753   %result = call <2 x float> @llvm.log.v2f32(<2 x float> %in)
754   store <2 x float> %result, ptr addrspace(1) %out
755   ret void
758 define amdgpu_kernel void @s_log_v3f32(ptr addrspace(1) %out, <3 x float> %in) {
759 ; SI-SDAG-LABEL: s_log_v3f32:
760 ; SI-SDAG:       ; %bb.0:
761 ; SI-SDAG-NEXT:    s_load_dwordx4 s[8:11], s[0:1], 0xd
762 ; SI-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
763 ; SI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
764 ; SI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
765 ; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
766 ; SI-SDAG-NEXT:    s_mov_b32 s11, 0x3377d1cf
767 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s9, v0
768 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
769 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, s9, v1
770 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
771 ; SI-SDAG-NEXT:    s_mov_b32 s9, 0x3f317217
772 ; SI-SDAG-NEXT:    s_mov_b32 s12, 0x7f800000
773 ; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000
774 ; SI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v1
775 ; SI-SDAG-NEXT:    v_fma_f32 v4, v1, s9, -v3
776 ; SI-SDAG-NEXT:    v_fma_f32 v4, v1, s11, v4
777 ; SI-SDAG-NEXT:    v_add_f32_e32 v3, v3, v4
778 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v1|, s12
779 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s[0:1]
780 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s8, v0
781 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v3, 1.0, v2, s[0:1]
782 ; SI-SDAG-NEXT:    v_mul_f32_e32 v3, s8, v3
783 ; SI-SDAG-NEXT:    v_log_f32_e32 v3, v3
784 ; SI-SDAG-NEXT:    v_mov_b32_e32 v4, 0x41b17218
785 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v5, 0, v4, vcc
786 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s10, v0
787 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 1.0, v2, vcc
788 ; SI-SDAG-NEXT:    v_sub_f32_e32 v1, v1, v5
789 ; SI-SDAG-NEXT:    v_mul_f32_e32 v5, 0x3f317217, v3
790 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, s10, v0
791 ; SI-SDAG-NEXT:    v_fma_f32 v6, v3, s9, -v5
792 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v0
793 ; SI-SDAG-NEXT:    v_fma_f32 v6, v3, s11, v6
794 ; SI-SDAG-NEXT:    v_add_f32_e32 v5, v5, v6
795 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v3|, s12
796 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v3, v5, s[2:3]
797 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v3, 0, v4, s[0:1]
798 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v3
799 ; SI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v2
800 ; SI-SDAG-NEXT:    v_fma_f32 v5, v2, s9, -v3
801 ; SI-SDAG-NEXT:    v_fma_f32 v5, v2, s11, v5
802 ; SI-SDAG-NEXT:    v_add_f32_e32 v3, v3, v5
803 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, s12
804 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
805 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v3, 0, v4, vcc
806 ; SI-SDAG-NEXT:    s_mov_b32 s6, -1
807 ; SI-SDAG-NEXT:    v_sub_f32_e32 v2, v2, v3
808 ; SI-SDAG-NEXT:    buffer_store_dword v2, off, s[4:7], 0 offset:8
809 ; SI-SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
810 ; SI-SDAG-NEXT:    s_endpgm
812 ; SI-GISEL-LABEL: s_log_v3f32:
813 ; SI-GISEL:       ; %bb.0:
814 ; SI-GISEL-NEXT:    s_load_dwordx4 s[8:11], s[0:1], 0xd
815 ; SI-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
816 ; SI-GISEL-NEXT:    s_mov_b32 s0, 0x800000
817 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
818 ; SI-GISEL-NEXT:    s_mov_b32 s2, 0x3377d1cf
819 ; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
820 ; SI-GISEL-NEXT:    v_mov_b32_e32 v0, s8
821 ; SI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v0
822 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v2, vcc
823 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, s8, v0
824 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
825 ; SI-GISEL-NEXT:    s_mov_b32 s0, 0x3f317217
826 ; SI-GISEL-NEXT:    s_mov_b32 s3, 0x7f800000
827 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
828 ; SI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v0
829 ; SI-GISEL-NEXT:    v_fma_f32 v5, v0, s0, -v4
830 ; SI-GISEL-NEXT:    v_fma_f32 v5, v0, s2, v5
831 ; SI-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
832 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s3
833 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[0:1]
834 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s9, v1
835 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 1.0, v2, s[0:1]
836 ; SI-GISEL-NEXT:    v_mul_f32_e32 v4, s9, v4
837 ; SI-GISEL-NEXT:    v_log_f32_e32 v4, v4
838 ; SI-GISEL-NEXT:    v_mov_b32_e32 v7, 0x41b17218
839 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v7, vcc
840 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s10, v1
841 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
842 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3f317217
843 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v8
844 ; SI-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3f317217, v4
845 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, s10, v1
846 ; SI-GISEL-NEXT:    v_fma_f32 v9, v4, v3, -v8
847 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v1
848 ; SI-GISEL-NEXT:    v_fma_f32 v9, v4, s2, v9
849 ; SI-GISEL-NEXT:    v_add_f32_e32 v8, v8, v9
850 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v4|, s3
851 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v1, v4, v8, s[2:3]
852 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v7, s[0:1]
853 ; SI-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v4
854 ; SI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v2
855 ; SI-GISEL-NEXT:    v_mov_b32_e32 v6, 0x3377d1cf
856 ; SI-GISEL-NEXT:    v_fma_f32 v3, v2, v3, -v4
857 ; SI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x7f800000
858 ; SI-GISEL-NEXT:    v_fma_f32 v3, v2, v6, v3
859 ; SI-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
860 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, v5
861 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
862 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v3, 0, v7, vcc
863 ; SI-GISEL-NEXT:    s_mov_b32 s6, -1
864 ; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000
865 ; SI-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v3
866 ; SI-GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
867 ; SI-GISEL-NEXT:    buffer_store_dword v2, off, s[4:7], 0 offset:8
868 ; SI-GISEL-NEXT:    s_endpgm
870 ; VI-SDAG-LABEL: s_log_v3f32:
871 ; VI-SDAG:       ; %bb.0:
872 ; VI-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
873 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
874 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
875 ; VI-SDAG-NEXT:    s_mov_b32 s8, 0x7f800000
876 ; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
877 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
878 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v1, vcc
879 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, s6, v2
880 ; VI-SDAG-NEXT:    v_log_f32_e32 v2, v2
881 ; VI-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[0:1], 0x24
882 ; VI-SDAG-NEXT:    v_and_b32_e32 v3, 0xfffff000, v2
883 ; VI-SDAG-NEXT:    v_sub_f32_e32 v4, v2, v3
884 ; VI-SDAG-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v3
885 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, 0x3f317000, v4
886 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v4
887 ; VI-SDAG-NEXT:    v_add_f32_e32 v4, v5, v4
888 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
889 ; VI-SDAG-NEXT:    v_add_f32_e32 v4, v6, v4
890 ; VI-SDAG-NEXT:    v_add_f32_e32 v3, v3, v4
891 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, s8
892 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
893 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s5, v0
894 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v3, 1.0, v1, s[0:1]
895 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, s5, v3
896 ; VI-SDAG-NEXT:    v_log_f32_e32 v3, v3
897 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0x41b17218
898 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v5, 0, v4, vcc
899 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v2, v5
900 ; VI-SDAG-NEXT:    v_and_b32_e32 v5, 0xfffff000, v3
901 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
902 ; VI-SDAG-NEXT:    v_sub_f32_e32 v6, v3, v5
903 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
904 ; VI-SDAG-NEXT:    v_mul_f32_e32 v7, 0x3f317000, v6
905 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, 0x3805fdf4, v6
906 ; VI-SDAG-NEXT:    v_mul_f32_e32 v8, 0x3805fdf4, v5
907 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, s4, v0
908 ; VI-SDAG-NEXT:    v_add_f32_e32 v6, v8, v6
909 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
910 ; VI-SDAG-NEXT:    v_add_f32_e32 v6, v7, v6
911 ; VI-SDAG-NEXT:    v_mul_f32_e32 v5, 0x3f317000, v5
912 ; VI-SDAG-NEXT:    v_add_f32_e32 v5, v5, v6
913 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v3|, s8
914 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v1, v3, v5, s[2:3]
915 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v3, 0, v4, s[0:1]
916 ; VI-SDAG-NEXT:    v_sub_f32_e32 v1, v1, v3
917 ; VI-SDAG-NEXT:    v_and_b32_e32 v3, 0xfffff000, v0
918 ; VI-SDAG-NEXT:    v_sub_f32_e32 v5, v0, v3
919 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, 0x3f317000, v5
920 ; VI-SDAG-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v5
921 ; VI-SDAG-NEXT:    v_mul_f32_e32 v7, 0x3805fdf4, v3
922 ; VI-SDAG-NEXT:    v_add_f32_e32 v5, v7, v5
923 ; VI-SDAG-NEXT:    v_add_f32_e32 v5, v6, v5
924 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
925 ; VI-SDAG-NEXT:    v_add_f32_e32 v3, v3, v5
926 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s8
927 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v3, s[0:1]
928 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v3, 0, v4, vcc
929 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v3
930 ; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
931 ; VI-SDAG-NEXT:    v_mov_b32_e32 v3, s6
932 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, s7
933 ; VI-SDAG-NEXT:    flat_store_dwordx3 v[3:4], v[0:2]
934 ; VI-SDAG-NEXT:    s_endpgm
936 ; VI-GISEL-LABEL: s_log_v3f32:
937 ; VI-GISEL:       ; %bb.0:
938 ; VI-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
939 ; VI-GISEL-NEXT:    s_load_dwordx2 s[8:9], s[0:1], 0x24
940 ; VI-GISEL-NEXT:    s_mov_b32 s2, 0x800000
941 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
942 ; VI-GISEL-NEXT:    s_mov_b32 s0, 0x7f800000
943 ; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
944 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s4
945 ; VI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s2, v0
946 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
947 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, s4, v0
948 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
949 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x800000
950 ; VI-GISEL-NEXT:    v_and_b32_e32 v3, 0xfffff000, v0
951 ; VI-GISEL-NEXT:    v_sub_f32_e32 v4, v0, v3
952 ; VI-GISEL-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v3
953 ; VI-GISEL-NEXT:    v_mul_f32_e32 v6, 0x3805fdf4, v4
954 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3f317000, v4
955 ; VI-GISEL-NEXT:    v_add_f32_e32 v5, v5, v6
956 ; VI-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
957 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
958 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
959 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s0
960 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v3, s[0:1]
961 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s5, v2
962 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v3, 1.0, v1, s[0:1]
963 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, s5, v3
964 ; VI-GISEL-NEXT:    v_log_f32_e32 v3, v3
965 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x41b17218
966 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v6, 0, v5, vcc
967 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v6
968 ; VI-GISEL-NEXT:    v_and_b32_e32 v6, 0xfffff000, v3
969 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v2
970 ; VI-GISEL-NEXT:    v_sub_f32_e32 v7, v3, v6
971 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
972 ; VI-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3805fdf4, v7
973 ; VI-GISEL-NEXT:    v_mul_f32_e32 v9, 0x3805fdf4, v6
974 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, s6, v1
975 ; VI-GISEL-NEXT:    v_add_f32_e32 v8, v9, v8
976 ; VI-GISEL-NEXT:    v_mul_f32_e32 v7, 0x3f317000, v7
977 ; VI-GISEL-NEXT:    v_log_f32_e32 v2, v1
978 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x7f800000
979 ; VI-GISEL-NEXT:    v_add_f32_e32 v7, v7, v8
980 ; VI-GISEL-NEXT:    v_mul_f32_e32 v6, 0x3f317000, v6
981 ; VI-GISEL-NEXT:    v_add_f32_e32 v6, v6, v7
982 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v3|, v4
983 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v1, v3, v6, s[2:3]
984 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v3, 0, v5, s[0:1]
985 ; VI-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v3
986 ; VI-GISEL-NEXT:    v_and_b32_e32 v3, 0xfffff000, v2
987 ; VI-GISEL-NEXT:    v_sub_f32_e32 v6, v2, v3
988 ; VI-GISEL-NEXT:    v_mul_f32_e32 v7, 0x3805fdf4, v6
989 ; VI-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3805fdf4, v3
990 ; VI-GISEL-NEXT:    v_add_f32_e32 v7, v8, v7
991 ; VI-GISEL-NEXT:    v_mul_f32_e32 v6, 0x3f317000, v6
992 ; VI-GISEL-NEXT:    v_add_f32_e32 v6, v6, v7
993 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
994 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v6
995 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, v4
996 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
997 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v3, 0, v5, vcc
998 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v3
999 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, s8
1000 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, s9
1001 ; VI-GISEL-NEXT:    flat_store_dwordx3 v[3:4], v[0:2]
1002 ; VI-GISEL-NEXT:    s_endpgm
1004 ; GFX900-SDAG-LABEL: s_log_v3f32:
1005 ; GFX900-SDAG:       ; %bb.0:
1006 ; GFX900-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
1007 ; GFX900-SDAG-NEXT:    s_load_dwordx2 s[8:9], s[0:1], 0x24
1008 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
1009 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
1010 ; GFX900-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1011 ; GFX900-SDAG-NEXT:    s_mov_b32 s7, 0x3377d1cf
1012 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v0
1013 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v1, vcc
1014 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v2, s6, v2
1015 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v2, v2
1016 ; GFX900-SDAG-NEXT:    s_mov_b32 s6, 0x3f317217
1017 ; GFX900-SDAG-NEXT:    s_mov_b32 s10, 0x7f800000
1018 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v3, 0
1019 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v2
1020 ; GFX900-SDAG-NEXT:    v_fma_f32 v5, v2, s6, -v4
1021 ; GFX900-SDAG-NEXT:    v_fma_f32 v5, v2, s7, v5
1022 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v4, v4, v5
1023 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, s10
1024 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v2, v2, v4, s[0:1]
1025 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s5, v0
1026 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v4, 1.0, v1, s[0:1]
1027 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v4, s5, v4
1028 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v4, v4
1029 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v5, 0x41b17218
1030 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v6, 0, v5, vcc
1031 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
1032 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, 1.0, v1, vcc
1033 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v2, v2, v6
1034 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v6, 0x3f317217, v4
1035 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, s4, v0
1036 ; GFX900-SDAG-NEXT:    v_fma_f32 v7, v4, s6, -v6
1037 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
1038 ; GFX900-SDAG-NEXT:    v_fma_f32 v7, v4, s7, v7
1039 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v6, v6, v7
1040 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v4|, s10
1041 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v1, v4, v6, s[2:3]
1042 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, v5, s[0:1]
1043 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v1, v1, v4
1044 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v0
1045 ; GFX900-SDAG-NEXT:    v_fma_f32 v6, v0, s6, -v4
1046 ; GFX900-SDAG-NEXT:    v_fma_f32 v6, v0, s7, v6
1047 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v4, v4, v6
1048 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s10
1049 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[0:1]
1050 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v5, vcc
1051 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v4
1052 ; GFX900-SDAG-NEXT:    global_store_dwordx3 v3, v[0:2], s[8:9]
1053 ; GFX900-SDAG-NEXT:    s_endpgm
1055 ; GFX900-GISEL-LABEL: s_log_v3f32:
1056 ; GFX900-GISEL:       ; %bb.0:
1057 ; GFX900-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
1058 ; GFX900-GISEL-NEXT:    s_load_dwordx2 s[8:9], s[0:1], 0x24
1059 ; GFX900-GISEL-NEXT:    s_mov_b32 s0, 0x800000
1060 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1061 ; GFX900-GISEL-NEXT:    s_mov_b32 s2, 0x3377d1cf
1062 ; GFX900-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1063 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v0, s4
1064 ; GFX900-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v0
1065 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v2, vcc
1066 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, s4, v0
1067 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
1068 ; GFX900-GISEL-NEXT:    s_mov_b32 s0, 0x3f317217
1069 ; GFX900-GISEL-NEXT:    s_mov_b32 s3, 0x7f800000
1070 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
1071 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v0
1072 ; GFX900-GISEL-NEXT:    v_fma_f32 v5, v0, s0, -v4
1073 ; GFX900-GISEL-NEXT:    v_fma_f32 v5, v0, s2, v5
1074 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
1075 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s3
1076 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[0:1]
1077 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s5, v1
1078 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v4, 1.0, v2, s[0:1]
1079 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v4, s5, v4
1080 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v4, v4
1081 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v7, 0x41b17218
1082 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v7, vcc
1083 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v1
1084 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
1085 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3f317217
1086 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v8
1087 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3f317217, v4
1088 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, s6, v1
1089 ; GFX900-GISEL-NEXT:    v_fma_f32 v9, v4, v3, -v8
1090 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v2, v1
1091 ; GFX900-GISEL-NEXT:    v_fma_f32 v9, v4, s2, v9
1092 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v8, v8, v9
1093 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v4|, s3
1094 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v1, v4, v8, s[2:3]
1095 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v7, s[0:1]
1096 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v4
1097 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v2
1098 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v6, 0x3377d1cf
1099 ; GFX900-GISEL-NEXT:    v_fma_f32 v3, v2, v3, -v4
1100 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v5, 0x7f800000
1101 ; GFX900-GISEL-NEXT:    v_fma_f32 v3, v2, v6, v3
1102 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
1103 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, v5
1104 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
1105 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v3, 0, v7, vcc
1106 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v3
1107 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0
1108 ; GFX900-GISEL-NEXT:    global_store_dwordx3 v3, v[0:2], s[8:9]
1109 ; GFX900-GISEL-NEXT:    s_endpgm
1111 ; GFX1100-SDAG-LABEL: s_log_v3f32:
1112 ; GFX1100-SDAG:       ; %bb.0:
1113 ; GFX1100-SDAG-NEXT:    s_clause 0x1
1114 ; GFX1100-SDAG-NEXT:    s_load_b128 s[4:7], s[0:1], 0x34
1115 ; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1116 ; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1117 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s2, 0x800000, s6
1118 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s5
1119 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s7, 0x800000, s4
1120 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1121 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s2
1122 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s3
1123 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
1124 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s7
1125 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v9, 0, 0x41b17218, s2
1126 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v10, 0, 0x41b17218, s3
1127 ; GFX1100-SDAG-NEXT:    v_dual_mul_f32 v0, s6, v0 :: v_dual_mul_f32 v1, s5, v1
1128 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1129 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1130 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v2, s4, v2
1131 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v1, v1
1132 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1133 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
1134 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v2, v2
1135 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v1
1136 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
1137 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_3)
1138 ; GFX1100-SDAG-NEXT:    v_fma_f32 v6, 0x3f317217, v0, -v3
1139 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1140 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v5, 0x3f317217, v2
1141 ; GFX1100-SDAG-NEXT:    v_fma_f32 v7, 0x3f317217, v1, -v4
1142 ; GFX1100-SDAG-NEXT:    v_fmac_f32_e32 v6, 0x3377d1cf, v0
1143 ; GFX1100-SDAG-NEXT:    v_fma_f32 v8, 0x3f317217, v2, -v5
1144 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1145 ; GFX1100-SDAG-NEXT:    v_fmac_f32_e32 v7, 0x3377d1cf, v1
1146 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v3, v3, v6
1147 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v6, 0, 0x41b17218, s7
1148 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1149 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v4, v4, v7
1150 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc_lo
1151 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1|
1152 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
1153 ; GFX1100-SDAG-NEXT:    v_dual_fmac_f32 v8, 0x3377d1cf, v2 :: v_dual_cndmask_b32 v1, v1, v4
1154 ; GFX1100-SDAG-NEXT:    v_dual_add_f32 v5, v5, v8 :: v_dual_mov_b32 v4, 0
1155 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v2|
1156 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1157 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v1, v1, v10
1158 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v3, v2, v5, vcc_lo
1159 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v9
1160 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1161 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v3, v6
1162 ; GFX1100-SDAG-NEXT:    global_store_b96 v4, v[0:2], s[0:1]
1163 ; GFX1100-SDAG-NEXT:    s_nop 0
1164 ; GFX1100-SDAG-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1165 ; GFX1100-SDAG-NEXT:    s_endpgm
1167 ; GFX1100-GISEL-LABEL: s_log_v3f32:
1168 ; GFX1100-GISEL:       ; %bb.0:
1169 ; GFX1100-GISEL-NEXT:    s_clause 0x1
1170 ; GFX1100-GISEL-NEXT:    s_load_b128 s[4:7], s[0:1], 0x34
1171 ; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1172 ; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1173 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s2, 0x800000, s4
1174 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s5
1175 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s7, 0x800000, s6
1176 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1177 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s2
1178 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s3
1179 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
1180 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s7
1181 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v10, 0, 0x41b17218, s3
1182 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, 0x41b17218, s2
1183 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v0, s4, v0 :: v_dual_mul_f32 v1, s5, v1
1184 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1185 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1186 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v2, s6, v2
1187 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v1
1188 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1189 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
1190 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v2, v2
1191 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v1
1192 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
1193 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_3)
1194 ; GFX1100-GISEL-NEXT:    v_fma_f32 v6, v0, 0x3f317217, -v3
1195 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1196 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v5, 0x3f317217, v2
1197 ; GFX1100-GISEL-NEXT:    v_fma_f32 v7, 0x3f317217, v1, -v4
1198 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v6, 0x3377d1cf, v0
1199 ; GFX1100-GISEL-NEXT:    v_fma_f32 v8, 0x3f317217, v2, -v5
1200 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1201 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v7, 0x3377d1cf, v1
1202 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v3, v3, v6
1203 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, 0x41b17218, s7
1204 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1205 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v4, v4, v7
1206 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc_lo
1207 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1|
1208 ; GFX1100-GISEL-NEXT:    v_dual_fmac_f32 v8, 0x3377d1cf, v2 :: v_dual_mov_b32 v3, 0
1209 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1210 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
1211 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v2|
1212 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v10
1213 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
1214 ; GFX1100-GISEL-NEXT:    v_dual_add_f32 v5, v5, v8 :: v_dual_sub_f32 v0, v0, v9
1215 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v2, v2, v5, vcc_lo
1216 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1217 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v6
1218 ; GFX1100-GISEL-NEXT:    global_store_b96 v3, v[0:2], s[0:1]
1219 ; GFX1100-GISEL-NEXT:    s_nop 0
1220 ; GFX1100-GISEL-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1221 ; GFX1100-GISEL-NEXT:    s_endpgm
1223 ; R600-LABEL: s_log_v3f32:
1224 ; R600:       ; %bb.0:
1225 ; R600-NEXT:    ALU 62, @4, KC0[CB0:0-32], KC1[]
1226 ; R600-NEXT:    MEM_RAT_CACHELESS STORE_RAW T2.X, T3.X, 0
1227 ; R600-NEXT:    MEM_RAT_CACHELESS STORE_RAW T1.XY, T0.X, 1
1228 ; R600-NEXT:    CF_END
1229 ; R600-NEXT:    ALU clause starting at 4:
1230 ; R600-NEXT:     SETGT T0.W, literal.x, KC0[3].Z,
1231 ; R600-NEXT:     SETGT * T1.W, literal.x, KC0[3].Y,
1232 ; R600-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
1233 ; R600-NEXT:     CNDE * T2.W, PV.W, 1.0, literal.x,
1234 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
1235 ; R600-NEXT:     MUL_IEEE T2.W, KC0[3].Z, PV.W,
1236 ; R600-NEXT:     CNDE * T3.W, T1.W, 1.0, literal.x,
1237 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
1238 ; R600-NEXT:     MUL_IEEE T0.Z, KC0[3].Y, PS,
1239 ; R600-NEXT:     SETGT T3.W, literal.x, KC0[3].W,
1240 ; R600-NEXT:     LOG_IEEE * T0.X, PV.W,
1241 ; R600-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
1242 ; R600-NEXT:     AND_INT T1.Z, PS, literal.x,
1243 ; R600-NEXT:     CNDE T2.W, PV.W, 1.0, literal.y,
1244 ; R600-NEXT:     LOG_IEEE * T0.Y, PV.Z,
1245 ; R600-NEXT:    -4096(nan), 1333788672(4.294967e+09)
1246 ; R600-NEXT:     MUL_IEEE T0.Z, KC0[3].W, PV.W,
1247 ; R600-NEXT:     ADD T2.W, T0.X, -PV.Z,
1248 ; R600-NEXT:     AND_INT * T4.W, PS, literal.x,
1249 ; R600-NEXT:    -4096(nan), 0(0.000000e+00)
1250 ; R600-NEXT:     ADD T2.Z, T0.Y, -PS,
1251 ; R600-NEXT:     MUL_IEEE T5.W, PV.W, literal.x,
1252 ; R600-NEXT:     LOG_IEEE * T0.Z, PV.Z,
1253 ; R600-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
1254 ; R600-NEXT:     MULADD_IEEE T3.Z, T1.Z, literal.x, PV.W,
1255 ; R600-NEXT:     AND_INT T5.W, PS, literal.y,
1256 ; R600-NEXT:     MUL_IEEE * T6.W, PV.Z, literal.x,
1257 ; R600-NEXT:    939916788(3.194618e-05), -4096(nan)
1258 ; R600-NEXT:     MULADD_IEEE T4.Z, T4.W, literal.x, PS,
1259 ; R600-NEXT:     ADD T6.W, T0.Z, -PV.W,
1260 ; R600-NEXT:     MULADD_IEEE * T2.W, T2.W, literal.y, PV.Z, BS:VEC_021/SCL_122
1261 ; R600-NEXT:    939916788(3.194618e-05), 1060204544(6.931152e-01)
1262 ; R600-NEXT:     MULADD_IEEE T1.Y, T1.Z, literal.x, PS,
1263 ; R600-NEXT:     SETGT T1.Z, literal.y, |T0.X|,
1264 ; R600-NEXT:     MUL_IEEE T2.W, PV.W, literal.z,
1265 ; R600-NEXT:     MULADD_IEEE * T7.W, T2.Z, literal.x, PV.Z, BS:VEC_021/SCL_122
1266 ; R600-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
1267 ; R600-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
1268 ; R600-NEXT:     MULADD_IEEE T1.X, T4.W, literal.x, PS,
1269 ; R600-NEXT:     SETGT T2.Y, literal.y, |T0.Y|,
1270 ; R600-NEXT:     MULADD_IEEE T2.Z, T5.W, literal.z, PV.W, BS:VEC_120/SCL_212
1271 ; R600-NEXT:     CNDE T2.W, PV.Z, T0.X, PV.Y,
1272 ; R600-NEXT:     CNDE * T0.W, T0.W, 0.0, literal.w,
1273 ; R600-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
1274 ; R600-NEXT:    939916788(3.194618e-05), 1102148120(2.218071e+01)
1275 ; R600-NEXT:     ADD T1.Y, PV.W, -PS,
1276 ; R600-NEXT:     MULADD_IEEE T1.Z, T6.W, literal.x, PV.Z,
1277 ; R600-NEXT:     CNDE T0.W, PV.Y, T0.Y, PV.X,
1278 ; R600-NEXT:     CNDE * T1.W, T1.W, 0.0, literal.y,
1279 ; R600-NEXT:    1060204544(6.931152e-01), 1102148120(2.218071e+01)
1280 ; R600-NEXT:     ADD T1.X, PV.W, -PS,
1281 ; R600-NEXT:     MULADD_IEEE T0.W, T5.W, literal.x, PV.Z,
1282 ; R600-NEXT:     SETGT * T1.W, literal.y, |T0.Z|,
1283 ; R600-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
1284 ; R600-NEXT:     LSHR T0.X, KC0[2].Y, literal.x,
1285 ; R600-NEXT:     CNDE T0.W, PS, T0.Z, PV.W,
1286 ; R600-NEXT:     CNDE * T1.W, T3.W, 0.0, literal.y,
1287 ; R600-NEXT:    2(2.802597e-45), 1102148120(2.218071e+01)
1288 ; R600-NEXT:     ADD T2.X, PV.W, -PS,
1289 ; R600-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
1290 ; R600-NEXT:    8(1.121039e-44), 0(0.000000e+00)
1291 ; R600-NEXT:     LSHR * T3.X, PV.W, literal.x,
1292 ; R600-NEXT:    2(2.802597e-45), 0(0.000000e+00)
1294 ; CM-LABEL: s_log_v3f32:
1295 ; CM:       ; %bb.0:
1296 ; CM-NEXT:    ALU 68, @4, KC0[CB0:0-32], KC1[]
1297 ; CM-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T0, T2.X
1298 ; CM-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T4.X, T1.X
1299 ; CM-NEXT:    CF_END
1300 ; CM-NEXT:    ALU clause starting at 4:
1301 ; CM-NEXT:     SETGT * T0.W, literal.x, KC0[3].Y,
1302 ; CM-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
1303 ; CM-NEXT:     CNDE T0.Z, PV.W, 1.0, literal.x,
1304 ; CM-NEXT:     SETGT * T1.W, literal.y, KC0[3].W,
1305 ; CM-NEXT:    1333788672(4.294967e+09), 8388608(1.175494e-38)
1306 ; CM-NEXT:     CNDE T0.Y, PV.W, 1.0, literal.x,
1307 ; CM-NEXT:     SETGT T1.Z, literal.y, KC0[3].Z,
1308 ; CM-NEXT:     MUL_IEEE * T2.W, KC0[3].Y, PV.Z,
1309 ; CM-NEXT:    1333788672(4.294967e+09), 8388608(1.175494e-38)
1310 ; CM-NEXT:     LOG_IEEE T0.X, T2.W,
1311 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T2.W,
1312 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T2.W,
1313 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T2.W,
1314 ; CM-NEXT:     CNDE T1.Y, T1.Z, 1.0, literal.x,
1315 ; CM-NEXT:     AND_INT T0.Z, PV.X, literal.y,
1316 ; CM-NEXT:     MUL_IEEE * T2.W, KC0[3].W, T0.Y,
1317 ; CM-NEXT:    1333788672(4.294967e+09), -4096(nan)
1318 ; CM-NEXT:     LOG_IEEE T0.X (MASKED), T2.W,
1319 ; CM-NEXT:     LOG_IEEE T0.Y, T2.W,
1320 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T2.W,
1321 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T2.W,
1322 ; CM-NEXT:     ADD T2.Y, T0.X, -T0.Z,
1323 ; CM-NEXT:     AND_INT T2.Z, PV.Y, literal.x,
1324 ; CM-NEXT:     MUL_IEEE * T2.W, KC0[3].Z, T1.Y,
1325 ; CM-NEXT:    -4096(nan), 0(0.000000e+00)
1326 ; CM-NEXT:     LOG_IEEE T1.X, T2.W,
1327 ; CM-NEXT:     LOG_IEEE T1.Y (MASKED), T2.W,
1328 ; CM-NEXT:     LOG_IEEE T1.Z (MASKED), T2.W,
1329 ; CM-NEXT:     LOG_IEEE * T1.W (MASKED), T2.W,
1330 ; CM-NEXT:     ADD T1.Y, T0.Y, -T2.Z,
1331 ; CM-NEXT:     AND_INT T3.Z, PV.X, literal.x,
1332 ; CM-NEXT:     MUL_IEEE * T2.W, T2.Y, literal.y, BS:VEC_120/SCL_212
1333 ; CM-NEXT:    -4096(nan), 939916788(3.194618e-05)
1334 ; CM-NEXT:     MULADD_IEEE T3.Y, T0.Z, literal.x, PV.W,
1335 ; CM-NEXT:     ADD T4.Z, T1.X, -PV.Z,
1336 ; CM-NEXT:     MUL_IEEE * T2.W, PV.Y, literal.x,
1337 ; CM-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
1338 ; CM-NEXT:     MULADD_IEEE T4.Y, T2.Z, literal.x, PV.W,
1339 ; CM-NEXT:     MUL_IEEE T5.Z, PV.Z, literal.x,
1340 ; CM-NEXT:     MULADD_IEEE * T2.W, T2.Y, literal.y, PV.Y,
1341 ; CM-NEXT:    939916788(3.194618e-05), 1060204544(6.931152e-01)
1342 ; CM-NEXT:     MULADD_IEEE T2.Y, T0.Z, literal.x, PV.W,
1343 ; CM-NEXT:     MULADD_IEEE T0.Z, T3.Z, literal.y, PV.Z, BS:VEC_120/SCL_212
1344 ; CM-NEXT:     MULADD_IEEE * T2.W, T1.Y, literal.x, PV.Y,
1345 ; CM-NEXT:    1060204544(6.931152e-01), 939916788(3.194618e-05)
1346 ; CM-NEXT:     SETGT T2.X, literal.x, |T0.X|,
1347 ; CM-NEXT:     MULADD_IEEE T1.Y, T2.Z, literal.y, PV.W,
1348 ; CM-NEXT:     SETGT T2.Z, literal.x, |T0.Y|,
1349 ; CM-NEXT:     MULADD_IEEE * T2.W, T4.Z, literal.y, PV.Z, BS:VEC_120/SCL_212
1350 ; CM-NEXT:    2139095040(INF), 1060204544(6.931152e-01)
1351 ; CM-NEXT:     MULADD_IEEE T3.X, T3.Z, literal.x, PV.W,
1352 ; CM-NEXT:     SETGT T3.Y, literal.y, |T1.X|,
1353 ; CM-NEXT:     CNDE T0.Z, PV.Z, T0.Y, PV.Y,
1354 ; CM-NEXT:     CNDE * T1.W, T1.W, 0.0, literal.z,
1355 ; CM-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
1356 ; CM-NEXT:    1102148120(2.218071e+01), 0(0.000000e+00)
1357 ; CM-NEXT:     ADD T4.X, PV.Z, -PV.W,
1358 ; CM-NEXT:     CNDE T0.Y, PV.Y, T1.X, PV.X,
1359 ; CM-NEXT:     CNDE T0.Z, T1.Z, 0.0, literal.x,
1360 ; CM-NEXT:     ADD_INT * T1.W, KC0[2].Y, literal.y,
1361 ; CM-NEXT:    1102148120(2.218071e+01), 8(1.121039e-44)
1362 ; CM-NEXT:     LSHR T1.X, PV.W, literal.x,
1363 ; CM-NEXT:     ADD T0.Y, PV.Y, -PV.Z,
1364 ; CM-NEXT:     CNDE T0.Z, T2.X, T0.X, T2.Y,
1365 ; CM-NEXT:     CNDE * T0.W, T0.W, 0.0, literal.y,
1366 ; CM-NEXT:    2(2.802597e-45), 1102148120(2.218071e+01)
1367 ; CM-NEXT:     ADD * T0.X, PV.Z, -PV.W,
1368 ; CM-NEXT:     LSHR * T2.X, KC0[2].Y, literal.x,
1369 ; CM-NEXT:    2(2.802597e-45), 0(0.000000e+00)
1370   %result = call <3 x float> @llvm.log.v3f32(<3 x float> %in)
1371   store <3 x float> %result, ptr addrspace(1) %out
1372   ret void
1375 ; FIXME: We should be able to merge these packets together on Cayman so we
1376 ; have a maximum of 4 instructions.
1377 define amdgpu_kernel void @s_log_v4f32(ptr addrspace(1) %out, <4 x float> %in) {
1378 ; SI-SDAG-LABEL: s_log_v4f32:
1379 ; SI-SDAG:       ; %bb.0:
1380 ; SI-SDAG-NEXT:    s_load_dwordx4 s[8:11], s[0:1], 0xd
1381 ; SI-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
1382 ; SI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
1383 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
1384 ; SI-SDAG-NEXT:    s_mov_b32 s12, 0x3377d1cf
1385 ; SI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1386 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s11, v0
1387 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v1, vcc
1388 ; SI-SDAG-NEXT:    v_mul_f32_e32 v2, s11, v2
1389 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v2
1390 ; SI-SDAG-NEXT:    s_mov_b32 s11, 0x3f317217
1391 ; SI-SDAG-NEXT:    s_mov_b32 s13, 0x7f800000
1392 ; SI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x41b17218
1393 ; SI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v2
1394 ; SI-SDAG-NEXT:    v_fma_f32 v4, v2, s11, -v3
1395 ; SI-SDAG-NEXT:    v_fma_f32 v4, v2, s12, v4
1396 ; SI-SDAG-NEXT:    v_add_f32_e32 v3, v3, v4
1397 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, s13
1398 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
1399 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s10, v0
1400 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v3, 1.0, v1, s[0:1]
1401 ; SI-SDAG-NEXT:    v_mul_f32_e32 v3, s10, v3
1402 ; SI-SDAG-NEXT:    v_log_f32_e32 v4, v3
1403 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v3, 0, v5, vcc
1404 ; SI-SDAG-NEXT:    v_sub_f32_e32 v3, v2, v3
1405 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s9, v0
1406 ; SI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317217, v4
1407 ; SI-SDAG-NEXT:    v_fma_f32 v6, v4, s11, -v2
1408 ; SI-SDAG-NEXT:    v_fma_f32 v6, v4, s12, v6
1409 ; SI-SDAG-NEXT:    v_add_f32_e32 v2, v2, v6
1410 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 1.0, v1, vcc
1411 ; SI-SDAG-NEXT:    v_mul_f32_e32 v6, s9, v6
1412 ; SI-SDAG-NEXT:    v_log_f32_e32 v6, v6
1413 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v4|, s13
1414 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v4, v2, s[2:3]
1415 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, v5, s[0:1]
1416 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s8, v0
1417 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, 1.0, v1, s[0:1]
1418 ; SI-SDAG-NEXT:    v_sub_f32_e32 v2, v2, v4
1419 ; SI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v6
1420 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, s8, v0
1421 ; SI-SDAG-NEXT:    v_fma_f32 v7, v6, s11, -v4
1422 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
1423 ; SI-SDAG-NEXT:    v_fma_f32 v7, v6, s12, v7
1424 ; SI-SDAG-NEXT:    v_add_f32_e32 v4, v4, v7
1425 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v6|, s13
1426 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v1, v6, v4, s[2:3]
1427 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v5, vcc
1428 ; SI-SDAG-NEXT:    v_sub_f32_e32 v1, v1, v4
1429 ; SI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3f317217, v0
1430 ; SI-SDAG-NEXT:    v_fma_f32 v6, v0, s11, -v4
1431 ; SI-SDAG-NEXT:    v_fma_f32 v6, v0, s12, v6
1432 ; SI-SDAG-NEXT:    v_add_f32_e32 v4, v4, v6
1433 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s13
1434 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc
1435 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, v5, s[0:1]
1436 ; SI-SDAG-NEXT:    s_mov_b32 s7, 0xf000
1437 ; SI-SDAG-NEXT:    s_mov_b32 s6, -1
1438 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v4
1439 ; SI-SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0
1440 ; SI-SDAG-NEXT:    s_endpgm
1442 ; SI-GISEL-LABEL: s_log_v4f32:
1443 ; SI-GISEL:       ; %bb.0:
1444 ; SI-GISEL-NEXT:    s_load_dwordx4 s[8:11], s[0:1], 0xd
1445 ; SI-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
1446 ; SI-GISEL-NEXT:    s_mov_b32 s0, 0x800000
1447 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x4f800000
1448 ; SI-GISEL-NEXT:    s_mov_b32 s2, 0x3377d1cf
1449 ; SI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1450 ; SI-GISEL-NEXT:    v_mov_b32_e32 v0, s8
1451 ; SI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v0
1452 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v3, vcc
1453 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, s8, v0
1454 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
1455 ; SI-GISEL-NEXT:    s_mov_b32 s0, 0x3f317217
1456 ; SI-GISEL-NEXT:    s_mov_b32 s3, 0x7f800000
1457 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x800000
1458 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
1459 ; SI-GISEL-NEXT:    v_fma_f32 v5, v0, s0, -v1
1460 ; SI-GISEL-NEXT:    v_fma_f32 v5, v0, s2, v5
1461 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v5
1462 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s3
1463 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[0:1]
1464 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s9, v2
1465 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, v3, s[0:1]
1466 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, s9, v1
1467 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
1468 ; SI-GISEL-NEXT:    v_mov_b32_e32 v7, 0x41b17218
1469 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v7, vcc
1470 ; SI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x3f317217
1471 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v8
1472 ; SI-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3f317217, v1
1473 ; SI-GISEL-NEXT:    v_fma_f32 v9, v1, v4, -v8
1474 ; SI-GISEL-NEXT:    v_fma_f32 v9, v1, s2, v9
1475 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s10, v2
1476 ; SI-GISEL-NEXT:    v_add_f32_e32 v8, v8, v9
1477 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v9, 1.0, v3, vcc
1478 ; SI-GISEL-NEXT:    v_mul_f32_e32 v9, s10, v9
1479 ; SI-GISEL-NEXT:    v_log_f32_e32 v9, v9
1480 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v1|, s3
1481 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v1, v1, v8, s[2:3]
1482 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, v7, s[0:1]
1483 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s11, v2
1484 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 1.0, v3, s[0:1]
1485 ; SI-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v8
1486 ; SI-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3f317217, v9
1487 ; SI-GISEL-NEXT:    v_mul_f32_e32 v2, s11, v2
1488 ; SI-GISEL-NEXT:    v_mov_b32_e32 v6, 0x3377d1cf
1489 ; SI-GISEL-NEXT:    v_fma_f32 v10, v9, v4, -v8
1490 ; SI-GISEL-NEXT:    v_log_f32_e32 v3, v2
1491 ; SI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x7f800000
1492 ; SI-GISEL-NEXT:    v_fma_f32 v10, v9, v6, v10
1493 ; SI-GISEL-NEXT:    v_add_f32_e32 v8, v8, v10
1494 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v9|, v5
1495 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v2, v9, v8, s[2:3]
1496 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v7, vcc
1497 ; SI-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v8
1498 ; SI-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3f317217, v3
1499 ; SI-GISEL-NEXT:    v_fma_f32 v4, v3, v4, -v8
1500 ; SI-GISEL-NEXT:    v_fma_f32 v4, v3, v6, v4
1501 ; SI-GISEL-NEXT:    v_add_f32_e32 v4, v8, v4
1502 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v3|, v5
1503 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1504 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v7, s[0:1]
1505 ; SI-GISEL-NEXT:    v_sub_f32_e32 v3, v3, v4
1506 ; SI-GISEL-NEXT:    s_mov_b32 s6, -1
1507 ; SI-GISEL-NEXT:    s_mov_b32 s7, 0xf000
1508 ; SI-GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0
1509 ; SI-GISEL-NEXT:    s_endpgm
1511 ; VI-SDAG-LABEL: s_log_v4f32:
1512 ; VI-SDAG:       ; %bb.0:
1513 ; VI-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
1514 ; VI-SDAG-NEXT:    s_load_dwordx2 s[8:9], s[0:1], 0x24
1515 ; VI-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
1516 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
1517 ; VI-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1518 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v0
1519 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v1, vcc
1520 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, s7, v2
1521 ; VI-SDAG-NEXT:    v_log_f32_e32 v2, v2
1522 ; VI-SDAG-NEXT:    s_mov_b32 s7, 0x7f800000
1523 ; VI-SDAG-NEXT:    v_and_b32_e32 v3, 0xfffff000, v2
1524 ; VI-SDAG-NEXT:    v_sub_f32_e32 v4, v2, v3
1525 ; VI-SDAG-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v3
1526 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, 0x3f317000, v4
1527 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v4
1528 ; VI-SDAG-NEXT:    v_add_f32_e32 v4, v5, v4
1529 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
1530 ; VI-SDAG-NEXT:    v_add_f32_e32 v4, v6, v4
1531 ; VI-SDAG-NEXT:    v_add_f32_e32 v3, v3, v4
1532 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, s7
1533 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
1534 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s6, v0
1535 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v3, 1.0, v1, s[0:1]
1536 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, s6, v3
1537 ; VI-SDAG-NEXT:    v_log_f32_e32 v4, v3
1538 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, 0x41b17218
1539 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v3, 0, v5, vcc
1540 ; VI-SDAG-NEXT:    v_sub_f32_e32 v3, v2, v3
1541 ; VI-SDAG-NEXT:    v_and_b32_e32 v2, 0xfffff000, v4
1542 ; VI-SDAG-NEXT:    v_sub_f32_e32 v6, v4, v2
1543 ; VI-SDAG-NEXT:    v_mul_f32_e32 v7, 0x3f317000, v6
1544 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, 0x3805fdf4, v6
1545 ; VI-SDAG-NEXT:    v_mul_f32_e32 v8, 0x3805fdf4, v2
1546 ; VI-SDAG-NEXT:    v_add_f32_e32 v6, v8, v6
1547 ; VI-SDAG-NEXT:    v_add_f32_e32 v6, v7, v6
1548 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
1549 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s5, v0
1550 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v2, v6
1551 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v6, 1.0, v1, vcc
1552 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, s5, v6
1553 ; VI-SDAG-NEXT:    v_log_f32_e32 v6, v6
1554 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v4|, s7
1555 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v2, v4, v2, s[2:3]
1556 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, v5, s[0:1]
1557 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v2, v4
1558 ; VI-SDAG-NEXT:    v_and_b32_e32 v4, 0xfffff000, v6
1559 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s4, v0
1560 ; VI-SDAG-NEXT:    v_sub_f32_e32 v7, v6, v4
1561 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, 1.0, v1, s[0:1]
1562 ; VI-SDAG-NEXT:    v_mul_f32_e32 v8, 0x3f317000, v7
1563 ; VI-SDAG-NEXT:    v_mul_f32_e32 v7, 0x3805fdf4, v7
1564 ; VI-SDAG-NEXT:    v_mul_f32_e32 v9, 0x3805fdf4, v4
1565 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, s4, v0
1566 ; VI-SDAG-NEXT:    v_add_f32_e32 v7, v9, v7
1567 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
1568 ; VI-SDAG-NEXT:    v_add_f32_e32 v7, v8, v7
1569 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3f317000, v4
1570 ; VI-SDAG-NEXT:    v_add_f32_e32 v4, v4, v7
1571 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v6|, s7
1572 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v1, v6, v4, s[2:3]
1573 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v5, vcc
1574 ; VI-SDAG-NEXT:    v_sub_f32_e32 v1, v1, v4
1575 ; VI-SDAG-NEXT:    v_and_b32_e32 v4, 0xfffff000, v0
1576 ; VI-SDAG-NEXT:    v_sub_f32_e32 v6, v0, v4
1577 ; VI-SDAG-NEXT:    v_mul_f32_e32 v7, 0x3f317000, v6
1578 ; VI-SDAG-NEXT:    v_mul_f32_e32 v6, 0x3805fdf4, v6
1579 ; VI-SDAG-NEXT:    v_mul_f32_e32 v8, 0x3805fdf4, v4
1580 ; VI-SDAG-NEXT:    v_add_f32_e32 v6, v8, v6
1581 ; VI-SDAG-NEXT:    v_add_f32_e32 v6, v7, v6
1582 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3f317000, v4
1583 ; VI-SDAG-NEXT:    v_add_f32_e32 v4, v4, v6
1584 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s7
1585 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc
1586 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, v5, s[0:1]
1587 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v4
1588 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, s8
1589 ; VI-SDAG-NEXT:    v_mov_b32_e32 v5, s9
1590 ; VI-SDAG-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1591 ; VI-SDAG-NEXT:    s_endpgm
1593 ; VI-GISEL-LABEL: s_log_v4f32:
1594 ; VI-GISEL:       ; %bb.0:
1595 ; VI-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
1596 ; VI-GISEL-NEXT:    s_load_dwordx2 s[8:9], s[0:1], 0x24
1597 ; VI-GISEL-NEXT:    s_mov_b32 s2, 0x800000
1598 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
1599 ; VI-GISEL-NEXT:    s_mov_b32 s0, 0x7f800000
1600 ; VI-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1601 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, s4
1602 ; VI-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s2, v0
1603 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v2, vcc
1604 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, s4, v0
1605 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
1606 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x800000
1607 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
1608 ; VI-GISEL-NEXT:    v_sub_f32_e32 v4, v0, v1
1609 ; VI-GISEL-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v1
1610 ; VI-GISEL-NEXT:    v_mul_f32_e32 v6, 0x3805fdf4, v4
1611 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3f317000, v4
1612 ; VI-GISEL-NEXT:    v_add_f32_e32 v5, v5, v6
1613 ; VI-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
1614 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
1615 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v4
1616 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s0
1617 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[0:1]
1618 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s5, v3
1619 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, v2, s[0:1]
1620 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, s5, v1
1621 ; VI-GISEL-NEXT:    v_log_f32_e32 v1, v1
1622 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, 0x41b17218
1623 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v6, 0, v5, vcc
1624 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v6
1625 ; VI-GISEL-NEXT:    v_and_b32_e32 v6, 0xfffff000, v1
1626 ; VI-GISEL-NEXT:    v_sub_f32_e32 v7, v1, v6
1627 ; VI-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3805fdf4, v7
1628 ; VI-GISEL-NEXT:    v_mul_f32_e32 v9, 0x3805fdf4, v6
1629 ; VI-GISEL-NEXT:    v_add_f32_e32 v8, v9, v8
1630 ; VI-GISEL-NEXT:    v_mul_f32_e32 v7, 0x3f317000, v7
1631 ; VI-GISEL-NEXT:    v_add_f32_e32 v7, v7, v8
1632 ; VI-GISEL-NEXT:    v_mul_f32_e32 v6, 0x3f317000, v6
1633 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v3
1634 ; VI-GISEL-NEXT:    v_add_f32_e32 v6, v6, v7
1635 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v7, 1.0, v2, vcc
1636 ; VI-GISEL-NEXT:    v_mul_f32_e32 v7, s6, v7
1637 ; VI-GISEL-NEXT:    v_log_f32_e32 v7, v7
1638 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x7f800000
1639 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v1|, v4
1640 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[2:3]
1641 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v6, 0, v5, s[0:1]
1642 ; VI-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v6
1643 ; VI-GISEL-NEXT:    v_and_b32_e32 v6, 0xfffff000, v7
1644 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s7, v3
1645 ; VI-GISEL-NEXT:    v_sub_f32_e32 v8, v7, v6
1646 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, 1.0, v2, s[0:1]
1647 ; VI-GISEL-NEXT:    v_mul_f32_e32 v9, 0x3805fdf4, v8
1648 ; VI-GISEL-NEXT:    v_mul_f32_e32 v10, 0x3805fdf4, v6
1649 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, s7, v2
1650 ; VI-GISEL-NEXT:    v_add_f32_e32 v9, v10, v9
1651 ; VI-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3f317000, v8
1652 ; VI-GISEL-NEXT:    v_log_f32_e32 v3, v2
1653 ; VI-GISEL-NEXT:    v_add_f32_e32 v8, v8, v9
1654 ; VI-GISEL-NEXT:    v_mul_f32_e32 v6, 0x3f317000, v6
1655 ; VI-GISEL-NEXT:    v_add_f32_e32 v6, v6, v8
1656 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v7|, v4
1657 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v2, v7, v6, s[2:3]
1658 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v6, 0, v5, vcc
1659 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v6
1660 ; VI-GISEL-NEXT:    v_and_b32_e32 v6, 0xfffff000, v3
1661 ; VI-GISEL-NEXT:    v_sub_f32_e32 v7, v3, v6
1662 ; VI-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3805fdf4, v7
1663 ; VI-GISEL-NEXT:    v_mul_f32_e32 v9, 0x3805fdf4, v6
1664 ; VI-GISEL-NEXT:    v_add_f32_e32 v8, v9, v8
1665 ; VI-GISEL-NEXT:    v_mul_f32_e32 v7, 0x3f317000, v7
1666 ; VI-GISEL-NEXT:    v_add_f32_e32 v7, v7, v8
1667 ; VI-GISEL-NEXT:    v_mul_f32_e32 v6, 0x3f317000, v6
1668 ; VI-GISEL-NEXT:    v_add_f32_e32 v6, v6, v7
1669 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v3|, v4
1670 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v3, v3, v6, vcc
1671 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v5, s[0:1]
1672 ; VI-GISEL-NEXT:    v_sub_f32_e32 v3, v3, v4
1673 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, s8
1674 ; VI-GISEL-NEXT:    v_mov_b32_e32 v5, s9
1675 ; VI-GISEL-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1676 ; VI-GISEL-NEXT:    s_endpgm
1678 ; GFX900-SDAG-LABEL: s_log_v4f32:
1679 ; GFX900-SDAG:       ; %bb.0:
1680 ; GFX900-SDAG-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
1681 ; GFX900-SDAG-NEXT:    s_load_dwordx2 s[8:9], s[0:1], 0x24
1682 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v0, 0x800000
1683 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
1684 ; GFX900-SDAG-NEXT:    s_mov_b32 s10, 0x3377d1cf
1685 ; GFX900-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1686 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s7, v0
1687 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v1, vcc
1688 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v2, s7, v2
1689 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v2, v2
1690 ; GFX900-SDAG-NEXT:    s_mov_b32 s7, 0x3f317217
1691 ; GFX900-SDAG-NEXT:    s_mov_b32 s11, 0x7f800000
1692 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v6, 0x41b17218
1693 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v2
1694 ; GFX900-SDAG-NEXT:    v_fma_f32 v5, v2, s7, -v3
1695 ; GFX900-SDAG-NEXT:    v_fma_f32 v5, v2, s10, v5
1696 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v3, v3, v5
1697 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v2|, s11
1698 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[0:1]
1699 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s6, v0
1700 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v3, 1.0, v1, s[0:1]
1701 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v3, s6, v3
1702 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v5, v3
1703 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v3, 0, v6, vcc
1704 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v3, v2, v3
1705 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s5, v0
1706 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317217, v5
1707 ; GFX900-SDAG-NEXT:    v_fma_f32 v7, v5, s7, -v2
1708 ; GFX900-SDAG-NEXT:    v_fma_f32 v7, v5, s10, v7
1709 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v2, v2, v7
1710 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v7, 1.0, v1, vcc
1711 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v7, s5, v7
1712 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v7, v7
1713 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v5|, s11
1714 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v2, v5, v2, s[2:3]
1715 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v5, 0, v6, s[0:1]
1716 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[0:1], s4, v0
1717 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, 1.0, v1, s[0:1]
1718 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v2, v2, v5
1719 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v5, 0x3f317217, v7
1720 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, s4, v0
1721 ; GFX900-SDAG-NEXT:    v_fma_f32 v8, v7, s7, -v5
1722 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
1723 ; GFX900-SDAG-NEXT:    v_fma_f32 v8, v7, s10, v8
1724 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v5, v5, v8
1725 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v7|, s11
1726 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v1, v7, v5, s[2:3]
1727 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v5, 0, v6, vcc
1728 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v1, v1, v5
1729 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v5, 0x3f317217, v0
1730 ; GFX900-SDAG-NEXT:    v_fma_f32 v7, v0, s7, -v5
1731 ; GFX900-SDAG-NEXT:    v_fma_f32 v7, v0, s10, v7
1732 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v5, v5, v7
1733 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s11
1734 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v5, vcc
1735 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v5, 0, v6, s[0:1]
1736 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v4, 0
1737 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v5
1738 ; GFX900-SDAG-NEXT:    global_store_dwordx4 v4, v[0:3], s[8:9]
1739 ; GFX900-SDAG-NEXT:    s_endpgm
1741 ; GFX900-GISEL-LABEL: s_log_v4f32:
1742 ; GFX900-GISEL:       ; %bb.0:
1743 ; GFX900-GISEL-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x34
1744 ; GFX900-GISEL-NEXT:    s_load_dwordx2 s[8:9], s[0:1], 0x24
1745 ; GFX900-GISEL-NEXT:    s_mov_b32 s0, 0x800000
1746 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x4f800000
1747 ; GFX900-GISEL-NEXT:    s_mov_b32 s2, 0x3377d1cf
1748 ; GFX900-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1749 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v0, s4
1750 ; GFX900-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc, s0, v0
1751 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 1.0, v3, vcc
1752 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, s4, v0
1753 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
1754 ; GFX900-GISEL-NEXT:    s_mov_b32 s0, 0x3f317217
1755 ; GFX900-GISEL-NEXT:    s_mov_b32 s3, 0x7f800000
1756 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x800000
1757 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
1758 ; GFX900-GISEL-NEXT:    v_fma_f32 v5, v0, s0, -v1
1759 ; GFX900-GISEL-NEXT:    v_fma_f32 v5, v0, s2, v5
1760 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v5
1761 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], |v0|, s3
1762 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[0:1]
1763 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s5, v2
1764 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, v3, s[0:1]
1765 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, s5, v1
1766 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v1, v1
1767 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v7, 0x41b17218
1768 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v7, vcc
1769 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v4, 0x3f317217
1770 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v8
1771 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3f317217, v1
1772 ; GFX900-GISEL-NEXT:    v_fma_f32 v9, v1, v4, -v8
1773 ; GFX900-GISEL-NEXT:    v_fma_f32 v9, v1, s2, v9
1774 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s6, v2
1775 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v8, v8, v9
1776 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v9, 1.0, v3, vcc
1777 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v9, s6, v9
1778 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v9, v9
1779 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v1|, s3
1780 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v1, v1, v8, s[2:3]
1781 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v8, 0, v7, s[0:1]
1782 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[0:1], s7, v2
1783 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v2, 1.0, v3, s[0:1]
1784 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v1, v1, v8
1785 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3f317217, v9
1786 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v2, s7, v2
1787 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v6, 0x3377d1cf
1788 ; GFX900-GISEL-NEXT:    v_fma_f32 v10, v9, v4, -v8
1789 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v3, v2
1790 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v5, 0x7f800000
1791 ; GFX900-GISEL-NEXT:    v_fma_f32 v10, v9, v6, v10
1792 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v8, v8, v10
1793 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[2:3], |v9|, v5
1794 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v2, v9, v8, s[2:3]
1795 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v8, 0, v7, vcc
1796 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v2, v2, v8
1797 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v8, 0x3f317217, v3
1798 ; GFX900-GISEL-NEXT:    v_fma_f32 v4, v3, v4, -v8
1799 ; GFX900-GISEL-NEXT:    v_fma_f32 v4, v3, v6, v4
1800 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v4, v8, v4
1801 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v3|, v5
1802 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1803 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, v7, s[0:1]
1804 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v3, v3, v4
1805 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v4, 0
1806 ; GFX900-GISEL-NEXT:    global_store_dwordx4 v4, v[0:3], s[8:9]
1807 ; GFX900-GISEL-NEXT:    s_endpgm
1809 ; GFX1100-SDAG-LABEL: s_log_v4f32:
1810 ; GFX1100-SDAG:       ; %bb.0:
1811 ; GFX1100-SDAG-NEXT:    s_clause 0x1
1812 ; GFX1100-SDAG-NEXT:    s_load_b128 s[4:7], s[0:1], 0x34
1813 ; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1814 ; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1815 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s2, 0x800000, s7
1816 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s6
1817 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s8, 0x800000, s5
1818 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s9, 0x800000, s4
1819 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1820 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s2
1821 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s3
1822 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1823 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s8
1824 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v3, 1.0, 0x4f800000, s9
1825 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v4, 0, 0x41b17218, s2
1826 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
1827 ; GFX1100-SDAG-NEXT:    v_dual_mul_f32 v0, s7, v0 :: v_dual_mul_f32 v1, s6, v1
1828 ; GFX1100-SDAG-NEXT:    v_dual_mul_f32 v2, s5, v2 :: v_dual_mul_f32 v3, s4, v3
1829 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v9, 0, 0x41b17218, s3
1830 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1831 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
1832 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v1, v1
1833 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(TRANS32_DEP_3)
1834 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v2, v2
1835 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v3, v3
1836 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v14, 0, 0x41b17218, s8
1837 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v15, 0, 0x41b17218, s9
1838 ; GFX1100-SDAG-NEXT:    v_dual_mul_f32 v5, 0x3f317217, v0 :: v_dual_mul_f32 v6, 0x3f317217, v1
1839 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
1840 ; GFX1100-SDAG-NEXT:    v_dual_mul_f32 v7, 0x3f317217, v2 :: v_dual_mul_f32 v8, 0x3f317217, v3
1841 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
1842 ; GFX1100-SDAG-NEXT:    v_fma_f32 v10, 0x3f317217, v0, -v5
1843 ; GFX1100-SDAG-NEXT:    v_fma_f32 v11, 0x3f317217, v1, -v6
1844 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
1845 ; GFX1100-SDAG-NEXT:    v_fma_f32 v12, 0x3f317217, v2, -v7
1846 ; GFX1100-SDAG-NEXT:    v_fma_f32 v13, 0x3f317217, v3, -v8
1847 ; GFX1100-SDAG-NEXT:    v_dual_fmac_f32 v10, 0x3377d1cf, v0 :: v_dual_fmac_f32 v11, 0x3377d1cf, v1
1848 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1849 ; GFX1100-SDAG-NEXT:    v_dual_fmac_f32 v12, 0x3377d1cf, v2 :: v_dual_fmac_f32 v13, 0x3377d1cf, v3
1850 ; GFX1100-SDAG-NEXT:    v_dual_add_f32 v5, v5, v10 :: v_dual_add_f32 v6, v6, v11
1851 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1852 ; GFX1100-SDAG-NEXT:    v_dual_add_f32 v7, v7, v12 :: v_dual_add_f32 v8, v8, v13
1853 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v5, vcc_lo
1854 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1|
1855 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
1856 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc_lo
1857 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v2|
1858 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v5, v2, v7, vcc_lo
1859 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v3|
1860 ; GFX1100-SDAG-NEXT:    v_dual_mov_b32 v7, 0 :: v_dual_sub_f32 v2, v1, v9
1861 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v6, v3, v8, vcc_lo
1862 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v3, v0, v4
1863 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1864 ; GFX1100-SDAG-NEXT:    v_dual_sub_f32 v1, v5, v14 :: v_dual_sub_f32 v0, v6, v15
1865 ; GFX1100-SDAG-NEXT:    global_store_b128 v7, v[0:3], s[0:1]
1866 ; GFX1100-SDAG-NEXT:    s_nop 0
1867 ; GFX1100-SDAG-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1868 ; GFX1100-SDAG-NEXT:    s_endpgm
1870 ; GFX1100-GISEL-LABEL: s_log_v4f32:
1871 ; GFX1100-GISEL:       ; %bb.0:
1872 ; GFX1100-GISEL-NEXT:    s_clause 0x1
1873 ; GFX1100-GISEL-NEXT:    s_load_b128 s[4:7], s[0:1], 0x34
1874 ; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1875 ; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1876 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s2, 0x800000, s4
1877 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s3, 0x800000, s5
1878 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s8, 0x800000, s6
1879 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s9, 0x800000, s7
1880 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1881 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 1.0, 0x4f800000, s2
1882 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s3
1883 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1884 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s8
1885 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v3, 1.0, 0x4f800000, s9
1886 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v4, 0, 0x41b17218, s2
1887 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
1888 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v0, s4, v0 :: v_dual_mul_f32 v1, s5, v1
1889 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v2, s6, v2 :: v_dual_mul_f32 v3, s7, v3
1890 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v9, 0, 0x41b17218, s3
1891 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1892 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
1893 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v1
1894 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(TRANS32_DEP_3)
1895 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v2, v2
1896 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v3, v3
1897 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v14, 0, 0x41b17218, s8
1898 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v15, 0, 0x41b17218, s9
1899 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v5, 0x3f317217, v0 :: v_dual_mul_f32 v6, 0x3f317217, v1
1900 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
1901 ; GFX1100-GISEL-NEXT:    v_dual_mul_f32 v7, 0x3f317217, v2 :: v_dual_mul_f32 v8, 0x3f317217, v3
1902 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
1903 ; GFX1100-GISEL-NEXT:    v_fma_f32 v10, v0, 0x3f317217, -v5
1904 ; GFX1100-GISEL-NEXT:    v_fma_f32 v11, 0x3f317217, v1, -v6
1905 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
1906 ; GFX1100-GISEL-NEXT:    v_fma_f32 v12, 0x3f317217, v2, -v7
1907 ; GFX1100-GISEL-NEXT:    v_fma_f32 v13, 0x3f317217, v3, -v8
1908 ; GFX1100-GISEL-NEXT:    v_dual_fmac_f32 v10, 0x3377d1cf, v0 :: v_dual_fmac_f32 v11, 0x3377d1cf, v1
1909 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1910 ; GFX1100-GISEL-NEXT:    v_dual_fmac_f32 v12, 0x3377d1cf, v2 :: v_dual_fmac_f32 v13, 0x3377d1cf, v3
1911 ; GFX1100-GISEL-NEXT:    v_dual_add_f32 v5, v5, v10 :: v_dual_add_f32 v6, v6, v11
1912 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1913 ; GFX1100-GISEL-NEXT:    v_dual_add_f32 v7, v7, v12 :: v_dual_add_f32 v8, v8, v13
1914 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v5, vcc_lo
1915 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1|
1916 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
1917 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc_lo
1918 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v2|
1919 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v4
1920 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_2)
1921 ; GFX1100-GISEL-NEXT:    v_dual_mov_b32 v4, 0 :: v_dual_sub_f32 v1, v1, v9
1922 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v2, v2, v7, vcc_lo
1923 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v3|
1924 ; GFX1100-GISEL-NEXT:    v_dual_cndmask_b32 v3, v3, v8 :: v_dual_sub_f32 v2, v2, v14
1925 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1926 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v3, v3, v15
1927 ; GFX1100-GISEL-NEXT:    global_store_b128 v4, v[0:3], s[0:1]
1928 ; GFX1100-GISEL-NEXT:    s_nop 0
1929 ; GFX1100-GISEL-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1930 ; GFX1100-GISEL-NEXT:    s_endpgm
1932 ; R600-LABEL: s_log_v4f32:
1933 ; R600:       ; %bb.0:
1934 ; R600-NEXT:    ALU 76, @4, KC0[CB0:0-32], KC1[]
1935 ; R600-NEXT:    MEM_RAT_CACHELESS STORE_RAW T2.XYZW, T0.X, 1
1936 ; R600-NEXT:    CF_END
1937 ; R600-NEXT:    PAD
1938 ; R600-NEXT:    ALU clause starting at 4:
1939 ; R600-NEXT:     SETGT T0.W, literal.x, KC0[3].Z,
1940 ; R600-NEXT:     SETGT * T1.W, literal.x, KC0[4].X,
1941 ; R600-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
1942 ; R600-NEXT:     CNDE * T2.W, PV.W, 1.0, literal.x,
1943 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
1944 ; R600-NEXT:     MUL_IEEE T0.Z, KC0[3].Z, PV.W,
1945 ; R600-NEXT:     SETGT T2.W, literal.x, KC0[3].W,
1946 ; R600-NEXT:     CNDE * T3.W, T1.W, 1.0, literal.y,
1947 ; R600-NEXT:    8388608(1.175494e-38), 1333788672(4.294967e+09)
1948 ; R600-NEXT:     MUL_IEEE T1.Z, KC0[4].X, PS,
1949 ; R600-NEXT:     CNDE T3.W, PV.W, 1.0, literal.x,
1950 ; R600-NEXT:     LOG_IEEE * T0.X, PV.Z,
1951 ; R600-NEXT:    1333788672(4.294967e+09), 0(0.000000e+00)
1952 ; R600-NEXT:     MUL_IEEE T0.Z, KC0[3].W, PV.W,
1953 ; R600-NEXT:     SETGT T3.W, literal.x, KC0[3].Y,
1954 ; R600-NEXT:     LOG_IEEE * T0.Y, PV.Z,
1955 ; R600-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
1956 ; R600-NEXT:     AND_INT T1.Y, PS, literal.x,
1957 ; R600-NEXT:     AND_INT T1.Z, T0.X, literal.x,
1958 ; R600-NEXT:     CNDE T4.W, PV.W, 1.0, literal.y,
1959 ; R600-NEXT:     LOG_IEEE * T0.Z, PV.Z,
1960 ; R600-NEXT:    -4096(nan), 1333788672(4.294967e+09)
1961 ; R600-NEXT:     MUL_IEEE T2.Y, KC0[3].Y, PV.W,
1962 ; R600-NEXT:     ADD T2.Z, T0.X, -PV.Z,
1963 ; R600-NEXT:     AND_INT T4.W, PS, literal.x,
1964 ; R600-NEXT:     ADD * T5.W, T0.Y, -PV.Y,
1965 ; R600-NEXT:    -4096(nan), 0(0.000000e+00)
1966 ; R600-NEXT:     MUL_IEEE T3.Y, PS, literal.x,
1967 ; R600-NEXT:     ADD T3.Z, T0.Z, -PV.W,
1968 ; R600-NEXT:     MUL_IEEE T6.W, PV.Z, literal.x,
1969 ; R600-NEXT:     LOG_IEEE * T1.X, PV.Y,
1970 ; R600-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
1971 ; R600-NEXT:     MULADD_IEEE T2.Y, T1.Z, literal.x, PV.W,
1972 ; R600-NEXT:     MUL_IEEE T4.Z, PV.Z, literal.x,
1973 ; R600-NEXT:     AND_INT T6.W, PS, literal.y,
1974 ; R600-NEXT:     MULADD_IEEE * T7.W, T1.Y, literal.x, PV.Y, BS:VEC_021/SCL_122
1975 ; R600-NEXT:    939916788(3.194618e-05), -4096(nan)
1976 ; R600-NEXT:     MULADD_IEEE T3.Y, T5.W, literal.x, PS,
1977 ; R600-NEXT:     ADD T5.Z, T1.X, -PV.W,
1978 ; R600-NEXT:     MULADD_IEEE T5.W, T4.W, literal.y, PV.Z, BS:VEC_120/SCL_212
1979 ; R600-NEXT:     MULADD_IEEE * T7.W, T2.Z, literal.x, PV.Y, BS:VEC_021/SCL_122
1980 ; R600-NEXT:    1060204544(6.931152e-01), 939916788(3.194618e-05)
1981 ; R600-NEXT:     MULADD_IEEE T2.X, T1.Z, literal.x, PS,
1982 ; R600-NEXT:     MULADD_IEEE T2.Y, T3.Z, literal.x, PV.W, BS:VEC_120/SCL_212
1983 ; R600-NEXT:     MUL_IEEE T1.Z, PV.Z, literal.y,
1984 ; R600-NEXT:     MULADD_IEEE T5.W, T1.Y, literal.x, PV.Y,
1985 ; R600-NEXT:     SETGT * T7.W, literal.z, |T0.Y|,
1986 ; R600-NEXT:    1060204544(6.931152e-01), 939916788(3.194618e-05)
1987 ; R600-NEXT:    2139095040(INF), 0(0.000000e+00)
1988 ; R600-NEXT:     CNDE T3.X, PS, T0.Y, PV.W,
1989 ; R600-NEXT:     CNDE T0.Y, T1.W, 0.0, literal.x,
1990 ; R600-NEXT:     MULADD_IEEE T1.Z, T6.W, literal.y, PV.Z, BS:VEC_120/SCL_212
1991 ; R600-NEXT:     MULADD_IEEE T1.W, T4.W, literal.z, PV.Y, BS:VEC_201
1992 ; R600-NEXT:     SETGT * T4.W, literal.w, |T0.Z|,
1993 ; R600-NEXT:    1102148120(2.218071e+01), 939916788(3.194618e-05)
1994 ; R600-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
1995 ; R600-NEXT:     SETGT T4.X, literal.x, |T0.X|,
1996 ; R600-NEXT:     CNDE T1.Y, PS, T0.Z, PV.W,
1997 ; R600-NEXT:     CNDE T0.Z, T2.W, 0.0, literal.y,
1998 ; R600-NEXT:     MULADD_IEEE T1.W, T5.Z, literal.z, PV.Z,
1999 ; R600-NEXT:     ADD * T2.W, PV.X, -PV.Y,
2000 ; R600-NEXT:    2139095040(INF), 1102148120(2.218071e+01)
2001 ; R600-NEXT:    1060204544(6.931152e-01), 0(0.000000e+00)
2002 ; R600-NEXT:     MULADD_IEEE T3.X, T6.W, literal.x, PV.W,
2003 ; R600-NEXT:     SETGT T0.Y, literal.y, |T1.X|,
2004 ; R600-NEXT:     ADD T2.Z, PV.Y, -PV.Z,
2005 ; R600-NEXT:     CNDE T1.W, PV.X, T0.X, T2.X, BS:VEC_120/SCL_212
2006 ; R600-NEXT:     CNDE * T0.W, T0.W, 0.0, literal.z,
2007 ; R600-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
2008 ; R600-NEXT:    1102148120(2.218071e+01), 0(0.000000e+00)
2009 ; R600-NEXT:     ADD T2.Y, PV.W, -PS,
2010 ; R600-NEXT:     CNDE T0.W, PV.Y, T1.X, PV.X,
2011 ; R600-NEXT:     CNDE * T1.W, T3.W, 0.0, literal.x,
2012 ; R600-NEXT:    1102148120(2.218071e+01), 0(0.000000e+00)
2013 ; R600-NEXT:     ADD T2.X, PV.W, -PS,
2014 ; R600-NEXT:     LSHR * T0.X, KC0[2].Y, literal.x,
2015 ; R600-NEXT:    2(2.802597e-45), 0(0.000000e+00)
2017 ; CM-LABEL: s_log_v4f32:
2018 ; CM:       ; %bb.0:
2019 ; CM-NEXT:    ALU 84, @4, KC0[CB0:0-32], KC1[]
2020 ; CM-NEXT:    MEM_RAT_CACHELESS STORE_DWORD T2, T0.X
2021 ; CM-NEXT:    CF_END
2022 ; CM-NEXT:    PAD
2023 ; CM-NEXT:    ALU clause starting at 4:
2024 ; CM-NEXT:     SETGT * T0.W, literal.x, KC0[3].Y,
2025 ; CM-NEXT:    8388608(1.175494e-38), 0(0.000000e+00)
2026 ; CM-NEXT:     CNDE T0.Y, PV.W, 1.0, literal.x,
2027 ; CM-NEXT:     SETGT T0.Z, literal.y, KC0[3].W,
2028 ; CM-NEXT:     SETGT * T1.W, literal.y, KC0[4].X,
2029 ; CM-NEXT:    1333788672(4.294967e+09), 8388608(1.175494e-38)
2030 ; CM-NEXT:     CNDE T0.X, PV.W, 1.0, literal.x,
2031 ; CM-NEXT:     CNDE T1.Y, PV.Z, 1.0, literal.x,
2032 ; CM-NEXT:     SETGT T1.Z, literal.y, KC0[3].Z,
2033 ; CM-NEXT:     MUL_IEEE * T2.W, KC0[3].Y, PV.Y,
2034 ; CM-NEXT:    1333788672(4.294967e+09), 8388608(1.175494e-38)
2035 ; CM-NEXT:     LOG_IEEE T0.X (MASKED), T2.W,
2036 ; CM-NEXT:     LOG_IEEE T0.Y, T2.W,
2037 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T2.W,
2038 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T2.W,
2039 ; CM-NEXT:     CNDE T1.X, T1.Z, 1.0, literal.x,
2040 ; CM-NEXT:     AND_INT T2.Y, PV.Y, literal.y,
2041 ; CM-NEXT:     MUL_IEEE T2.Z, KC0[3].W, T1.Y,
2042 ; CM-NEXT:     MUL_IEEE * T2.W, KC0[4].X, T0.X,
2043 ; CM-NEXT:    1333788672(4.294967e+09), -4096(nan)
2044 ; CM-NEXT:     LOG_IEEE T0.X, T2.W,
2045 ; CM-NEXT:     LOG_IEEE T0.Y (MASKED), T2.W,
2046 ; CM-NEXT:     LOG_IEEE T0.Z (MASKED), T2.W,
2047 ; CM-NEXT:     LOG_IEEE * T0.W (MASKED), T2.W,
2048 ; CM-NEXT:     LOG_IEEE T1.X (MASKED), T2.Z,
2049 ; CM-NEXT:     LOG_IEEE T1.Y, T2.Z,
2050 ; CM-NEXT:     LOG_IEEE T1.Z (MASKED), T2.Z,
2051 ; CM-NEXT:     LOG_IEEE * T1.W (MASKED), T2.Z,
2052 ; CM-NEXT:     ADD T2.X, T0.Y, -T2.Y,
2053 ; CM-NEXT:     AND_INT T3.Y, PV.Y, literal.x,
2054 ; CM-NEXT:     AND_INT T2.Z, T0.X, literal.x,
2055 ; CM-NEXT:     MUL_IEEE * T2.W, KC0[3].Z, T1.X,
2056 ; CM-NEXT:    -4096(nan), 0(0.000000e+00)
2057 ; CM-NEXT:     LOG_IEEE T1.X, T2.W,
2058 ; CM-NEXT:     LOG_IEEE T1.Y (MASKED), T2.W,
2059 ; CM-NEXT:     LOG_IEEE T1.Z (MASKED), T2.W,
2060 ; CM-NEXT:     LOG_IEEE * T1.W (MASKED), T2.W,
2061 ; CM-NEXT:     ADD T3.X, T0.X, -T2.Z,
2062 ; CM-NEXT:     ADD T4.Y, T1.Y, -T3.Y,
2063 ; CM-NEXT:     AND_INT T3.Z, PV.X, literal.x,
2064 ; CM-NEXT:     MUL_IEEE * T2.W, T2.X, literal.y, BS:VEC_120/SCL_212
2065 ; CM-NEXT:    -4096(nan), 939916788(3.194618e-05)
2066 ; CM-NEXT:     MULADD_IEEE T4.X, T2.Y, literal.x, PV.W,
2067 ; CM-NEXT:     ADD T5.Y, T1.X, -PV.Z,
2068 ; CM-NEXT:     MUL_IEEE T4.Z, PV.Y, literal.x,
2069 ; CM-NEXT:     MUL_IEEE * T2.W, PV.X, literal.x,
2070 ; CM-NEXT:    939916788(3.194618e-05), 0(0.000000e+00)
2071 ; CM-NEXT:     MULADD_IEEE T5.X, T2.Z, literal.x, PV.W,
2072 ; CM-NEXT:     MULADD_IEEE T6.Y, T3.Y, literal.x, PV.Z,
2073 ; CM-NEXT:     MUL_IEEE T4.Z, PV.Y, literal.x,
2074 ; CM-NEXT:     MULADD_IEEE * T2.W, T2.X, literal.y, PV.X,
2075 ; CM-NEXT:    939916788(3.194618e-05), 1060204544(6.931152e-01)
2076 ; CM-NEXT:     MULADD_IEEE T2.X, T2.Y, literal.x, PV.W,
2077 ; CM-NEXT:     MULADD_IEEE T2.Y, T3.Z, literal.y, PV.Z,
2078 ; CM-NEXT:     MULADD_IEEE T4.Z, T4.Y, literal.x, PV.Y, BS:VEC_120/SCL_212
2079 ; CM-NEXT:     MULADD_IEEE * T2.W, T3.X, literal.x, PV.X,
2080 ; CM-NEXT:    1060204544(6.931152e-01), 939916788(3.194618e-05)
2081 ; CM-NEXT:     MULADD_IEEE T3.X, T2.Z, literal.x, PV.W,
2082 ; CM-NEXT:     SETGT T4.Y, literal.y, |T0.X|,
2083 ; CM-NEXT:     MULADD_IEEE T2.Z, T3.Y, literal.x, PV.Z,
2084 ; CM-NEXT:     SETGT * T2.W, literal.y, |T1.Y|,
2085 ; CM-NEXT:    1060204544(6.931152e-01), 2139095040(INF)
2086 ; CM-NEXT:     CNDE T4.X, PV.W, T1.Y, PV.Z,
2087 ; CM-NEXT:     CNDE T1.Y, PV.Y, T0.X, PV.X,
2088 ; CM-NEXT:     CNDE T2.Z, T1.W, 0.0, literal.x,
2089 ; CM-NEXT:     MULADD_IEEE * T1.W, T5.Y, literal.y, T2.Y,
2090 ; CM-NEXT:    1102148120(2.218071e+01), 1060204544(6.931152e-01)
2091 ; CM-NEXT:     CNDE T0.X, T0.Z, 0.0, literal.x,
2092 ; CM-NEXT:     MULADD_IEEE T2.Y, T3.Z, literal.y, PV.W, BS:VEC_120/SCL_212
2093 ; CM-NEXT:     SETGT T0.Z, literal.z, |T1.X|,
2094 ; CM-NEXT:     ADD * T2.W, PV.Y, -PV.Z,
2095 ; CM-NEXT:    1102148120(2.218071e+01), 1060204544(6.931152e-01)
2096 ; CM-NEXT:    2139095040(INF), 0(0.000000e+00)
2097 ; CM-NEXT:     SETGT T3.X, literal.x, |T0.Y|,
2098 ; CM-NEXT:     CNDE T1.Y, PV.Z, T1.X, PV.Y,
2099 ; CM-NEXT:     ADD T2.Z, T4.X, -PV.X,
2100 ; CM-NEXT:     CNDE * T1.W, T1.Z, 0.0, literal.y,
2101 ; CM-NEXT:    2139095040(INF), 1102148120(2.218071e+01)
2102 ; CM-NEXT:     ADD T2.Y, PV.Y, -PV.W,
2103 ; CM-NEXT:     CNDE T0.Z, PV.X, T0.Y, T2.X,
2104 ; CM-NEXT:     CNDE * T0.W, T0.W, 0.0, literal.x,
2105 ; CM-NEXT:    1102148120(2.218071e+01), 0(0.000000e+00)
2106 ; CM-NEXT:     ADD * T2.X, PV.Z, -PV.W,
2107 ; CM-NEXT:     LSHR * T0.X, KC0[2].Y, literal.x,
2108 ; CM-NEXT:    2(2.802597e-45), 0(0.000000e+00)
2109   %result = call <4 x float> @llvm.log.v4f32(<4 x float> %in)
2110   store <4 x float> %result, ptr addrspace(1) %out
2111   ret void
2114 define float @v_log_f32(float %in) {
2115 ; SI-SDAG-LABEL: v_log_f32:
2116 ; SI-SDAG:       ; %bb.0:
2117 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2118 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2119 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2120 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2121 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2122 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
2123 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2124 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
2125 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2126 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
2127 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
2128 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
2129 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2130 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2131 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2132 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2133 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2134 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2135 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2136 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2138 ; SI-GISEL-LABEL: v_log_f32:
2139 ; SI-GISEL:       ; %bb.0:
2140 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2141 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2142 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2143 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2144 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2145 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2146 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2147 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
2148 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
2149 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2150 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
2151 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
2152 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2153 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2154 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2155 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2156 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2157 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2158 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2159 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2161 ; VI-SDAG-LABEL: v_log_f32:
2162 ; VI-SDAG:       ; %bb.0:
2163 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2164 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2165 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2166 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2167 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2168 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
2169 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2170 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2171 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
2172 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
2173 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
2174 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
2175 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
2176 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
2177 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
2178 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
2179 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2180 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2181 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2182 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2183 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2184 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2185 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2187 ; VI-GISEL-LABEL: v_log_f32:
2188 ; VI-GISEL:       ; %bb.0:
2189 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2190 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2191 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2192 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2193 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2194 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2195 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2196 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
2197 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
2198 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v2
2199 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
2200 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
2201 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
2202 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
2203 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
2204 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2205 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2206 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2207 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2208 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2209 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2210 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2211 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2213 ; GFX900-SDAG-LABEL: v_log_f32:
2214 ; GFX900-SDAG:       ; %bb.0:
2215 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2216 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2217 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2218 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2219 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2220 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
2221 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
2222 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
2223 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2224 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
2225 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
2226 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
2227 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2228 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2229 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2230 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2231 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2232 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2233 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2234 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
2236 ; GFX900-GISEL-LABEL: v_log_f32:
2237 ; GFX900-GISEL:       ; %bb.0:
2238 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2239 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2240 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2241 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2242 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2243 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2244 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
2245 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
2246 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
2247 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2248 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
2249 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
2250 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2251 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2252 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2253 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2254 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2255 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2256 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2257 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
2259 ; GFX1100-SDAG-LABEL: v_log_f32:
2260 ; GFX1100-SDAG:       ; %bb.0:
2261 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2262 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2263 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
2264 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2265 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
2266 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2267 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2268 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2269 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
2270 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2271 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
2272 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
2273 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2274 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2275 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
2276 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
2277 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2278 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2279 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2281 ; GFX1100-GISEL-LABEL: v_log_f32:
2282 ; GFX1100-GISEL:       ; %bb.0:
2283 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2284 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
2285 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
2286 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2287 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
2288 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2289 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2290 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2291 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
2292 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2293 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
2294 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
2295 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2296 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2297 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
2298 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
2299 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2300 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2301 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2303 ; R600-LABEL: v_log_f32:
2304 ; R600:       ; %bb.0:
2305 ; R600-NEXT:    CF_END
2306 ; R600-NEXT:    PAD
2308 ; CM-LABEL: v_log_f32:
2309 ; CM:       ; %bb.0:
2310 ; CM-NEXT:    CF_END
2311 ; CM-NEXT:    PAD
2312   %result = call float @llvm.log.f32(float %in)
2313   ret float %result
2316 define float @v_log_fabs_f32(float %in) {
2317 ; SI-SDAG-LABEL: v_log_fabs_f32:
2318 ; SI-SDAG:       ; %bb.0:
2319 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2320 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2321 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2322 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2323 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2324 ; SI-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v1
2325 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2326 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
2327 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2328 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
2329 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
2330 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
2331 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2332 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2333 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2334 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2335 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2336 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2337 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2338 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2340 ; SI-GISEL-LABEL: v_log_fabs_f32:
2341 ; SI-GISEL:       ; %bb.0:
2342 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2343 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2344 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2345 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
2346 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2347 ; SI-GISEL-NEXT:    v_mul_f32_e64 v0, |v0|, v1
2348 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2349 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
2350 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
2351 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2352 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
2353 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
2354 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2355 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2356 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2357 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2358 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2359 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2360 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2361 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2363 ; VI-SDAG-LABEL: v_log_fabs_f32:
2364 ; VI-SDAG:       ; %bb.0:
2365 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2366 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2367 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2368 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2369 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2370 ; VI-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v1
2371 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2372 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2373 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
2374 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
2375 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
2376 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
2377 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
2378 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
2379 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
2380 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
2381 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2382 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2383 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2384 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2385 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2386 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2387 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2389 ; VI-GISEL-LABEL: v_log_fabs_f32:
2390 ; VI-GISEL:       ; %bb.0:
2391 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2392 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2393 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2394 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
2395 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2396 ; VI-GISEL-NEXT:    v_mul_f32_e64 v0, |v0|, v1
2397 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2398 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
2399 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
2400 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v2
2401 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
2402 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
2403 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
2404 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
2405 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
2406 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2407 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2408 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2409 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2410 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2411 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2412 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2413 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2415 ; GFX900-SDAG-LABEL: v_log_fabs_f32:
2416 ; GFX900-SDAG:       ; %bb.0:
2417 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2418 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2419 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2420 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
2421 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2422 ; GFX900-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v1
2423 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
2424 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
2425 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2426 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
2427 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
2428 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
2429 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2430 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2431 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2432 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2433 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2434 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2435 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2436 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
2438 ; GFX900-GISEL-LABEL: v_log_fabs_f32:
2439 ; GFX900-GISEL:       ; %bb.0:
2440 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2441 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2442 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2443 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
2444 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2445 ; GFX900-GISEL-NEXT:    v_mul_f32_e64 v0, |v0|, v1
2446 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
2447 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
2448 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
2449 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2450 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
2451 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
2452 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2453 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2454 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2455 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2456 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2457 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2458 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2459 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
2461 ; GFX1100-SDAG-LABEL: v_log_fabs_f32:
2462 ; GFX1100-SDAG:       ; %bb.0:
2463 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2464 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, |v0|
2465 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2466 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s0
2467 ; GFX1100-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v1
2468 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
2469 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2470 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2471 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2472 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
2473 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
2474 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2475 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
2476 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2477 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
2478 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
2479 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, s0
2480 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2481 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2483 ; GFX1100-GISEL-LABEL: v_log_fabs_f32:
2484 ; GFX1100-GISEL:       ; %bb.0:
2485 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2486 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, |v0|
2487 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2488 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s0
2489 ; GFX1100-GISEL-NEXT:    v_mul_f32_e64 v0, |v0|, v1
2490 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
2491 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2492 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2493 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2494 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
2495 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
2496 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2497 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
2498 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2499 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
2500 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
2501 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, s0
2502 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2503 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2505 ; R600-LABEL: v_log_fabs_f32:
2506 ; R600:       ; %bb.0:
2507 ; R600-NEXT:    CF_END
2508 ; R600-NEXT:    PAD
2510 ; CM-LABEL: v_log_fabs_f32:
2511 ; CM:       ; %bb.0:
2512 ; CM-NEXT:    CF_END
2513 ; CM-NEXT:    PAD
2514   %fabs = call float @llvm.fabs.f32(float %in)
2515   %result = call float @llvm.log.f32(float %fabs)
2516   ret float %result
2519 define float @v_log_fneg_fabs_f32(float %in) {
2520 ; SI-SDAG-LABEL: v_log_fneg_fabs_f32:
2521 ; SI-SDAG:       ; %bb.0:
2522 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2523 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x80800000
2524 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2525 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
2526 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2527 ; SI-SDAG-NEXT:    v_mul_f32_e64 v0, -|v0|, v1
2528 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2529 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
2530 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2531 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
2532 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
2533 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
2534 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2535 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2536 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2537 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2538 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2539 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2540 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2541 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2543 ; SI-GISEL-LABEL: v_log_fneg_fabs_f32:
2544 ; SI-GISEL:       ; %bb.0:
2545 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2546 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2547 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2548 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, -|v0|, v1
2549 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2550 ; SI-GISEL-NEXT:    v_mul_f32_e64 v0, -|v0|, v1
2551 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2552 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
2553 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
2554 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2555 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
2556 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
2557 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2558 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2559 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2560 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2561 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2562 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2563 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2564 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2566 ; VI-SDAG-LABEL: v_log_fneg_fabs_f32:
2567 ; VI-SDAG:       ; %bb.0:
2568 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2569 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x80800000
2570 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2571 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
2572 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2573 ; VI-SDAG-NEXT:    v_mul_f32_e64 v0, -|v0|, v1
2574 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2575 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2576 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
2577 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
2578 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
2579 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
2580 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
2581 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
2582 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
2583 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
2584 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2585 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2586 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2587 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2588 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2589 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2590 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2592 ; VI-GISEL-LABEL: v_log_fneg_fabs_f32:
2593 ; VI-GISEL:       ; %bb.0:
2594 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2595 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2596 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2597 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, -|v0|, v1
2598 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2599 ; VI-GISEL-NEXT:    v_mul_f32_e64 v0, -|v0|, v1
2600 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2601 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
2602 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
2603 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v2
2604 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
2605 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
2606 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
2607 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
2608 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
2609 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2610 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2611 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2612 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2613 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2614 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2615 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2616 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2618 ; GFX900-SDAG-LABEL: v_log_fneg_fabs_f32:
2619 ; GFX900-SDAG:       ; %bb.0:
2620 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2621 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x80800000
2622 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2623 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc, |v0|, s4
2624 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2625 ; GFX900-SDAG-NEXT:    v_mul_f32_e64 v0, -|v0|, v1
2626 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
2627 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
2628 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2629 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
2630 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
2631 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
2632 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2633 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2634 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2635 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2636 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2637 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2638 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2639 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
2641 ; GFX900-GISEL-LABEL: v_log_fneg_fabs_f32:
2642 ; GFX900-GISEL:       ; %bb.0:
2643 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2644 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2645 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2646 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, -|v0|, v1
2647 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2648 ; GFX900-GISEL-NEXT:    v_mul_f32_e64 v0, -|v0|, v1
2649 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
2650 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
2651 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
2652 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2653 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
2654 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
2655 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2656 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2657 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2658 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2659 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2660 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2661 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2662 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
2664 ; GFX1100-SDAG-LABEL: v_log_fneg_fabs_f32:
2665 ; GFX1100-SDAG:       ; %bb.0:
2666 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2667 ; GFX1100-SDAG-NEXT:    v_cmp_lt_f32_e64 s0, 0x80800000, |v0|
2668 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2669 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s0
2670 ; GFX1100-SDAG-NEXT:    v_mul_f32_e64 v0, -|v0|, v1
2671 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
2672 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2673 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2674 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2675 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
2676 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
2677 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2678 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
2679 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2680 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
2681 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
2682 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, s0
2683 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2684 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2686 ; GFX1100-GISEL-LABEL: v_log_fneg_fabs_f32:
2687 ; GFX1100-GISEL:       ; %bb.0:
2688 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2689 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, -|v0|
2690 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2691 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s0
2692 ; GFX1100-GISEL-NEXT:    v_mul_f32_e64 v0, -|v0|, v1
2693 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
2694 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2695 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2696 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2697 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
2698 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
2699 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2700 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
2701 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2702 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
2703 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
2704 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, s0
2705 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2706 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2708 ; R600-LABEL: v_log_fneg_fabs_f32:
2709 ; R600:       ; %bb.0:
2710 ; R600-NEXT:    CF_END
2711 ; R600-NEXT:    PAD
2713 ; CM-LABEL: v_log_fneg_fabs_f32:
2714 ; CM:       ; %bb.0:
2715 ; CM-NEXT:    CF_END
2716 ; CM-NEXT:    PAD
2717   %fabs = call float @llvm.fabs.f32(float %in)
2718   %fneg.fabs = fneg float %fabs
2719   %result = call float @llvm.log.f32(float %fneg.fabs)
2720   ret float %result
2723 define float @v_log_fneg_f32(float %in) {
2724 ; SI-SDAG-LABEL: v_log_fneg_f32:
2725 ; SI-SDAG:       ; %bb.0:
2726 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2727 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x80800000
2728 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2729 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
2730 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2731 ; SI-SDAG-NEXT:    v_mul_f32_e64 v0, -v0, v1
2732 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2733 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
2734 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2735 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
2736 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
2737 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
2738 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2739 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2740 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2741 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2742 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2743 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2744 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2745 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2747 ; SI-GISEL-LABEL: v_log_fneg_f32:
2748 ; SI-GISEL:       ; %bb.0:
2749 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2750 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2751 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2752 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, -v0, v1
2753 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2754 ; SI-GISEL-NEXT:    v_mul_f32_e64 v0, -v0, v1
2755 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2756 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
2757 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
2758 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2759 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
2760 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
2761 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2762 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2763 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2764 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2765 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2766 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2767 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2768 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2770 ; VI-SDAG-LABEL: v_log_fneg_f32:
2771 ; VI-SDAG:       ; %bb.0:
2772 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2773 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x80800000
2774 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2775 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
2776 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2777 ; VI-SDAG-NEXT:    v_mul_f32_e64 v0, -v0, v1
2778 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2779 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2780 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
2781 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
2782 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
2783 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
2784 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
2785 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
2786 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
2787 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
2788 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2789 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2790 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2791 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2792 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2793 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2794 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2796 ; VI-GISEL-LABEL: v_log_fneg_f32:
2797 ; VI-GISEL:       ; %bb.0:
2798 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2799 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2800 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2801 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, -v0, v1
2802 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2803 ; VI-GISEL-NEXT:    v_mul_f32_e64 v0, -v0, v1
2804 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
2805 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
2806 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
2807 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v2
2808 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
2809 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
2810 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
2811 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
2812 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
2813 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2814 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2815 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2816 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2817 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2818 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2819 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2820 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2822 ; GFX900-SDAG-LABEL: v_log_fneg_f32:
2823 ; GFX900-SDAG:       ; %bb.0:
2824 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2825 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x80800000
2826 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
2827 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
2828 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
2829 ; GFX900-SDAG-NEXT:    v_mul_f32_e64 v0, -v0, v1
2830 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
2831 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
2832 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2833 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
2834 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
2835 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
2836 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
2837 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2838 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
2839 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2840 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2841 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2842 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2843 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
2845 ; GFX900-GISEL-LABEL: v_log_fneg_f32:
2846 ; GFX900-GISEL:       ; %bb.0:
2847 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2848 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2849 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2850 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, -v0, v1
2851 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
2852 ; GFX900-GISEL-NEXT:    v_mul_f32_e64 v0, -v0, v1
2853 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
2854 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
2855 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
2856 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2857 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
2858 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
2859 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2860 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
2861 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
2862 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
2863 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
2864 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2865 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2866 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
2868 ; GFX1100-SDAG-LABEL: v_log_fneg_f32:
2869 ; GFX1100-SDAG:       ; %bb.0:
2870 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2871 ; GFX1100-SDAG-NEXT:    v_cmp_lt_f32_e32 vcc_lo, 0x80800000, v0
2872 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
2873 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2874 ; GFX1100-SDAG-NEXT:    v_mul_f32_e64 v0, -v0, v1
2875 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
2876 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
2877 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2878 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
2879 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2880 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
2881 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
2882 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2883 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
2884 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
2885 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
2886 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2887 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
2888 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
2890 ; GFX1100-GISEL-LABEL: v_log_fneg_f32:
2891 ; GFX1100-GISEL:       ; %bb.0:
2892 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2893 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, -v0
2894 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2895 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, s0
2896 ; GFX1100-GISEL-NEXT:    v_mul_f32_e64 v0, -v0, v1
2897 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
2898 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
2899 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
2900 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
2901 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
2902 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
2903 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2904 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
2905 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
2906 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
2907 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
2908 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, s0
2909 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
2910 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
2912 ; R600-LABEL: v_log_fneg_f32:
2913 ; R600:       ; %bb.0:
2914 ; R600-NEXT:    CF_END
2915 ; R600-NEXT:    PAD
2917 ; CM-LABEL: v_log_fneg_f32:
2918 ; CM:       ; %bb.0:
2919 ; CM-NEXT:    CF_END
2920 ; CM-NEXT:    PAD
2921   %fneg = fneg float %in
2922   %result = call float @llvm.log.f32(float %fneg)
2923   ret float %result
2926 define float @v_log_f32_fast(float %in) {
2927 ; SI-SDAG-LABEL: v_log_f32_fast:
2928 ; SI-SDAG:       ; %bb.0:
2929 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2930 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2931 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2932 ; SI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2933 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2934 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2935 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2936 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
2937 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2938 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
2939 ; SI-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
2940 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2942 ; SI-GISEL-LABEL: v_log_f32_fast:
2943 ; SI-GISEL:       ; %bb.0:
2944 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2945 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v0
2946 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2947 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
2948 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2949 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
2950 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
2951 ; SI-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
2952 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2954 ; VI-SDAG-LABEL: v_log_f32_fast:
2955 ; VI-SDAG:       ; %bb.0:
2956 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2957 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2958 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2959 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2960 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2961 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2962 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
2963 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
2964 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2965 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
2966 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v0, v1
2967 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
2969 ; VI-GISEL-LABEL: v_log_f32_fast:
2970 ; VI-GISEL:       ; %bb.0:
2971 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2972 ; VI-GISEL-NEXT:    v_log_f32_e32 v2, v0
2973 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
2974 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
2975 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
2976 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
2977 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v2
2978 ; VI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
2979 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
2981 ; GFX900-SDAG-LABEL: v_log_f32_fast:
2982 ; GFX900-SDAG:       ; %bb.0:
2983 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2984 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
2985 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
2986 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
2987 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
2988 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
2989 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
2990 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
2991 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
2992 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
2993 ; GFX900-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
2994 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
2996 ; GFX900-GISEL-LABEL: v_log_f32_fast:
2997 ; GFX900-GISEL:       ; %bb.0:
2998 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2999 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v2, v0
3000 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3001 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3002 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3003 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3004 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3005 ; GFX900-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3006 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3008 ; GFX1100-SDAG-LABEL: v_log_f32_fast:
3009 ; GFX1100-SDAG:       ; %bb.0:
3010 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3011 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3012 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
3013 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0xc1b17218, vcc_lo
3014 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3015 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3016 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
3017 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3018 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v0, v0, 0x3f317218, v1
3019 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3021 ; GFX1100-GISEL-LABEL: v_log_f32_fast:
3022 ; GFX1100-GISEL:       ; %bb.0:
3023 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3024 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v0
3025 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3026 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 0xc1b17218, vcc_lo
3027 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3028 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v0, 0x3f317218, v1
3029 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3031 ; R600-LABEL: v_log_f32_fast:
3032 ; R600:       ; %bb.0:
3033 ; R600-NEXT:    CF_END
3034 ; R600-NEXT:    PAD
3036 ; CM-LABEL: v_log_f32_fast:
3037 ; CM:       ; %bb.0:
3038 ; CM-NEXT:    CF_END
3039 ; CM-NEXT:    PAD
3040   %result = call fast float @llvm.log.f32(float %in)
3041   ret float %result
3044 define float @v_log_f32_unsafe_math_attr(float %in) "unsafe-fp-math"="true" {
3045 ; SI-SDAG-LABEL: v_log_f32_unsafe_math_attr:
3046 ; SI-SDAG:       ; %bb.0:
3047 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3048 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3049 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3050 ; SI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3051 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3052 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3053 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3054 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3055 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3056 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
3057 ; SI-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
3058 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3060 ; SI-GISEL-LABEL: v_log_f32_unsafe_math_attr:
3061 ; SI-GISEL:       ; %bb.0:
3062 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3063 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v0
3064 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3065 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3066 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3067 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3068 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3069 ; SI-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3070 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3072 ; VI-SDAG-LABEL: v_log_f32_unsafe_math_attr:
3073 ; VI-SDAG:       ; %bb.0:
3074 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3075 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3076 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3077 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3078 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3079 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3080 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3081 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3082 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3083 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
3084 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v0, v1
3085 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3087 ; VI-GISEL-LABEL: v_log_f32_unsafe_math_attr:
3088 ; VI-GISEL:       ; %bb.0:
3089 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3090 ; VI-GISEL-NEXT:    v_log_f32_e32 v2, v0
3091 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3092 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3093 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3094 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3095 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v2
3096 ; VI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
3097 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3099 ; GFX900-SDAG-LABEL: v_log_f32_unsafe_math_attr:
3100 ; GFX900-SDAG:       ; %bb.0:
3101 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3102 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3103 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3104 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3105 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3106 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3107 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
3108 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3109 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3110 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
3111 ; GFX900-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
3112 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3114 ; GFX900-GISEL-LABEL: v_log_f32_unsafe_math_attr:
3115 ; GFX900-GISEL:       ; %bb.0:
3116 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3117 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v2, v0
3118 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3119 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3120 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3121 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3122 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3123 ; GFX900-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3124 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3126 ; GFX1100-SDAG-LABEL: v_log_f32_unsafe_math_attr:
3127 ; GFX1100-SDAG:       ; %bb.0:
3128 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3129 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3130 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
3131 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0xc1b17218, vcc_lo
3132 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3133 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3134 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
3135 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3136 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v0, v0, 0x3f317218, v1
3137 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3139 ; GFX1100-GISEL-LABEL: v_log_f32_unsafe_math_attr:
3140 ; GFX1100-GISEL:       ; %bb.0:
3141 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3142 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v0
3143 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3144 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 0xc1b17218, vcc_lo
3145 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3146 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v0, 0x3f317218, v1
3147 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3149 ; R600-LABEL: v_log_f32_unsafe_math_attr:
3150 ; R600:       ; %bb.0:
3151 ; R600-NEXT:    CF_END
3152 ; R600-NEXT:    PAD
3154 ; CM-LABEL: v_log_f32_unsafe_math_attr:
3155 ; CM:       ; %bb.0:
3156 ; CM-NEXT:    CF_END
3157 ; CM-NEXT:    PAD
3158   %result = call float @llvm.log.f32(float %in)
3159   ret float %result
3162 define float @v_log_f32_approx_fn_attr(float %in) "approx-func-fp-math"="true" {
3163 ; SI-SDAG-LABEL: v_log_f32_approx_fn_attr:
3164 ; SI-SDAG:       ; %bb.0:
3165 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3166 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3167 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3168 ; SI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3169 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3170 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3171 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3172 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3173 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3174 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
3175 ; SI-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
3176 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3178 ; SI-GISEL-LABEL: v_log_f32_approx_fn_attr:
3179 ; SI-GISEL:       ; %bb.0:
3180 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3181 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v0
3182 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3183 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3184 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3185 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3186 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3187 ; SI-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3188 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3190 ; VI-SDAG-LABEL: v_log_f32_approx_fn_attr:
3191 ; VI-SDAG:       ; %bb.0:
3192 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3193 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3194 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3195 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3196 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3197 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3198 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3199 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3200 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3201 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
3202 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v0, v1
3203 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3205 ; VI-GISEL-LABEL: v_log_f32_approx_fn_attr:
3206 ; VI-GISEL:       ; %bb.0:
3207 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3208 ; VI-GISEL-NEXT:    v_log_f32_e32 v2, v0
3209 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3210 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3211 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3212 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3213 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v2
3214 ; VI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
3215 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3217 ; GFX900-SDAG-LABEL: v_log_f32_approx_fn_attr:
3218 ; GFX900-SDAG:       ; %bb.0:
3219 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3220 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3221 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3222 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3223 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3224 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3225 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
3226 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3227 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3228 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
3229 ; GFX900-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
3230 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3232 ; GFX900-GISEL-LABEL: v_log_f32_approx_fn_attr:
3233 ; GFX900-GISEL:       ; %bb.0:
3234 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3235 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v2, v0
3236 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3237 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3238 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3239 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3240 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3241 ; GFX900-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3242 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3244 ; GFX1100-SDAG-LABEL: v_log_f32_approx_fn_attr:
3245 ; GFX1100-SDAG:       ; %bb.0:
3246 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3247 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3248 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
3249 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0xc1b17218, vcc_lo
3250 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3251 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3252 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
3253 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3254 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v0, v0, 0x3f317218, v1
3255 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3257 ; GFX1100-GISEL-LABEL: v_log_f32_approx_fn_attr:
3258 ; GFX1100-GISEL:       ; %bb.0:
3259 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3260 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v0
3261 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3262 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 0xc1b17218, vcc_lo
3263 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3264 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v0, 0x3f317218, v1
3265 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3267 ; R600-LABEL: v_log_f32_approx_fn_attr:
3268 ; R600:       ; %bb.0:
3269 ; R600-NEXT:    CF_END
3270 ; R600-NEXT:    PAD
3272 ; CM-LABEL: v_log_f32_approx_fn_attr:
3273 ; CM:       ; %bb.0:
3274 ; CM-NEXT:    CF_END
3275 ; CM-NEXT:    PAD
3276   %result = call float @llvm.log.f32(float %in)
3277   ret float %result
3280 define float @v_log_f32_ninf(float %in) {
3281 ; SI-SDAG-LABEL: v_log_f32_ninf:
3282 ; SI-SDAG:       ; %bb.0:
3283 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3284 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3285 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
3286 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3287 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
3288 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
3289 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3290 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
3291 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
3292 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
3293 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
3294 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
3295 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
3296 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
3297 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
3298 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
3299 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
3300 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3301 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
3302 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3304 ; SI-GISEL-LABEL: v_log_f32_ninf:
3305 ; SI-GISEL:       ; %bb.0:
3306 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3307 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3308 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3309 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3310 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
3311 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
3312 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3313 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
3314 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
3315 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
3316 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
3317 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
3318 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
3319 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
3320 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
3321 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
3322 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
3323 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3324 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
3325 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3327 ; VI-SDAG-LABEL: v_log_f32_ninf:
3328 ; VI-SDAG:       ; %bb.0:
3329 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3330 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3331 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
3332 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3333 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
3334 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
3335 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3336 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
3337 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
3338 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
3339 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
3340 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
3341 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
3342 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
3343 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
3344 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
3345 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
3346 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
3347 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
3348 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
3349 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3350 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
3351 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3353 ; VI-GISEL-LABEL: v_log_f32_ninf:
3354 ; VI-GISEL:       ; %bb.0:
3355 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3356 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3357 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3358 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3359 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
3360 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
3361 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3362 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
3363 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
3364 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v2
3365 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
3366 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
3367 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
3368 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
3369 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
3370 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
3371 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
3372 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
3373 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
3374 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
3375 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3376 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
3377 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3379 ; GFX900-SDAG-LABEL: v_log_f32_ninf:
3380 ; GFX900-SDAG:       ; %bb.0:
3381 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3382 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3383 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
3384 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3385 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
3386 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
3387 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
3388 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
3389 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
3390 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
3391 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
3392 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
3393 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
3394 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
3395 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
3396 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
3397 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
3398 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3399 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
3400 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3402 ; GFX900-GISEL-LABEL: v_log_f32_ninf:
3403 ; GFX900-GISEL:       ; %bb.0:
3404 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3405 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3406 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3407 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3408 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
3409 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
3410 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
3411 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
3412 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
3413 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
3414 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
3415 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
3416 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
3417 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
3418 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
3419 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
3420 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
3421 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3422 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
3423 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3425 ; GFX1100-SDAG-LABEL: v_log_f32_ninf:
3426 ; GFX1100-SDAG:       ; %bb.0:
3427 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3428 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3429 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
3430 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3431 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
3432 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
3433 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3434 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
3435 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
3436 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3437 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
3438 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
3439 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3440 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
3441 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
3442 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
3443 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3444 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
3445 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3447 ; GFX1100-GISEL-LABEL: v_log_f32_ninf:
3448 ; GFX1100-GISEL:       ; %bb.0:
3449 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3450 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3451 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
3452 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3453 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
3454 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
3455 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3456 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
3457 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
3458 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3459 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
3460 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
3461 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3462 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
3463 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
3464 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
3465 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3466 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
3467 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3469 ; R600-LABEL: v_log_f32_ninf:
3470 ; R600:       ; %bb.0:
3471 ; R600-NEXT:    CF_END
3472 ; R600-NEXT:    PAD
3474 ; CM-LABEL: v_log_f32_ninf:
3475 ; CM:       ; %bb.0:
3476 ; CM-NEXT:    CF_END
3477 ; CM-NEXT:    PAD
3478   %result = call ninf float @llvm.log.f32(float %in)
3479   ret float %result
3482 define float @v_log_f32_afn(float %in) {
3483 ; SI-SDAG-LABEL: v_log_f32_afn:
3484 ; SI-SDAG:       ; %bb.0:
3485 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3486 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3487 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3488 ; SI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3489 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3490 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3491 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3492 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3493 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3494 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
3495 ; SI-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
3496 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3498 ; SI-GISEL-LABEL: v_log_f32_afn:
3499 ; SI-GISEL:       ; %bb.0:
3500 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3501 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v0
3502 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3503 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3504 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3505 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3506 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3507 ; SI-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3508 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3510 ; VI-SDAG-LABEL: v_log_f32_afn:
3511 ; VI-SDAG:       ; %bb.0:
3512 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3513 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3514 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3515 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3516 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3517 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3518 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3519 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3520 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3521 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
3522 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v0, v1
3523 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3525 ; VI-GISEL-LABEL: v_log_f32_afn:
3526 ; VI-GISEL:       ; %bb.0:
3527 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3528 ; VI-GISEL-NEXT:    v_log_f32_e32 v2, v0
3529 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3530 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3531 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3532 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3533 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v2
3534 ; VI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
3535 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3537 ; GFX900-SDAG-LABEL: v_log_f32_afn:
3538 ; GFX900-SDAG:       ; %bb.0:
3539 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3540 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3541 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3542 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3543 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3544 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3545 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
3546 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3547 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3548 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
3549 ; GFX900-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
3550 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3552 ; GFX900-GISEL-LABEL: v_log_f32_afn:
3553 ; GFX900-GISEL:       ; %bb.0:
3554 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3555 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v2, v0
3556 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3557 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3558 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3559 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3560 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3561 ; GFX900-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3562 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3564 ; GFX1100-SDAG-LABEL: v_log_f32_afn:
3565 ; GFX1100-SDAG:       ; %bb.0:
3566 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3567 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3568 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
3569 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0xc1b17218, vcc_lo
3570 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3571 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3572 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
3573 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3574 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v0, v0, 0x3f317218, v1
3575 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3577 ; GFX1100-GISEL-LABEL: v_log_f32_afn:
3578 ; GFX1100-GISEL:       ; %bb.0:
3579 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3580 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v0
3581 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3582 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 0xc1b17218, vcc_lo
3583 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3584 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v0, 0x3f317218, v1
3585 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3587 ; R600-LABEL: v_log_f32_afn:
3588 ; R600:       ; %bb.0:
3589 ; R600-NEXT:    CF_END
3590 ; R600-NEXT:    PAD
3592 ; CM-LABEL: v_log_f32_afn:
3593 ; CM:       ; %bb.0:
3594 ; CM-NEXT:    CF_END
3595 ; CM-NEXT:    PAD
3596   %result = call afn float @llvm.log.f32(float %in)
3597   ret float %result
3600 define float @v_log_f32_afn_daz(float %in) #0 {
3601 ; GFX689-LABEL: v_log_f32_afn_daz:
3602 ; GFX689:       ; %bb.0:
3603 ; GFX689-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3604 ; GFX689-NEXT:    v_log_f32_e32 v0, v0
3605 ; GFX689-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
3606 ; GFX689-NEXT:    s_setpc_b64 s[30:31]
3608 ; GFX1100-LABEL: v_log_f32_afn_daz:
3609 ; GFX1100:       ; %bb.0:
3610 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3611 ; GFX1100-NEXT:    v_log_f32_e32 v0, v0
3612 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
3613 ; GFX1100-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
3614 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
3616 ; R600-LABEL: v_log_f32_afn_daz:
3617 ; R600:       ; %bb.0:
3618 ; R600-NEXT:    CF_END
3619 ; R600-NEXT:    PAD
3621 ; CM-LABEL: v_log_f32_afn_daz:
3622 ; CM:       ; %bb.0:
3623 ; CM-NEXT:    CF_END
3624 ; CM-NEXT:    PAD
3625   %result = call afn float @llvm.log.f32(float %in)
3626   ret float %result
3629 define float @v_log_f32_afn_dynamic(float %in) #1 {
3630 ; SI-SDAG-LABEL: v_log_f32_afn_dynamic:
3631 ; SI-SDAG:       ; %bb.0:
3632 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3633 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3634 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3635 ; SI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3636 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3637 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3638 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3639 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3640 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3641 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
3642 ; SI-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
3643 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3645 ; SI-GISEL-LABEL: v_log_f32_afn_dynamic:
3646 ; SI-GISEL:       ; %bb.0:
3647 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3648 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v0
3649 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3650 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3651 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3652 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3653 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3654 ; SI-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3655 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3657 ; VI-SDAG-LABEL: v_log_f32_afn_dynamic:
3658 ; VI-SDAG:       ; %bb.0:
3659 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3660 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3661 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3662 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3663 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3664 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3665 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3666 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3667 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3668 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
3669 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v0, v1
3670 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3672 ; VI-GISEL-LABEL: v_log_f32_afn_dynamic:
3673 ; VI-GISEL:       ; %bb.0:
3674 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3675 ; VI-GISEL-NEXT:    v_log_f32_e32 v2, v0
3676 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3677 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3678 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3679 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3680 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v2
3681 ; VI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
3682 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3684 ; GFX900-SDAG-LABEL: v_log_f32_afn_dynamic:
3685 ; GFX900-SDAG:       ; %bb.0:
3686 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3687 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3688 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
3689 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3690 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3691 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3692 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
3693 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3694 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3695 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
3696 ; GFX900-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
3697 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3699 ; GFX900-GISEL-LABEL: v_log_f32_afn_dynamic:
3700 ; GFX900-GISEL:       ; %bb.0:
3701 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3702 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v2, v0
3703 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3704 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3705 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
3706 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3707 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3708 ; GFX900-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3709 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3711 ; GFX1100-SDAG-LABEL: v_log_f32_afn_dynamic:
3712 ; GFX1100-SDAG:       ; %bb.0:
3713 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3714 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3715 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
3716 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0xc1b17218, vcc_lo
3717 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3718 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v2
3719 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
3720 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3721 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v0, v0, 0x3f317218, v1
3722 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3724 ; GFX1100-GISEL-LABEL: v_log_f32_afn_dynamic:
3725 ; GFX1100-GISEL:       ; %bb.0:
3726 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3727 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v1, v0
3728 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
3729 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 0xc1b17218, vcc_lo
3730 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3731 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v0, 0x3f317218, v1
3732 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3734 ; R600-LABEL: v_log_f32_afn_dynamic:
3735 ; R600:       ; %bb.0:
3736 ; R600-NEXT:    CF_END
3737 ; R600-NEXT:    PAD
3739 ; CM-LABEL: v_log_f32_afn_dynamic:
3740 ; CM:       ; %bb.0:
3741 ; CM-NEXT:    CF_END
3742 ; CM-NEXT:    PAD
3743   %result = call afn float @llvm.log.f32(float %in)
3744   ret float %result
3747 define float @v_fabs_log_f32_afn(float %in) {
3748 ; SI-SDAG-LABEL: v_fabs_log_f32_afn:
3749 ; SI-SDAG:       ; %bb.0:
3750 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3751 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3752 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
3753 ; SI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3754 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3755 ; SI-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v2
3756 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3757 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3758 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3759 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
3760 ; SI-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
3761 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3763 ; SI-GISEL-LABEL: v_fabs_log_f32_afn:
3764 ; SI-GISEL:       ; %bb.0:
3765 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3766 ; SI-GISEL-NEXT:    v_log_f32_e64 v2, |v0|
3767 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3768 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3769 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
3770 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3771 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3772 ; SI-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3773 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3775 ; VI-SDAG-LABEL: v_fabs_log_f32_afn:
3776 ; VI-SDAG:       ; %bb.0:
3777 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3778 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3779 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
3780 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3781 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3782 ; VI-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v2
3783 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3784 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3785 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3786 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
3787 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v0, v1
3788 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3790 ; VI-GISEL-LABEL: v_fabs_log_f32_afn:
3791 ; VI-GISEL:       ; %bb.0:
3792 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3793 ; VI-GISEL-NEXT:    v_log_f32_e64 v2, |v0|
3794 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3795 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3796 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
3797 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3798 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v2
3799 ; VI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
3800 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3802 ; GFX900-SDAG-LABEL: v_fabs_log_f32_afn:
3803 ; GFX900-SDAG:       ; %bb.0:
3804 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3805 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
3806 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
3807 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v2, 0x4f800000
3808 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
3809 ; GFX900-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v2
3810 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
3811 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0xc1b17218
3812 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
3813 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317218
3814 ; GFX900-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v1
3815 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3817 ; GFX900-GISEL-LABEL: v_fabs_log_f32_afn:
3818 ; GFX900-GISEL:       ; %bb.0:
3819 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3820 ; GFX900-GISEL-NEXT:    v_log_f32_e64 v2, |v0|
3821 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
3822 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0xc1b17218
3823 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
3824 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc
3825 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3f317218
3826 ; GFX900-GISEL-NEXT:    v_fma_f32 v0, v2, v1, v0
3827 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3829 ; GFX1100-SDAG-LABEL: v_fabs_log_f32_afn:
3830 ; GFX1100-SDAG:       ; %bb.0:
3831 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3832 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, |v0|
3833 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3834 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, s0
3835 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0xc1b17218, s0
3836 ; GFX1100-SDAG-NEXT:    v_mul_f32_e64 v0, |v0|, v2
3837 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3838 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
3839 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3840 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v0, v0, 0x3f317218, v1
3841 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3843 ; GFX1100-GISEL-LABEL: v_fabs_log_f32_afn:
3844 ; GFX1100-GISEL:       ; %bb.0:
3845 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3846 ; GFX1100-GISEL-NEXT:    v_log_f32_e64 v1, |v0|
3847 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, |v0|
3848 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3849 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, 0, 0xc1b17218, s0
3850 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3851 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v0, 0x3f317218, v1
3852 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3854 ; R600-LABEL: v_fabs_log_f32_afn:
3855 ; R600:       ; %bb.0:
3856 ; R600-NEXT:    CF_END
3857 ; R600-NEXT:    PAD
3859 ; CM-LABEL: v_fabs_log_f32_afn:
3860 ; CM:       ; %bb.0:
3861 ; CM-NEXT:    CF_END
3862 ; CM-NEXT:    PAD
3863   %fabs = call float @llvm.fabs.f32(float %in)
3864   %result = call afn float @llvm.log.f32(float %fabs)
3865   ret float %result
3868 define float @v_log_f32_daz(float %in) #0 {
3869 ; SI-SDAG-LABEL: v_log_f32_daz:
3870 ; SI-SDAG:       ; %bb.0:
3871 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3872 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3873 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
3874 ; SI-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
3875 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
3876 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
3877 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
3878 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
3879 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
3880 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
3881 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3882 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3884 ; SI-GISEL-LABEL: v_log_f32_daz:
3885 ; SI-GISEL:       ; %bb.0:
3886 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3887 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3888 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
3889 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
3890 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
3891 ; SI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
3892 ; SI-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
3893 ; SI-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
3894 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
3895 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
3896 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3897 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3899 ; VI-SDAG-LABEL: v_log_f32_daz:
3900 ; VI-SDAG:       ; %bb.0:
3901 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3902 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
3903 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
3904 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
3905 ; VI-SDAG-NEXT:    v_sub_f32_e32 v3, v0, v1
3906 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v1
3907 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v3
3908 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
3909 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v2, v4
3910 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
3911 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
3912 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
3913 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
3914 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3915 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
3917 ; VI-GISEL-LABEL: v_log_f32_daz:
3918 ; VI-GISEL:       ; %bb.0:
3919 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3920 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
3921 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
3922 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
3923 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
3924 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v2
3925 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
3926 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
3927 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
3928 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
3929 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
3930 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
3931 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
3932 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3933 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
3935 ; GFX900-SDAG-LABEL: v_log_f32_daz:
3936 ; GFX900-SDAG:       ; %bb.0:
3937 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3938 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
3939 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
3940 ; GFX900-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
3941 ; GFX900-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
3942 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
3943 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
3944 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
3945 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
3946 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
3947 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3948 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
3950 ; GFX900-GISEL-LABEL: v_log_f32_daz:
3951 ; GFX900-GISEL:       ; %bb.0:
3952 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3953 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
3954 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
3955 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
3956 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
3957 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
3958 ; GFX900-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
3959 ; GFX900-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
3960 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
3961 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
3962 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
3963 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
3965 ; GFX1100-SDAG-LABEL: v_log_f32_daz:
3966 ; GFX1100-SDAG:       ; %bb.0:
3967 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3968 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
3969 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
3970 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
3971 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
3972 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3973 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
3974 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
3975 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3976 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
3977 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
3978 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
3980 ; GFX1100-GISEL-LABEL: v_log_f32_daz:
3981 ; GFX1100-GISEL:       ; %bb.0:
3982 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3983 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
3984 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
3985 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
3986 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
3987 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3988 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
3989 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
3990 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3991 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
3992 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
3993 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
3995 ; R600-LABEL: v_log_f32_daz:
3996 ; R600:       ; %bb.0:
3997 ; R600-NEXT:    CF_END
3998 ; R600-NEXT:    PAD
4000 ; CM-LABEL: v_log_f32_daz:
4001 ; CM:       ; %bb.0:
4002 ; CM-NEXT:    CF_END
4003 ; CM-NEXT:    PAD
4004   %result = call float @llvm.log.f32(float %in)
4005   ret float %result
4008 define float @v_log_f32_nnan(float %in) {
4009 ; SI-SDAG-LABEL: v_log_f32_nnan:
4010 ; SI-SDAG:       ; %bb.0:
4011 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4012 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4013 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4014 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4015 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4016 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4017 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4018 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4019 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4020 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4021 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
4022 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
4023 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4024 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4025 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
4026 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4027 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4028 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4029 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4030 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4032 ; SI-GISEL-LABEL: v_log_f32_nnan:
4033 ; SI-GISEL:       ; %bb.0:
4034 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4035 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4036 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4037 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4038 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4039 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4040 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4041 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4042 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
4043 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4044 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
4045 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
4046 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4047 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4048 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
4049 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4050 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4051 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4052 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4053 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4055 ; VI-SDAG-LABEL: v_log_f32_nnan:
4056 ; VI-SDAG:       ; %bb.0:
4057 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4058 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4059 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4060 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4061 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4062 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4063 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4064 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4065 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4066 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
4067 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
4068 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
4069 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
4070 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
4071 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
4072 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4073 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4074 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
4075 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4076 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4077 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4078 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4079 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4081 ; VI-GISEL-LABEL: v_log_f32_nnan:
4082 ; VI-GISEL:       ; %bb.0:
4083 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4084 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4085 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4086 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4087 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4088 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4089 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4090 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4091 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
4092 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v2
4093 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
4094 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
4095 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
4096 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
4097 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4098 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4099 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4100 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
4101 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4102 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4103 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4104 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4105 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4107 ; GFX900-SDAG-LABEL: v_log_f32_nnan:
4108 ; GFX900-SDAG:       ; %bb.0:
4109 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4110 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4111 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4112 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4113 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4114 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4115 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
4116 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4117 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4118 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4119 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
4120 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
4121 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4122 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4123 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
4124 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4125 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4126 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4127 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4128 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
4130 ; GFX900-GISEL-LABEL: v_log_f32_nnan:
4131 ; GFX900-GISEL:       ; %bb.0:
4132 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4133 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4134 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4135 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4136 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4137 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4138 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
4139 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4140 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
4141 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4142 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
4143 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
4144 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4145 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4146 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
4147 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4148 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4149 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4150 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4151 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
4153 ; GFX1100-SDAG-LABEL: v_log_f32_nnan:
4154 ; GFX1100-SDAG:       ; %bb.0:
4155 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4156 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
4157 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
4158 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4159 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4160 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
4161 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
4162 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4163 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
4164 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4165 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
4166 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
4167 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4168 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4169 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
4170 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
4171 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4172 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4173 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
4175 ; GFX1100-GISEL-LABEL: v_log_f32_nnan:
4176 ; GFX1100-GISEL:       ; %bb.0:
4177 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4178 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
4179 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
4180 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4181 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4182 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
4183 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
4184 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4185 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
4186 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4187 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
4188 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
4189 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4190 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4191 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
4192 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
4193 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4194 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4195 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
4197 ; R600-LABEL: v_log_f32_nnan:
4198 ; R600:       ; %bb.0:
4199 ; R600-NEXT:    CF_END
4200 ; R600-NEXT:    PAD
4202 ; CM-LABEL: v_log_f32_nnan:
4203 ; CM:       ; %bb.0:
4204 ; CM-NEXT:    CF_END
4205 ; CM-NEXT:    PAD
4206   %result = call nnan float @llvm.log.f32(float %in)
4207   ret float %result
4210 define float @v_log_f32_nnan_daz(float %in) #0 {
4211 ; SI-SDAG-LABEL: v_log_f32_nnan_daz:
4212 ; SI-SDAG:       ; %bb.0:
4213 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4214 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4215 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4216 ; SI-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
4217 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
4218 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4219 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4220 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
4221 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4222 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
4223 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4224 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4226 ; SI-GISEL-LABEL: v_log_f32_nnan_daz:
4227 ; SI-GISEL:       ; %bb.0:
4228 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4229 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4230 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4231 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
4232 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4233 ; SI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
4234 ; SI-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
4235 ; SI-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
4236 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
4237 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
4238 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4239 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4241 ; VI-SDAG-LABEL: v_log_f32_nnan_daz:
4242 ; VI-SDAG:       ; %bb.0:
4243 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4244 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4245 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4246 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4247 ; VI-SDAG-NEXT:    v_sub_f32_e32 v3, v0, v1
4248 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v1
4249 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v3
4250 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
4251 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v2, v4
4252 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4253 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
4254 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4255 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
4256 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4257 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4259 ; VI-GISEL-LABEL: v_log_f32_nnan_daz:
4260 ; VI-GISEL:       ; %bb.0:
4261 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4262 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4263 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4264 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
4265 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
4266 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v2
4267 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
4268 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
4269 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4270 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
4271 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4272 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4273 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
4274 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4275 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4277 ; GFX900-SDAG-LABEL: v_log_f32_nnan_daz:
4278 ; GFX900-SDAG:       ; %bb.0:
4279 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4280 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
4281 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4282 ; GFX900-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
4283 ; GFX900-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
4284 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4285 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4286 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
4287 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4288 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
4289 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4290 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
4292 ; GFX900-GISEL-LABEL: v_log_f32_nnan_daz:
4293 ; GFX900-GISEL:       ; %bb.0:
4294 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4295 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
4296 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4297 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
4298 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4299 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
4300 ; GFX900-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
4301 ; GFX900-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
4302 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
4303 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
4304 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4305 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
4307 ; GFX1100-SDAG-LABEL: v_log_f32_nnan_daz:
4308 ; GFX1100-SDAG:       ; %bb.0:
4309 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4310 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
4311 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
4312 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4313 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
4314 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4315 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
4316 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
4317 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4318 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4319 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
4320 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
4322 ; GFX1100-GISEL-LABEL: v_log_f32_nnan_daz:
4323 ; GFX1100-GISEL:       ; %bb.0:
4324 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4325 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
4326 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
4327 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4328 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
4329 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4330 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
4331 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
4332 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4333 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4334 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
4335 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
4337 ; R600-LABEL: v_log_f32_nnan_daz:
4338 ; R600:       ; %bb.0:
4339 ; R600-NEXT:    CF_END
4340 ; R600-NEXT:    PAD
4342 ; CM-LABEL: v_log_f32_nnan_daz:
4343 ; CM:       ; %bb.0:
4344 ; CM-NEXT:    CF_END
4345 ; CM-NEXT:    PAD
4346   %result = call nnan float @llvm.log.f32(float %in)
4347   ret float %result
4350 define float @v_log_f32_nnan_dynamic(float %in) #1 {
4351 ; SI-SDAG-LABEL: v_log_f32_nnan_dynamic:
4352 ; SI-SDAG:       ; %bb.0:
4353 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4354 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4355 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4356 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4357 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4358 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4359 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4360 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4361 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4362 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4363 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
4364 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
4365 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4366 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4367 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
4368 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4369 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4370 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4371 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4372 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4374 ; SI-GISEL-LABEL: v_log_f32_nnan_dynamic:
4375 ; SI-GISEL:       ; %bb.0:
4376 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4377 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4378 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4379 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4380 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4381 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4382 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4383 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4384 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
4385 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4386 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
4387 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
4388 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4389 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4390 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
4391 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4392 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4393 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4394 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4395 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4397 ; VI-SDAG-LABEL: v_log_f32_nnan_dynamic:
4398 ; VI-SDAG:       ; %bb.0:
4399 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4400 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4401 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4402 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4403 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4404 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4405 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4406 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4407 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4408 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
4409 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
4410 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
4411 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
4412 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
4413 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
4414 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4415 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4416 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
4417 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4418 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4419 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4420 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4421 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4423 ; VI-GISEL-LABEL: v_log_f32_nnan_dynamic:
4424 ; VI-GISEL:       ; %bb.0:
4425 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4426 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4427 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4428 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4429 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4430 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4431 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4432 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4433 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
4434 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v2
4435 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
4436 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
4437 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
4438 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
4439 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4440 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4441 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4442 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
4443 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4444 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4445 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4446 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4447 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4449 ; GFX900-SDAG-LABEL: v_log_f32_nnan_dynamic:
4450 ; GFX900-SDAG:       ; %bb.0:
4451 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4452 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4453 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4454 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4455 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4456 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4457 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
4458 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4459 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4460 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4461 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
4462 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
4463 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4464 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4465 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
4466 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4467 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4468 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4469 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4470 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
4472 ; GFX900-GISEL-LABEL: v_log_f32_nnan_dynamic:
4473 ; GFX900-GISEL:       ; %bb.0:
4474 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4475 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4476 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4477 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4478 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4479 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4480 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
4481 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4482 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
4483 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4484 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
4485 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
4486 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4487 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4488 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
4489 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4490 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4491 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4492 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4493 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
4495 ; GFX1100-SDAG-LABEL: v_log_f32_nnan_dynamic:
4496 ; GFX1100-SDAG:       ; %bb.0:
4497 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4498 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
4499 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
4500 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4501 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4502 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
4503 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
4504 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4505 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
4506 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4507 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
4508 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
4509 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4510 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4511 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
4512 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
4513 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4514 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4515 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
4517 ; GFX1100-GISEL-LABEL: v_log_f32_nnan_dynamic:
4518 ; GFX1100-GISEL:       ; %bb.0:
4519 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4520 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
4521 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
4522 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4523 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4524 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
4525 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
4526 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4527 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
4528 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4529 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
4530 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
4531 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4532 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4533 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
4534 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
4535 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4536 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4537 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
4539 ; R600-LABEL: v_log_f32_nnan_dynamic:
4540 ; R600:       ; %bb.0:
4541 ; R600-NEXT:    CF_END
4542 ; R600-NEXT:    PAD
4544 ; CM-LABEL: v_log_f32_nnan_dynamic:
4545 ; CM:       ; %bb.0:
4546 ; CM-NEXT:    CF_END
4547 ; CM-NEXT:    PAD
4548   %result = call nnan float @llvm.log.f32(float %in)
4549   ret float %result
4552 define float @v_log_f32_ninf_daz(float %in) #0 {
4553 ; SI-SDAG-LABEL: v_log_f32_ninf_daz:
4554 ; SI-SDAG:       ; %bb.0:
4555 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4556 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4557 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4558 ; SI-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
4559 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
4560 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4561 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4562 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
4563 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4564 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
4565 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4566 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4568 ; SI-GISEL-LABEL: v_log_f32_ninf_daz:
4569 ; SI-GISEL:       ; %bb.0:
4570 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4571 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4572 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4573 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
4574 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4575 ; SI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
4576 ; SI-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
4577 ; SI-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
4578 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
4579 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
4580 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4581 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4583 ; VI-SDAG-LABEL: v_log_f32_ninf_daz:
4584 ; VI-SDAG:       ; %bb.0:
4585 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4586 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4587 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4588 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4589 ; VI-SDAG-NEXT:    v_sub_f32_e32 v3, v0, v1
4590 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v1
4591 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v3
4592 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
4593 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v2, v4
4594 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4595 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
4596 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4597 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
4598 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4599 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4601 ; VI-GISEL-LABEL: v_log_f32_ninf_daz:
4602 ; VI-GISEL:       ; %bb.0:
4603 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4604 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4605 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4606 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
4607 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
4608 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v2
4609 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
4610 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
4611 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4612 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
4613 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4614 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4615 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
4616 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4617 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4619 ; GFX900-SDAG-LABEL: v_log_f32_ninf_daz:
4620 ; GFX900-SDAG:       ; %bb.0:
4621 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4622 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
4623 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4624 ; GFX900-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
4625 ; GFX900-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
4626 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4627 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4628 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
4629 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4630 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
4631 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4632 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
4634 ; GFX900-GISEL-LABEL: v_log_f32_ninf_daz:
4635 ; GFX900-GISEL:       ; %bb.0:
4636 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4637 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
4638 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4639 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
4640 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4641 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
4642 ; GFX900-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
4643 ; GFX900-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
4644 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
4645 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
4646 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
4647 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
4649 ; GFX1100-SDAG-LABEL: v_log_f32_ninf_daz:
4650 ; GFX1100-SDAG:       ; %bb.0:
4651 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4652 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
4653 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
4654 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4655 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
4656 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4657 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
4658 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
4659 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4660 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4661 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
4662 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
4664 ; GFX1100-GISEL-LABEL: v_log_f32_ninf_daz:
4665 ; GFX1100-GISEL:       ; %bb.0:
4666 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4667 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
4668 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
4669 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4670 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
4671 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4672 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
4673 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
4674 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4675 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4676 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
4677 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
4679 ; R600-LABEL: v_log_f32_ninf_daz:
4680 ; R600:       ; %bb.0:
4681 ; R600-NEXT:    CF_END
4682 ; R600-NEXT:    PAD
4684 ; CM-LABEL: v_log_f32_ninf_daz:
4685 ; CM:       ; %bb.0:
4686 ; CM-NEXT:    CF_END
4687 ; CM-NEXT:    PAD
4688   %result = call ninf float @llvm.log.f32(float %in)
4689   ret float %result
4692 define float @v_log_f32_ninf_dynamic(float %in) #1 {
4693 ; SI-SDAG-LABEL: v_log_f32_ninf_dynamic:
4694 ; SI-SDAG:       ; %bb.0:
4695 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4696 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4697 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4698 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4699 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4700 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4701 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4702 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4703 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4704 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4705 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
4706 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
4707 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4708 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4709 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
4710 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4711 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4712 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4713 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4714 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4716 ; SI-GISEL-LABEL: v_log_f32_ninf_dynamic:
4717 ; SI-GISEL:       ; %bb.0:
4718 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4719 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4720 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4721 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4722 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4723 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4724 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4725 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4726 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
4727 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4728 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
4729 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
4730 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4731 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4732 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
4733 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4734 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4735 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4736 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4737 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4739 ; VI-SDAG-LABEL: v_log_f32_ninf_dynamic:
4740 ; VI-SDAG:       ; %bb.0:
4741 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4742 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4743 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4744 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4745 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4746 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4747 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4748 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4749 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4750 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
4751 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
4752 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
4753 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
4754 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
4755 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
4756 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4757 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4758 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
4759 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4760 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4761 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4762 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4763 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4765 ; VI-GISEL-LABEL: v_log_f32_ninf_dynamic:
4766 ; VI-GISEL:       ; %bb.0:
4767 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4768 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4769 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4770 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4771 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4772 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4773 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4774 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4775 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
4776 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v2
4777 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
4778 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
4779 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
4780 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
4781 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4782 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4783 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4784 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
4785 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4786 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4787 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4788 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4789 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4791 ; GFX900-SDAG-LABEL: v_log_f32_ninf_dynamic:
4792 ; GFX900-SDAG:       ; %bb.0:
4793 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4794 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4795 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4796 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4797 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4798 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4799 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
4800 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4801 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4802 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4803 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
4804 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
4805 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
4806 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4807 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
4808 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4809 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4810 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4811 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4812 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
4814 ; GFX900-GISEL-LABEL: v_log_f32_ninf_dynamic:
4815 ; GFX900-GISEL:       ; %bb.0:
4816 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4817 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4818 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4819 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4820 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4821 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4822 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
4823 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4824 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
4825 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4826 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
4827 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
4828 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4829 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
4830 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
4831 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
4832 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4833 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4834 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4835 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
4837 ; GFX1100-SDAG-LABEL: v_log_f32_ninf_dynamic:
4838 ; GFX1100-SDAG:       ; %bb.0:
4839 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4840 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
4841 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
4842 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4843 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4844 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
4845 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
4846 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4847 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
4848 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4849 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
4850 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
4851 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4852 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
4853 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
4854 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
4855 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4856 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4857 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
4859 ; GFX1100-GISEL-LABEL: v_log_f32_ninf_dynamic:
4860 ; GFX1100-GISEL:       ; %bb.0:
4861 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4862 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
4863 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
4864 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4865 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4866 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
4867 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
4868 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4869 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
4870 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4871 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
4872 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
4873 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4874 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
4875 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
4876 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
4877 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4878 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4879 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
4881 ; R600-LABEL: v_log_f32_ninf_dynamic:
4882 ; R600:       ; %bb.0:
4883 ; R600-NEXT:    CF_END
4884 ; R600-NEXT:    PAD
4886 ; CM-LABEL: v_log_f32_ninf_dynamic:
4887 ; CM:       ; %bb.0:
4888 ; CM-NEXT:    CF_END
4889 ; CM-NEXT:    PAD
4890   %result = call ninf float @llvm.log.f32(float %in)
4891   ret float %result
4894 define float @v_log_f32_nnan_ninf(float %in) {
4895 ; SI-SDAG-LABEL: v_log_f32_nnan_ninf:
4896 ; SI-SDAG:       ; %bb.0:
4897 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4898 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4899 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4900 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4901 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4902 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4903 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4904 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4905 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4906 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4907 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
4908 ; SI-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v2
4909 ; SI-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
4910 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4911 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4912 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4913 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4915 ; SI-GISEL-LABEL: v_log_f32_nnan_ninf:
4916 ; SI-GISEL:       ; %bb.0:
4917 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4918 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4919 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4920 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4921 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4922 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4923 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4924 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
4925 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
4926 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4927 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
4928 ; SI-GISEL-NEXT:    v_fma_f32 v0, v0, v3, v2
4929 ; SI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
4930 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4931 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4932 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4933 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4935 ; VI-SDAG-LABEL: v_log_f32_nnan_ninf:
4936 ; VI-SDAG:       ; %bb.0:
4937 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4938 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4939 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4940 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4941 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4942 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4943 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
4944 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4945 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4946 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v0
4947 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3805fdf4, v0
4948 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
4949 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v3, v0
4950 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v2, v0
4951 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4952 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
4953 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4954 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4955 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4956 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
4958 ; VI-GISEL-LABEL: v_log_f32_nnan_ninf:
4959 ; VI-GISEL:       ; %bb.0:
4960 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4961 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
4962 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
4963 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
4964 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
4965 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
4966 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
4967 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
4968 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4969 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v0
4970 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
4971 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v3, v2
4972 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317000, v0
4973 ; VI-GISEL-NEXT:    v_add_f32_e32 v0, v0, v2
4974 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
4975 ; VI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
4976 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4977 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4978 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
4979 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
4981 ; GFX900-SDAG-LABEL: v_log_f32_nnan_ninf:
4982 ; GFX900-SDAG:       ; %bb.0:
4983 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4984 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
4985 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
4986 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
4987 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
4988 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
4989 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
4990 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
4991 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
4992 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
4993 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
4994 ; GFX900-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v2
4995 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
4996 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
4997 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
4998 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
4999 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
5001 ; GFX900-GISEL-LABEL: v_log_f32_nnan_ninf:
5002 ; GFX900-GISEL:       ; %bb.0:
5003 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5004 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
5005 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
5006 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
5007 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
5008 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
5009 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
5010 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5011 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
5012 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5013 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
5014 ; GFX900-GISEL-NEXT:    v_fma_f32 v0, v0, v3, v2
5015 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
5016 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5017 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5018 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5019 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
5021 ; GFX1100-SDAG-LABEL: v_log_f32_nnan_ninf:
5022 ; GFX1100-SDAG:       ; %bb.0:
5023 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5024 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
5025 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
5026 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5027 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
5028 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
5029 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
5030 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5031 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5032 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
5033 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v0, v0, 0x3377d1cf, v2
5034 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
5035 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
5036 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
5037 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
5038 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
5040 ; GFX1100-GISEL-LABEL: v_log_f32_nnan_ninf:
5041 ; GFX1100-GISEL:       ; %bb.0:
5042 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5043 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
5044 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
5045 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5046 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
5047 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
5048 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
5049 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5050 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5051 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
5052 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
5053 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
5054 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v0, v1, v2
5055 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
5056 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5057 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
5059 ; R600-LABEL: v_log_f32_nnan_ninf:
5060 ; R600:       ; %bb.0:
5061 ; R600-NEXT:    CF_END
5062 ; R600-NEXT:    PAD
5064 ; CM-LABEL: v_log_f32_nnan_ninf:
5065 ; CM:       ; %bb.0:
5066 ; CM-NEXT:    CF_END
5067 ; CM-NEXT:    PAD
5068   %result = call nnan ninf float @llvm.log.f32(float %in)
5069   ret float %result
5072 define float @v_log_f32_nnan_ninf_daz(float %in) #0 {
5073 ; SI-SDAG-LABEL: v_log_f32_nnan_ninf_daz:
5074 ; SI-SDAG:       ; %bb.0:
5075 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5076 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
5077 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5078 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5079 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5080 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
5081 ; SI-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v2
5082 ; SI-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
5083 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5085 ; SI-GISEL-LABEL: v_log_f32_nnan_ninf_daz:
5086 ; SI-GISEL:       ; %bb.0:
5087 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5088 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
5089 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5090 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
5091 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5092 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
5093 ; SI-GISEL-NEXT:    v_fma_f32 v0, v0, v3, v2
5094 ; SI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
5095 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5097 ; VI-LABEL: v_log_f32_nnan_ninf_daz:
5098 ; VI:       ; %bb.0:
5099 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5100 ; VI-NEXT:    v_log_f32_e32 v0, v0
5101 ; VI-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
5102 ; VI-NEXT:    v_sub_f32_e32 v0, v0, v1
5103 ; VI-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v1
5104 ; VI-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v0
5105 ; VI-NEXT:    v_mul_f32_e32 v0, 0x3f317000, v0
5106 ; VI-NEXT:    v_add_f32_e32 v2, v2, v3
5107 ; VI-NEXT:    v_add_f32_e32 v0, v0, v2
5108 ; VI-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
5109 ; VI-NEXT:    v_add_f32_e32 v0, v1, v0
5110 ; VI-NEXT:    s_setpc_b64 s[30:31]
5112 ; GFX900-SDAG-LABEL: v_log_f32_nnan_ninf_daz:
5113 ; GFX900-SDAG:       ; %bb.0:
5114 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5115 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
5116 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5117 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5118 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5119 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
5120 ; GFX900-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v2
5121 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
5122 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
5124 ; GFX900-GISEL-LABEL: v_log_f32_nnan_ninf_daz:
5125 ; GFX900-GISEL:       ; %bb.0:
5126 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5127 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
5128 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5129 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
5130 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5131 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
5132 ; GFX900-GISEL-NEXT:    v_fma_f32 v0, v0, v3, v2
5133 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
5134 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
5136 ; GFX1100-SDAG-LABEL: v_log_f32_nnan_ninf_daz:
5137 ; GFX1100-SDAG:       ; %bb.0:
5138 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5139 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
5140 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
5141 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5142 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5143 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
5144 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v0, v0, 0x3377d1cf, v2
5145 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5146 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
5147 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
5149 ; GFX1100-GISEL-LABEL: v_log_f32_nnan_ninf_daz:
5150 ; GFX1100-GISEL:       ; %bb.0:
5151 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5152 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
5153 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
5154 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5155 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5156 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
5157 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
5158 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5159 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v0, v1, v2
5160 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
5162 ; R600-LABEL: v_log_f32_nnan_ninf_daz:
5163 ; R600:       ; %bb.0:
5164 ; R600-NEXT:    CF_END
5165 ; R600-NEXT:    PAD
5167 ; CM-LABEL: v_log_f32_nnan_ninf_daz:
5168 ; CM:       ; %bb.0:
5169 ; CM-NEXT:    CF_END
5170 ; CM-NEXT:    PAD
5171   %result = call nnan ninf float @llvm.log.f32(float %in)
5172   ret float %result
5175 define float @v_log_f32_nnan_ninf_dynamic(float %in) #1 {
5176 ; SI-SDAG-LABEL: v_log_f32_nnan_ninf_dynamic:
5177 ; SI-SDAG:       ; %bb.0:
5178 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5179 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
5180 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
5181 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
5182 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
5183 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
5184 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
5185 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5186 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5187 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5188 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
5189 ; SI-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v2
5190 ; SI-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
5191 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5192 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5193 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
5194 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5196 ; SI-GISEL-LABEL: v_log_f32_nnan_ninf_dynamic:
5197 ; SI-GISEL:       ; %bb.0:
5198 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5199 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
5200 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
5201 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
5202 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
5203 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
5204 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
5205 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5206 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
5207 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5208 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
5209 ; SI-GISEL-NEXT:    v_fma_f32 v0, v0, v3, v2
5210 ; SI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
5211 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5212 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5213 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5214 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5216 ; VI-SDAG-LABEL: v_log_f32_nnan_ninf_dynamic:
5217 ; VI-SDAG:       ; %bb.0:
5218 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5219 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
5220 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
5221 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
5222 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
5223 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
5224 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
5225 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
5226 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
5227 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v0
5228 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3805fdf4, v0
5229 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
5230 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v3, v0
5231 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v2, v0
5232 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
5233 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
5234 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5235 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5236 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
5237 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5239 ; VI-GISEL-LABEL: v_log_f32_nnan_ninf_dynamic:
5240 ; VI-GISEL:       ; %bb.0:
5241 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5242 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
5243 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
5244 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
5245 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
5246 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
5247 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
5248 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
5249 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5250 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v0
5251 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
5252 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v3, v2
5253 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317000, v0
5254 ; VI-GISEL-NEXT:    v_add_f32_e32 v0, v0, v2
5255 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
5256 ; VI-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
5257 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5258 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5259 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5260 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5262 ; GFX900-SDAG-LABEL: v_log_f32_nnan_ninf_dynamic:
5263 ; GFX900-SDAG:       ; %bb.0:
5264 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5265 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
5266 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
5267 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
5268 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
5269 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
5270 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
5271 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5272 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5273 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5274 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
5275 ; GFX900-SDAG-NEXT:    v_fma_f32 v0, v0, s4, v2
5276 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
5277 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5278 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5279 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
5280 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
5282 ; GFX900-GISEL-LABEL: v_log_f32_nnan_ninf_dynamic:
5283 ; GFX900-GISEL:       ; %bb.0:
5284 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5285 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
5286 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
5287 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
5288 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
5289 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
5290 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
5291 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5292 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
5293 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5294 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
5295 ; GFX900-GISEL-NEXT:    v_fma_f32 v0, v0, v3, v2
5296 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v0, v1, v0
5297 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5298 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5299 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5300 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
5302 ; GFX1100-SDAG-LABEL: v_log_f32_nnan_ninf_dynamic:
5303 ; GFX1100-SDAG:       ; %bb.0:
5304 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5305 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
5306 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
5307 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5308 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
5309 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
5310 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
5311 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5312 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5313 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
5314 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v0, v0, 0x3377d1cf, v2
5315 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
5316 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v0, v1, v0
5317 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
5318 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
5319 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
5321 ; GFX1100-GISEL-LABEL: v_log_f32_nnan_ninf_dynamic:
5322 ; GFX1100-GISEL:       ; %bb.0:
5323 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5324 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
5325 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
5326 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5327 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
5328 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
5329 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
5330 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5331 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5332 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
5333 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
5334 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
5335 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v0, v1, v2
5336 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
5337 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5338 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
5340 ; R600-LABEL: v_log_f32_nnan_ninf_dynamic:
5341 ; R600:       ; %bb.0:
5342 ; R600-NEXT:    CF_END
5343 ; R600-NEXT:    PAD
5345 ; CM-LABEL: v_log_f32_nnan_ninf_dynamic:
5346 ; CM:       ; %bb.0:
5347 ; CM-NEXT:    CF_END
5348 ; CM-NEXT:    PAD
5349   %result = call nnan ninf float @llvm.log.f32(float %in)
5350   ret float %result
5353 define float @v_log_f32_fast_daz(float %in) #0 {
5354 ; GFX689-LABEL: v_log_f32_fast_daz:
5355 ; GFX689:       ; %bb.0:
5356 ; GFX689-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5357 ; GFX689-NEXT:    v_log_f32_e32 v0, v0
5358 ; GFX689-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
5359 ; GFX689-NEXT:    s_setpc_b64 s[30:31]
5361 ; GFX1100-LABEL: v_log_f32_fast_daz:
5362 ; GFX1100:       ; %bb.0:
5363 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5364 ; GFX1100-NEXT:    v_log_f32_e32 v0, v0
5365 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
5366 ; GFX1100-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
5367 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
5369 ; R600-LABEL: v_log_f32_fast_daz:
5370 ; R600:       ; %bb.0:
5371 ; R600-NEXT:    CF_END
5372 ; R600-NEXT:    PAD
5374 ; CM-LABEL: v_log_f32_fast_daz:
5375 ; CM:       ; %bb.0:
5376 ; CM-NEXT:    CF_END
5377 ; CM-NEXT:    PAD
5378   %result = call fast float @llvm.log.f32(float %in)
5379   ret float %result
5382 define float @v_log_f32_dynamic_mode(float %in) #1 {
5383 ; SI-SDAG-LABEL: v_log_f32_dynamic_mode:
5384 ; SI-SDAG:       ; %bb.0:
5385 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5386 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
5387 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
5388 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
5389 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
5390 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
5391 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
5392 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5393 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5394 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5395 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
5396 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
5397 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
5398 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5399 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
5400 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
5401 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5402 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5403 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
5404 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5406 ; SI-GISEL-LABEL: v_log_f32_dynamic_mode:
5407 ; SI-GISEL:       ; %bb.0:
5408 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5409 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
5410 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
5411 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
5412 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
5413 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
5414 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
5415 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5416 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
5417 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5418 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
5419 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
5420 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
5421 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
5422 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
5423 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
5424 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5425 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5426 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5427 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5429 ; VI-SDAG-LABEL: v_log_f32_dynamic_mode:
5430 ; VI-SDAG:       ; %bb.0:
5431 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5432 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
5433 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
5434 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
5435 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
5436 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
5437 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
5438 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
5439 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
5440 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
5441 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
5442 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
5443 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
5444 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
5445 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
5446 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
5447 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5448 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
5449 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
5450 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5451 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5452 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
5453 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5455 ; VI-GISEL-LABEL: v_log_f32_dynamic_mode:
5456 ; VI-GISEL:       ; %bb.0:
5457 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5458 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
5459 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
5460 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
5461 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
5462 ; VI-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
5463 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
5464 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
5465 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
5466 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v2
5467 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
5468 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v4, v3
5469 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
5470 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
5471 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
5472 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
5473 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
5474 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
5475 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
5476 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5477 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5478 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5479 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5481 ; GFX900-SDAG-LABEL: v_log_f32_dynamic_mode:
5482 ; GFX900-SDAG:       ; %bb.0:
5483 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5484 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
5485 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
5486 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
5487 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
5488 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
5489 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
5490 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5491 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5492 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5493 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
5494 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
5495 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
5496 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5497 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
5498 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
5499 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5500 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5501 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
5502 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
5504 ; GFX900-GISEL-LABEL: v_log_f32_dynamic_mode:
5505 ; GFX900-GISEL:       ; %bb.0:
5506 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5507 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
5508 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f800000
5509 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
5510 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
5511 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
5512 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
5513 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5514 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
5515 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5516 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
5517 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
5518 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
5519 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
5520 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
5521 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
5522 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5523 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5524 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5525 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
5527 ; GFX1100-SDAG-LABEL: v_log_f32_dynamic_mode:
5528 ; GFX1100-SDAG:       ; %bb.0:
5529 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5530 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
5531 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
5532 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5533 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
5534 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
5535 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
5536 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5537 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
5538 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
5539 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
5540 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
5541 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5542 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5543 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
5544 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
5545 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5546 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
5547 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
5549 ; GFX1100-GISEL-LABEL: v_log_f32_dynamic_mode:
5550 ; GFX1100-GISEL:       ; %bb.0:
5551 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5552 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
5553 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
5554 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5555 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v0, v0, v1
5556 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
5557 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
5558 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5559 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
5560 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
5561 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
5562 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
5563 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5564 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
5565 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
5566 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
5567 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5568 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5569 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
5571 ; R600-LABEL: v_log_f32_dynamic_mode:
5572 ; R600:       ; %bb.0:
5573 ; R600-NEXT:    CF_END
5574 ; R600-NEXT:    PAD
5576 ; CM-LABEL: v_log_f32_dynamic_mode:
5577 ; CM:       ; %bb.0:
5578 ; CM-NEXT:    CF_END
5579 ; CM-NEXT:    PAD
5580   %result = call float @llvm.log.f32(float %in)
5581   ret float %result
5584 define float @v_log_f32_undef() {
5585 ; SI-SDAG-LABEL: v_log_f32_undef:
5586 ; SI-SDAG:       ; %bb.0:
5587 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5588 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, s4
5589 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5590 ; SI-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
5591 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
5592 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5593 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5594 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
5595 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5596 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
5597 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5598 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5600 ; SI-GISEL-LABEL: v_log_f32_undef:
5601 ; SI-GISEL:       ; %bb.0:
5602 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5603 ; SI-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
5604 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
5605 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, s4, v1
5606 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
5607 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5608 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
5609 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5610 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
5611 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5612 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
5613 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
5614 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
5615 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
5616 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
5617 ; SI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
5618 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5619 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5620 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5621 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5623 ; VI-SDAG-LABEL: v_log_f32_undef:
5624 ; VI-SDAG:       ; %bb.0:
5625 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5626 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, s4
5627 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
5628 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
5629 ; VI-SDAG-NEXT:    v_sub_f32_e32 v3, v0, v1
5630 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v1
5631 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v3
5632 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
5633 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v2, v4
5634 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
5635 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
5636 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5637 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
5638 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5639 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5641 ; VI-GISEL-LABEL: v_log_f32_undef:
5642 ; VI-GISEL:       ; %bb.0:
5643 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5644 ; VI-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
5645 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
5646 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, s4, v1
5647 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
5648 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5649 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
5650 ; VI-GISEL-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
5651 ; VI-GISEL-NEXT:    v_sub_f32_e32 v2, v0, v1
5652 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
5653 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v2
5654 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
5655 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
5656 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
5657 ; VI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
5658 ; VI-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
5659 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
5660 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
5661 ; VI-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
5662 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5663 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5664 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5665 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5667 ; GFX900-SDAG-LABEL: v_log_f32_undef:
5668 ; GFX900-SDAG:       ; %bb.0:
5669 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5670 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, s4
5671 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5672 ; GFX900-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
5673 ; GFX900-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
5674 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5675 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5676 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
5677 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5678 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
5679 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5680 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
5682 ; GFX900-GISEL-LABEL: v_log_f32_undef:
5683 ; GFX900-GISEL:       ; %bb.0:
5684 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5685 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v0, 0x800000
5686 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4f800000
5687 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, s4, v1
5688 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, s4, v0
5689 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5690 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
5691 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5692 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x3377d1cf
5693 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5694 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, s4, -v1
5695 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v3, v2
5696 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
5697 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
5698 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, v2
5699 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
5700 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41b17218
5701 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
5702 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5703 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
5705 ; GFX1100-SDAG-LABEL: v_log_f32_undef:
5706 ; GFX1100-SDAG:       ; %bb.0:
5707 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5708 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, s0
5709 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
5710 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5711 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
5712 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
5713 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
5714 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
5715 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5716 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5717 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
5718 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
5720 ; GFX1100-GISEL-LABEL: v_log_f32_undef:
5721 ; GFX1100-GISEL:       ; %bb.0:
5722 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5723 ; GFX1100-GISEL-NEXT:    v_mul_f32_e64 v0, 0x4f800000, s0
5724 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x800000, s0
5725 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
5726 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, s0, v0, vcc_lo
5727 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
5728 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
5729 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5730 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
5731 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
5732 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
5733 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
5734 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5735 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
5736 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
5737 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
5738 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5739 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5740 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
5742 ; R600-LABEL: v_log_f32_undef:
5743 ; R600:       ; %bb.0:
5744 ; R600-NEXT:    CF_END
5745 ; R600-NEXT:    PAD
5747 ; CM-LABEL: v_log_f32_undef:
5748 ; CM:       ; %bb.0:
5749 ; CM-NEXT:    CF_END
5750 ; CM-NEXT:    PAD
5751   %result = call float @llvm.log.f32(float undef)
5752   ret float %result
5755 define float @v_log_f32_0() {
5756 ; SI-SDAG-LABEL: v_log_f32_0:
5757 ; SI-SDAG:       ; %bb.0:
5758 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5759 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, 0
5760 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5761 ; SI-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
5762 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
5763 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5764 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5765 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
5766 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5767 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
5768 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5769 ; SI-SDAG-NEXT:    v_add_f32_e32 v0, 0xc1b17218, v0
5770 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5772 ; SI-GISEL-LABEL: v_log_f32_0:
5773 ; SI-GISEL:       ; %bb.0:
5774 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5775 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, 0
5776 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5777 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x3377d1cf
5778 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
5779 ; SI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
5780 ; SI-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
5781 ; SI-GISEL-NEXT:    v_fma_f32 v2, v0, v2, v4
5782 ; SI-GISEL-NEXT:    v_add_f32_e32 v2, v3, v2
5783 ; SI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x7f800000
5784 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
5785 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
5786 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x41b17218
5787 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
5788 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc
5789 ; SI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5790 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5792 ; VI-SDAG-LABEL: v_log_f32_0:
5793 ; VI-SDAG:       ; %bb.0:
5794 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5795 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, 0
5796 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
5797 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
5798 ; VI-SDAG-NEXT:    v_sub_f32_e32 v3, v0, v1
5799 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v1
5800 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v3
5801 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
5802 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v2, v4
5803 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
5804 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
5805 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5806 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
5807 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5808 ; VI-SDAG-NEXT:    v_add_f32_e32 v0, 0xc1b17218, v0
5809 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5811 ; VI-GISEL-LABEL: v_log_f32_0:
5812 ; VI-GISEL:       ; %bb.0:
5813 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5814 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, 0
5815 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
5816 ; VI-GISEL-NEXT:    v_and_b32_e32 v2, 0xfffff000, v0
5817 ; VI-GISEL-NEXT:    v_sub_f32_e32 v3, v0, v2
5818 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v2
5819 ; VI-GISEL-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v3
5820 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
5821 ; VI-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
5822 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
5823 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
5824 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
5825 ; VI-GISEL-NEXT:    v_mov_b32_e32 v3, 0x7f800000
5826 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
5827 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
5828 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x41b17218
5829 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
5830 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc
5831 ; VI-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5832 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5834 ; GFX900-SDAG-LABEL: v_log_f32_0:
5835 ; GFX900-SDAG:       ; %bb.0:
5836 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5837 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, 0
5838 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5839 ; GFX900-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
5840 ; GFX900-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
5841 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5842 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5843 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
5844 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5845 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
5846 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5847 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v0, 0xc1b17218, v0
5848 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
5850 ; GFX900-GISEL-LABEL: v_log_f32_0:
5851 ; GFX900-GISEL:       ; %bb.0:
5852 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5853 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, 0
5854 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5855 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x3377d1cf
5856 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x800000
5857 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
5858 ; GFX900-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
5859 ; GFX900-GISEL-NEXT:    v_fma_f32 v2, v0, v2, v4
5860 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v2, v3, v2
5861 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v3, 0x7f800000
5862 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3
5863 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
5864 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x41b17218
5865 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e32 vcc, 0, v1
5866 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc
5867 ; GFX900-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5868 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
5870 ; GFX1100-SDAG-LABEL: v_log_f32_0:
5871 ; GFX1100-SDAG:       ; %bb.0:
5872 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5873 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, 0
5874 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
5875 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5876 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
5877 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
5878 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
5879 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
5880 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5881 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5882 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
5883 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5884 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v0, 0xc1b17218, v0
5885 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
5887 ; GFX1100-GISEL-LABEL: v_log_f32_0:
5888 ; GFX1100-GISEL:       ; %bb.0:
5889 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5890 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, 0
5891 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 s0, 0x800000, 0
5892 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
5893 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5894 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
5895 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
5896 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
5897 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
5898 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5899 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
5900 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
5901 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, s0
5902 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5903 ; GFX1100-GISEL-NEXT:    v_sub_f32_e32 v0, v0, v1
5904 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
5906 ; R600-LABEL: v_log_f32_0:
5907 ; R600:       ; %bb.0:
5908 ; R600-NEXT:    CF_END
5909 ; R600-NEXT:    PAD
5911 ; CM-LABEL: v_log_f32_0:
5912 ; CM:       ; %bb.0:
5913 ; CM-NEXT:    CF_END
5914 ; CM-NEXT:    PAD
5915   %result = call float @llvm.log.f32(float 0.0)
5916   ret float %result
5919 define float @v_log_f32_from_fpext_f16(i16 %src.i) {
5920 ; SI-SDAG-LABEL: v_log_f32_from_fpext_f16:
5921 ; SI-SDAG:       ; %bb.0:
5922 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5923 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
5924 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5925 ; SI-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
5926 ; SI-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
5927 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
5928 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5929 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
5930 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
5931 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5932 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
5933 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5934 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5936 ; SI-GISEL-LABEL: v_log_f32_from_fpext_f16:
5937 ; SI-GISEL:       ; %bb.0:
5938 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5939 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
5940 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
5941 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
5942 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
5943 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
5944 ; SI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
5945 ; SI-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
5946 ; SI-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
5947 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
5948 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
5949 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5950 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5952 ; VI-SDAG-LABEL: v_log_f32_from_fpext_f16:
5953 ; VI-SDAG:       ; %bb.0:
5954 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5955 ; VI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
5956 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
5957 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
5958 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
5959 ; VI-SDAG-NEXT:    v_sub_f32_e32 v3, v0, v1
5960 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v1
5961 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v3
5962 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
5963 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v2, v4
5964 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
5965 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
5966 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
5967 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
5968 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
5969 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
5971 ; VI-GISEL-LABEL: v_log_f32_from_fpext_f16:
5972 ; VI-GISEL:       ; %bb.0:
5973 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5974 ; VI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
5975 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x7f800000
5976 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
5977 ; VI-GISEL-NEXT:    v_and_b32_e32 v2, 0xfffff000, v0
5978 ; VI-GISEL-NEXT:    v_sub_f32_e32 v3, v0, v2
5979 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v2
5980 ; VI-GISEL-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v3
5981 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
5982 ; VI-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
5983 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
5984 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
5985 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
5986 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
5987 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
5988 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
5990 ; GFX900-SDAG-LABEL: v_log_f32_from_fpext_f16:
5991 ; GFX900-SDAG:       ; %bb.0:
5992 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5993 ; GFX900-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
5994 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
5995 ; GFX900-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
5996 ; GFX900-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
5997 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
5998 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
5999 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
6000 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
6001 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
6002 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
6003 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
6004 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
6006 ; GFX900-GISEL-LABEL: v_log_f32_from_fpext_f16:
6007 ; GFX900-GISEL:       ; %bb.0:
6008 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6009 ; GFX900-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6010 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
6011 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
6012 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
6013 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
6014 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
6015 ; GFX900-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
6016 ; GFX900-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
6017 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
6018 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
6019 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
6020 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
6022 ; GFX1100-SDAG-LABEL: v_log_f32_from_fpext_f16:
6023 ; GFX1100-SDAG:       ; %bb.0:
6024 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6025 ; GFX1100-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6026 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
6027 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
6028 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
6029 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
6030 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
6031 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
6032 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6033 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
6034 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
6035 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6036 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
6037 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
6039 ; GFX1100-GISEL-LABEL: v_log_f32_from_fpext_f16:
6040 ; GFX1100-GISEL:       ; %bb.0:
6041 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6042 ; GFX1100-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6043 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
6044 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
6045 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
6046 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
6047 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
6048 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
6049 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6050 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
6051 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
6052 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6053 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
6054 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
6056 ; R600-LABEL: v_log_f32_from_fpext_f16:
6057 ; R600:       ; %bb.0:
6058 ; R600-NEXT:    CF_END
6059 ; R600-NEXT:    PAD
6061 ; CM-LABEL: v_log_f32_from_fpext_f16:
6062 ; CM:       ; %bb.0:
6063 ; CM-NEXT:    CF_END
6064 ; CM-NEXT:    PAD
6065   %src = bitcast i16 %src.i to half
6066   %fpext = fpext half %src to float
6067   %result = call float @llvm.log.f32(float %fpext)
6068   ret float %result
6071 define float @v_log_f32_from_fpext_math_f16(i16 %src0.i, i16 %src1.i) {
6072 ; SI-SDAG-LABEL: v_log_f32_from_fpext_math_f16:
6073 ; SI-SDAG:       ; %bb.0:
6074 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6075 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6076 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
6077 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
6078 ; SI-SDAG-NEXT:    v_add_f32_e32 v0, v0, v1
6079 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
6080 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
6081 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
6082 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
6083 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6084 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
6085 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
6086 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
6087 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
6088 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
6089 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
6090 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
6091 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
6092 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
6093 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
6094 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
6095 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
6096 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6098 ; SI-GISEL-LABEL: v_log_f32_from_fpext_math_f16:
6099 ; SI-GISEL:       ; %bb.0:
6100 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6101 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6102 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
6103 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
6104 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
6105 ; SI-GISEL-NEXT:    v_add_f32_e32 v0, v0, v1
6106 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
6107 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
6108 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6109 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
6110 ; SI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
6111 ; SI-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
6112 ; SI-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
6113 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
6114 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
6115 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
6116 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6118 ; VI-SDAG-LABEL: v_log_f32_from_fpext_math_f16:
6119 ; VI-SDAG:       ; %bb.0:
6120 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6121 ; VI-SDAG-NEXT:    v_add_f16_e32 v0, v0, v1
6122 ; VI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6123 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
6124 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6125 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
6126 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
6127 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v1
6128 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3f317000, v2
6129 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
6130 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
6131 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
6132 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
6133 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
6134 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
6135 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
6136 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6138 ; VI-GISEL-LABEL: v_log_f32_from_fpext_math_f16:
6139 ; VI-GISEL:       ; %bb.0:
6140 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6141 ; VI-GISEL-NEXT:    v_add_f16_e32 v0, v0, v1
6142 ; VI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6143 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x7f800000
6144 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
6145 ; VI-GISEL-NEXT:    v_and_b32_e32 v2, 0xfffff000, v0
6146 ; VI-GISEL-NEXT:    v_sub_f32_e32 v3, v0, v2
6147 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v2
6148 ; VI-GISEL-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v3
6149 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
6150 ; VI-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
6151 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
6152 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
6153 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
6154 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
6155 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
6156 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6158 ; GFX900-SDAG-LABEL: v_log_f32_from_fpext_math_f16:
6159 ; GFX900-SDAG:       ; %bb.0:
6160 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6161 ; GFX900-SDAG-NEXT:    v_add_f16_e32 v0, v0, v1
6162 ; GFX900-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6163 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
6164 ; GFX900-SDAG-NEXT:    s_mov_b32 s5, 0x3377d1cf
6165 ; GFX900-SDAG-NEXT:    s_mov_b32 s6, 0x7f800000
6166 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
6167 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
6168 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
6169 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s5, v2
6170 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
6171 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s6
6172 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
6173 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
6175 ; GFX900-GISEL-LABEL: v_log_f32_from_fpext_math_f16:
6176 ; GFX900-GISEL:       ; %bb.0:
6177 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6178 ; GFX900-GISEL-NEXT:    v_add_f16_e32 v0, v0, v1
6179 ; GFX900-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6180 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
6181 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
6182 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
6183 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
6184 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
6185 ; GFX900-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
6186 ; GFX900-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
6187 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
6188 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
6189 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
6190 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
6192 ; GFX1100-SDAG-LABEL: v_log_f32_from_fpext_math_f16:
6193 ; GFX1100-SDAG:       ; %bb.0:
6194 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6195 ; GFX1100-SDAG-NEXT:    v_add_f16_e32 v0, v0, v1
6196 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6197 ; GFX1100-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6198 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
6199 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
6200 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
6201 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
6202 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
6203 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
6204 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
6205 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6206 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
6207 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
6208 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
6210 ; GFX1100-GISEL-LABEL: v_log_f32_from_fpext_math_f16:
6211 ; GFX1100-GISEL:       ; %bb.0:
6212 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6213 ; GFX1100-GISEL-NEXT:    v_add_f16_e32 v0, v0, v1
6214 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6215 ; GFX1100-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6216 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
6217 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
6218 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
6219 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
6220 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
6221 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
6222 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
6223 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6224 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
6225 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
6226 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
6228 ; R600-LABEL: v_log_f32_from_fpext_math_f16:
6229 ; R600:       ; %bb.0:
6230 ; R600-NEXT:    CF_END
6231 ; R600-NEXT:    PAD
6233 ; CM-LABEL: v_log_f32_from_fpext_math_f16:
6234 ; CM:       ; %bb.0:
6235 ; CM-NEXT:    CF_END
6236 ; CM-NEXT:    PAD
6237   %src0 = bitcast i16 %src0.i to half
6238   %src1 = bitcast i16 %src1.i to half
6239   %fadd = fadd half %src0, %src1
6240   %fpext = fpext half %fadd to float
6241   %result = call float @llvm.log.f32(float %fpext)
6242   ret float %result
6245 define float @v_log_f32_from_fpext_bf16(bfloat %src) {
6246 ; SI-SDAG-LABEL: v_log_f32_from_fpext_bf16:
6247 ; SI-SDAG:       ; %bb.0:
6248 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6249 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
6250 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
6251 ; SI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
6252 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
6253 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
6254 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6255 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
6256 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
6257 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
6258 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
6259 ; SI-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
6260 ; SI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
6261 ; SI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
6262 ; SI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
6263 ; SI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
6264 ; SI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
6265 ; SI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
6266 ; SI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
6267 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6269 ; SI-GISEL-LABEL: v_log_f32_from_fpext_bf16:
6270 ; SI-GISEL:       ; %bb.0:
6271 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6272 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6273 ; SI-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
6274 ; SI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
6275 ; SI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
6276 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
6277 ; SI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
6278 ; SI-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
6279 ; SI-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
6280 ; SI-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
6281 ; SI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
6282 ; SI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
6283 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6285 ; VI-SDAG-LABEL: v_log_f32_from_fpext_bf16:
6286 ; VI-SDAG:       ; %bb.0:
6287 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6288 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x800000
6289 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
6290 ; VI-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
6291 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
6292 ; VI-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
6293 ; VI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6294 ; VI-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
6295 ; VI-SDAG-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
6296 ; VI-SDAG-NEXT:    v_sub_f32_e32 v2, v0, v1
6297 ; VI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
6298 ; VI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
6299 ; VI-SDAG-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
6300 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v4, v2
6301 ; VI-SDAG-NEXT:    v_add_f32_e32 v2, v3, v2
6302 ; VI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
6303 ; VI-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
6304 ; VI-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
6305 ; VI-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
6306 ; VI-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
6307 ; VI-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
6308 ; VI-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
6309 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6311 ; VI-GISEL-LABEL: v_log_f32_from_fpext_bf16:
6312 ; VI-GISEL:       ; %bb.0:
6313 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6314 ; VI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6315 ; VI-GISEL-NEXT:    v_mov_b32_e32 v1, 0x7f800000
6316 ; VI-GISEL-NEXT:    v_log_f32_e32 v0, v0
6317 ; VI-GISEL-NEXT:    v_and_b32_e32 v2, 0xfffff000, v0
6318 ; VI-GISEL-NEXT:    v_sub_f32_e32 v3, v0, v2
6319 ; VI-GISEL-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v2
6320 ; VI-GISEL-NEXT:    v_mul_f32_e32 v5, 0x3805fdf4, v3
6321 ; VI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v3
6322 ; VI-GISEL-NEXT:    v_add_f32_e32 v4, v4, v5
6323 ; VI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317000, v2
6324 ; VI-GISEL-NEXT:    v_add_f32_e32 v3, v3, v4
6325 ; VI-GISEL-NEXT:    v_add_f32_e32 v2, v2, v3
6326 ; VI-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1
6327 ; VI-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
6328 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6330 ; GFX900-SDAG-LABEL: v_log_f32_from_fpext_bf16:
6331 ; GFX900-SDAG:       ; %bb.0:
6332 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6333 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x800000
6334 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4f800000
6335 ; GFX900-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
6336 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
6337 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
6338 ; GFX900-SDAG-NEXT:    v_log_f32_e32 v0, v0
6339 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3f317217
6340 ; GFX900-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
6341 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, -v1
6342 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x3377d1cf
6343 ; GFX900-SDAG-NEXT:    v_fma_f32 v2, v0, s4, v2
6344 ; GFX900-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000
6345 ; GFX900-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
6346 ; GFX900-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
6347 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
6348 ; GFX900-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41b17218
6349 ; GFX900-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
6350 ; GFX900-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
6351 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
6353 ; GFX900-GISEL-LABEL: v_log_f32_from_fpext_bf16:
6354 ; GFX900-GISEL:       ; %bb.0:
6355 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6356 ; GFX900-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6357 ; GFX900-GISEL-NEXT:    s_mov_b32 s4, 0x3f317217
6358 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3377d1cf
6359 ; GFX900-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000
6360 ; GFX900-GISEL-NEXT:    v_log_f32_e32 v0, v0
6361 ; GFX900-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317217, v0
6362 ; GFX900-GISEL-NEXT:    v_fma_f32 v4, v0, s4, -v3
6363 ; GFX900-GISEL-NEXT:    v_fma_f32 v1, v0, v1, v4
6364 ; GFX900-GISEL-NEXT:    v_add_f32_e32 v1, v3, v1
6365 ; GFX900-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2
6366 ; GFX900-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
6367 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
6369 ; GFX1100-SDAG-LABEL: v_log_f32_from_fpext_bf16:
6370 ; GFX1100-SDAG:       ; %bb.0:
6371 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6372 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
6373 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
6374 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6375 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v0, v0, v1
6376 ; GFX1100-SDAG-NEXT:    v_log_f32_e32 v0, v0
6377 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
6378 ; GFX1100-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
6379 ; GFX1100-SDAG-NEXT:    v_cmp_gt_f32_e64 s0, 0x7f800000, |v0|
6380 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
6381 ; GFX1100-SDAG-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
6382 ; GFX1100-SDAG-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
6383 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6384 ; GFX1100-SDAG-NEXT:    v_add_f32_e32 v1, v1, v2
6385 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s0
6386 ; GFX1100-SDAG-NEXT:    v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo
6387 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6388 ; GFX1100-SDAG-NEXT:    v_sub_f32_e32 v0, v0, v1
6389 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
6391 ; GFX1100-GISEL-LABEL: v_log_f32_from_fpext_bf16:
6392 ; GFX1100-GISEL:       ; %bb.0:
6393 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6394 ; GFX1100-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6395 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
6396 ; GFX1100-GISEL-NEXT:    v_log_f32_e32 v0, v0
6397 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
6398 ; GFX1100-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
6399 ; GFX1100-GISEL-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
6400 ; GFX1100-GISEL-NEXT:    v_fma_f32 v2, v0, 0x3f317217, -v1
6401 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6402 ; GFX1100-GISEL-NEXT:    v_fmac_f32_e32 v2, 0x3377d1cf, v0
6403 ; GFX1100-GISEL-NEXT:    v_add_f32_e32 v1, v1, v2
6404 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6405 ; GFX1100-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
6406 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
6408 ; R600-LABEL: v_log_f32_from_fpext_bf16:
6409 ; R600:       ; %bb.0:
6410 ; R600-NEXT:    CF_END
6411 ; R600-NEXT:    PAD
6413 ; CM-LABEL: v_log_f32_from_fpext_bf16:
6414 ; CM:       ; %bb.0:
6415 ; CM-NEXT:    CF_END
6416 ; CM-NEXT:    PAD
6417   %fpext = fpext bfloat %src to float
6418   %result = call float @llvm.log.f32(float %fpext)
6419   ret float %result
6422 define half @v_log_f16(half %in) {
6423 ; SI-SDAG-LABEL: v_log_f16:
6424 ; SI-SDAG:       ; %bb.0:
6425 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6426 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6427 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6428 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6429 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6430 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6431 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6432 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6434 ; SI-GISEL-LABEL: v_log_f16:
6435 ; SI-GISEL:       ; %bb.0:
6436 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6437 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6438 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
6439 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6440 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
6441 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6443 ; VI-LABEL: v_log_f16:
6444 ; VI:       ; %bb.0:
6445 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6446 ; VI-NEXT:    v_log_f16_e32 v0, v0
6447 ; VI-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6448 ; VI-NEXT:    s_setpc_b64 s[30:31]
6450 ; GFX900-LABEL: v_log_f16:
6451 ; GFX900:       ; %bb.0:
6452 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6453 ; GFX900-NEXT:    v_log_f16_e32 v0, v0
6454 ; GFX900-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6455 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
6457 ; GFX1100-LABEL: v_log_f16:
6458 ; GFX1100:       ; %bb.0:
6459 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6460 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
6461 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
6462 ; GFX1100-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6463 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
6465 ; R600-LABEL: v_log_f16:
6466 ; R600:       ; %bb.0:
6467 ; R600-NEXT:    CF_END
6468 ; R600-NEXT:    PAD
6470 ; CM-LABEL: v_log_f16:
6471 ; CM:       ; %bb.0:
6472 ; CM-NEXT:    CF_END
6473 ; CM-NEXT:    PAD
6474   %result = call half @llvm.log.f16(half %in)
6475   ret half %result
6478 define half @v_log_fabs_f16(half %in) {
6479 ; SI-SDAG-LABEL: v_log_fabs_f16:
6480 ; SI-SDAG:       ; %bb.0:
6481 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6482 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6483 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e64 v0, |v0|
6484 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6485 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6486 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6487 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6488 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6490 ; SI-GISEL-LABEL: v_log_fabs_f16:
6491 ; SI-GISEL:       ; %bb.0:
6492 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6493 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e64 v0, |v0|
6494 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
6495 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6496 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
6497 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6499 ; VI-LABEL: v_log_fabs_f16:
6500 ; VI:       ; %bb.0:
6501 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6502 ; VI-NEXT:    v_log_f16_e64 v0, |v0|
6503 ; VI-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6504 ; VI-NEXT:    s_setpc_b64 s[30:31]
6506 ; GFX900-LABEL: v_log_fabs_f16:
6507 ; GFX900:       ; %bb.0:
6508 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6509 ; GFX900-NEXT:    v_log_f16_e64 v0, |v0|
6510 ; GFX900-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6511 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
6513 ; GFX1100-LABEL: v_log_fabs_f16:
6514 ; GFX1100:       ; %bb.0:
6515 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6516 ; GFX1100-NEXT:    v_log_f16_e64 v0, |v0|
6517 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
6518 ; GFX1100-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6519 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
6521 ; R600-LABEL: v_log_fabs_f16:
6522 ; R600:       ; %bb.0:
6523 ; R600-NEXT:    CF_END
6524 ; R600-NEXT:    PAD
6526 ; CM-LABEL: v_log_fabs_f16:
6527 ; CM:       ; %bb.0:
6528 ; CM-NEXT:    CF_END
6529 ; CM-NEXT:    PAD
6530   %fabs = call half @llvm.fabs.f16(half %in)
6531   %result = call half @llvm.log.f16(half %fabs)
6532   ret half %result
6535 define half @v_log_fneg_fabs_f16(half %in) {
6536 ; SI-SDAG-LABEL: v_log_fneg_fabs_f16:
6537 ; SI-SDAG:       ; %bb.0:
6538 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6539 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6540 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e64 v0, -|v0|
6541 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6542 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6543 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6544 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6545 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6547 ; SI-GISEL-LABEL: v_log_fneg_fabs_f16:
6548 ; SI-GISEL:       ; %bb.0:
6549 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6550 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e64 v0, -|v0|
6551 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
6552 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6553 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
6554 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6556 ; VI-LABEL: v_log_fneg_fabs_f16:
6557 ; VI:       ; %bb.0:
6558 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6559 ; VI-NEXT:    v_log_f16_e64 v0, -|v0|
6560 ; VI-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6561 ; VI-NEXT:    s_setpc_b64 s[30:31]
6563 ; GFX900-LABEL: v_log_fneg_fabs_f16:
6564 ; GFX900:       ; %bb.0:
6565 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6566 ; GFX900-NEXT:    v_log_f16_e64 v0, -|v0|
6567 ; GFX900-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6568 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
6570 ; GFX1100-LABEL: v_log_fneg_fabs_f16:
6571 ; GFX1100:       ; %bb.0:
6572 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6573 ; GFX1100-NEXT:    v_log_f16_e64 v0, -|v0|
6574 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
6575 ; GFX1100-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6576 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
6578 ; R600-LABEL: v_log_fneg_fabs_f16:
6579 ; R600:       ; %bb.0:
6580 ; R600-NEXT:    CF_END
6581 ; R600-NEXT:    PAD
6583 ; CM-LABEL: v_log_fneg_fabs_f16:
6584 ; CM:       ; %bb.0:
6585 ; CM-NEXT:    CF_END
6586 ; CM-NEXT:    PAD
6587   %fabs = call half @llvm.fabs.f16(half %in)
6588   %fneg.fabs = fneg half %fabs
6589   %result = call half @llvm.log.f16(half %fneg.fabs)
6590   ret half %result
6593 define half @v_log_fneg_f16(half %in) {
6594 ; SI-SDAG-LABEL: v_log_fneg_f16:
6595 ; SI-SDAG:       ; %bb.0:
6596 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6597 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e64 v0, -v0
6598 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6599 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6600 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6601 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6602 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6603 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6605 ; SI-GISEL-LABEL: v_log_fneg_f16:
6606 ; SI-GISEL:       ; %bb.0:
6607 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6608 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e64 v0, -v0
6609 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
6610 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6611 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
6612 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6614 ; VI-LABEL: v_log_fneg_f16:
6615 ; VI:       ; %bb.0:
6616 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6617 ; VI-NEXT:    v_log_f16_e64 v0, -v0
6618 ; VI-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6619 ; VI-NEXT:    s_setpc_b64 s[30:31]
6621 ; GFX900-LABEL: v_log_fneg_f16:
6622 ; GFX900:       ; %bb.0:
6623 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6624 ; GFX900-NEXT:    v_log_f16_e64 v0, -v0
6625 ; GFX900-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6626 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
6628 ; GFX1100-LABEL: v_log_fneg_f16:
6629 ; GFX1100:       ; %bb.0:
6630 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6631 ; GFX1100-NEXT:    v_log_f16_e64 v0, -v0
6632 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
6633 ; GFX1100-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6634 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
6636 ; R600-LABEL: v_log_fneg_f16:
6637 ; R600:       ; %bb.0:
6638 ; R600-NEXT:    CF_END
6639 ; R600-NEXT:    PAD
6641 ; CM-LABEL: v_log_fneg_f16:
6642 ; CM:       ; %bb.0:
6643 ; CM-NEXT:    CF_END
6644 ; CM-NEXT:    PAD
6645   %fneg = fneg half %in
6646   %result = call half @llvm.log.f16(half %fneg)
6647   ret half %result
6650 define half @v_log_f16_fast(half %in) {
6651 ; SI-SDAG-LABEL: v_log_f16_fast:
6652 ; SI-SDAG:       ; %bb.0:
6653 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6654 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6655 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6656 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6657 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6658 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6659 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6660 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6662 ; SI-GISEL-LABEL: v_log_f16_fast:
6663 ; SI-GISEL:       ; %bb.0:
6664 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6665 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6666 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
6667 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6668 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
6669 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6671 ; VI-LABEL: v_log_f16_fast:
6672 ; VI:       ; %bb.0:
6673 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6674 ; VI-NEXT:    v_log_f16_e32 v0, v0
6675 ; VI-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6676 ; VI-NEXT:    s_setpc_b64 s[30:31]
6678 ; GFX900-LABEL: v_log_f16_fast:
6679 ; GFX900:       ; %bb.0:
6680 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6681 ; GFX900-NEXT:    v_log_f16_e32 v0, v0
6682 ; GFX900-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6683 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
6685 ; GFX1100-LABEL: v_log_f16_fast:
6686 ; GFX1100:       ; %bb.0:
6687 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6688 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
6689 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
6690 ; GFX1100-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6691 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
6693 ; R600-LABEL: v_log_f16_fast:
6694 ; R600:       ; %bb.0:
6695 ; R600-NEXT:    CF_END
6696 ; R600-NEXT:    PAD
6698 ; CM-LABEL: v_log_f16_fast:
6699 ; CM:       ; %bb.0:
6700 ; CM-NEXT:    CF_END
6701 ; CM-NEXT:    PAD
6702   %result = call fast half @llvm.log.f16(half %in)
6703   ret half %result
6706 define <2 x half> @v_log_v2f16(<2 x half> %in) {
6707 ; SI-SDAG-LABEL: v_log_v2f16:
6708 ; SI-SDAG:       ; %bb.0:
6709 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6710 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6711 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
6712 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6713 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
6714 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6715 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
6716 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6717 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
6718 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6719 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
6720 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6721 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
6722 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6724 ; SI-GISEL-LABEL: v_log_v2f16:
6725 ; SI-GISEL:       ; %bb.0:
6726 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6727 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6728 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
6729 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
6730 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
6731 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6732 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
6733 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
6734 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
6735 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6737 ; VI-SDAG-LABEL: v_log_v2f16:
6738 ; VI-SDAG:       ; %bb.0:
6739 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6740 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6741 ; VI-SDAG-NEXT:    v_log_f16_e32 v0, v0
6742 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x398c
6743 ; VI-SDAG-NEXT:    v_mul_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
6744 ; VI-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6745 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
6746 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6748 ; VI-GISEL-LABEL: v_log_v2f16:
6749 ; VI-GISEL:       ; %bb.0:
6750 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6751 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v0
6752 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6753 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x398c
6754 ; VI-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6755 ; VI-GISEL-NEXT:    v_mul_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
6756 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
6757 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6759 ; GFX900-LABEL: v_log_v2f16:
6760 ; GFX900:       ; %bb.0:
6761 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6762 ; GFX900-NEXT:    v_log_f16_e32 v1, v0
6763 ; GFX900-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6764 ; GFX900-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6765 ; GFX900-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6766 ; GFX900-NEXT:    v_pack_b32_f16 v0, v1, v0
6767 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
6769 ; GFX1100-LABEL: v_log_v2f16:
6770 ; GFX1100:       ; %bb.0:
6771 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6772 ; GFX1100-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
6773 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
6774 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
6775 ; GFX1100-NEXT:    v_log_f16_e32 v1, v1
6776 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
6777 ; GFX1100-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6778 ; GFX1100-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6779 ; GFX1100-NEXT:    v_pack_b32_f16 v0, v0, v1
6780 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
6782 ; R600-LABEL: v_log_v2f16:
6783 ; R600:       ; %bb.0:
6784 ; R600-NEXT:    CF_END
6785 ; R600-NEXT:    PAD
6787 ; CM-LABEL: v_log_v2f16:
6788 ; CM:       ; %bb.0:
6789 ; CM-NEXT:    CF_END
6790 ; CM-NEXT:    PAD
6791   %result = call <2 x half> @llvm.log.v2f16(<2 x half> %in)
6792   ret <2 x half> %result
6795 define <2 x half> @v_log_fabs_v2f16(<2 x half> %in) {
6796 ; SI-SDAG-LABEL: v_log_fabs_v2f16:
6797 ; SI-SDAG:       ; %bb.0:
6798 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6799 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6800 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
6801 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e64 v0, |v0|
6802 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e64 v1, |v1|
6803 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6804 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
6805 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6806 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
6807 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6808 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
6809 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6810 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
6811 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6813 ; SI-GISEL-LABEL: v_log_fabs_v2f16:
6814 ; SI-GISEL:       ; %bb.0:
6815 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6816 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
6817 ; SI-GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
6818 ; SI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
6819 ; SI-GISEL-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v0
6820 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v0
6821 ; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
6822 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6823 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
6824 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v0
6825 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v1
6826 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
6827 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v2
6828 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
6829 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6831 ; VI-SDAG-LABEL: v_log_fabs_v2f16:
6832 ; VI-SDAG:       ; %bb.0:
6833 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6834 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, |v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6835 ; VI-SDAG-NEXT:    v_log_f16_e64 v0, |v0|
6836 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x398c
6837 ; VI-SDAG-NEXT:    v_mul_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
6838 ; VI-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6839 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
6840 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6842 ; VI-GISEL-LABEL: v_log_fabs_v2f16:
6843 ; VI-GISEL:       ; %bb.0:
6844 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6845 ; VI-GISEL-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v0
6846 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v0
6847 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6848 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x398c
6849 ; VI-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6850 ; VI-GISEL-NEXT:    v_mul_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
6851 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
6852 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6854 ; GFX900-SDAG-LABEL: v_log_fabs_v2f16:
6855 ; GFX900-SDAG:       ; %bb.0:
6856 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6857 ; GFX900-SDAG-NEXT:    v_log_f16_e64 v1, |v0|
6858 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v0, |v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6859 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6860 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6861 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v1, v0
6862 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
6864 ; GFX900-GISEL-LABEL: v_log_fabs_v2f16:
6865 ; GFX900-GISEL:       ; %bb.0:
6866 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6867 ; GFX900-GISEL-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v0
6868 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v1, v0
6869 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6870 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6871 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6872 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v1, v0
6873 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
6875 ; GFX1100-SDAG-LABEL: v_log_fabs_v2f16:
6876 ; GFX1100-SDAG:       ; %bb.0:
6877 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6878 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
6879 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v0, |v0|
6880 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
6881 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v1, |v1|
6882 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
6883 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6884 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6885 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
6886 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
6888 ; GFX1100-GISEL-LABEL: v_log_fabs_v2f16:
6889 ; GFX1100-GISEL:       ; %bb.0:
6890 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6891 ; GFX1100-GISEL-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v0
6892 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
6893 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
6894 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v0, v0
6895 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v1, v1
6896 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
6897 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6898 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6899 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6900 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v0, v0, v1
6901 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
6903 ; R600-LABEL: v_log_fabs_v2f16:
6904 ; R600:       ; %bb.0:
6905 ; R600-NEXT:    CF_END
6906 ; R600-NEXT:    PAD
6908 ; CM-LABEL: v_log_fabs_v2f16:
6909 ; CM:       ; %bb.0:
6910 ; CM-NEXT:    CF_END
6911 ; CM-NEXT:    PAD
6912   %fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %in)
6913   %result = call <2 x half> @llvm.log.v2f16(<2 x half> %fabs)
6914   ret <2 x half> %result
6917 define <2 x half> @v_log_fneg_fabs_v2f16(<2 x half> %in) {
6918 ; SI-SDAG-LABEL: v_log_fneg_fabs_v2f16:
6919 ; SI-SDAG:       ; %bb.0:
6920 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6921 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
6922 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
6923 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
6924 ; SI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
6925 ; SI-SDAG-NEXT:    v_or_b32_e32 v0, 0x80008000, v0
6926 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v0
6927 ; SI-SDAG-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
6928 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
6929 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
6930 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
6931 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
6932 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
6933 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
6934 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v0
6935 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v1
6936 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v2
6937 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6939 ; SI-GISEL-LABEL: v_log_fneg_fabs_v2f16:
6940 ; SI-GISEL:       ; %bb.0:
6941 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6942 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
6943 ; SI-GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
6944 ; SI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
6945 ; SI-GISEL-NEXT:    v_or_b32_e32 v0, 0x80008000, v0
6946 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v0
6947 ; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
6948 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
6949 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
6950 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v0
6951 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v1
6952 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
6953 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v2
6954 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
6955 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6957 ; VI-SDAG-LABEL: v_log_fneg_fabs_v2f16:
6958 ; VI-SDAG:       ; %bb.0:
6959 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6960 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, -|v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6961 ; VI-SDAG-NEXT:    v_log_f16_e64 v0, -|v0|
6962 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x398c
6963 ; VI-SDAG-NEXT:    v_mul_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
6964 ; VI-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6965 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
6966 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
6968 ; VI-GISEL-LABEL: v_log_fneg_fabs_v2f16:
6969 ; VI-GISEL:       ; %bb.0:
6970 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6971 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, 0x80008000, v0
6972 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v0
6973 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6974 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x398c
6975 ; VI-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6976 ; VI-GISEL-NEXT:    v_mul_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
6977 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
6978 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
6980 ; GFX900-SDAG-LABEL: v_log_fneg_fabs_v2f16:
6981 ; GFX900-SDAG:       ; %bb.0:
6982 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6983 ; GFX900-SDAG-NEXT:    v_log_f16_e64 v1, -|v0|
6984 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v0, -|v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6985 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6986 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6987 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v1, v0
6988 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
6990 ; GFX900-GISEL-LABEL: v_log_fneg_fabs_v2f16:
6991 ; GFX900-GISEL:       ; %bb.0:
6992 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6993 ; GFX900-GISEL-NEXT:    v_or_b32_e32 v0, 0x80008000, v0
6994 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v1, v0
6995 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
6996 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
6997 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
6998 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v1, v0
6999 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
7001 ; GFX1100-SDAG-LABEL: v_log_fneg_fabs_v2f16:
7002 ; GFX1100-SDAG:       ; %bb.0:
7003 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7004 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
7005 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v0, -|v0|
7006 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
7007 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v1, -|v1|
7008 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
7009 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7010 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7011 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
7012 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
7014 ; GFX1100-GISEL-LABEL: v_log_fneg_fabs_v2f16:
7015 ; GFX1100-GISEL:       ; %bb.0:
7016 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7017 ; GFX1100-GISEL-NEXT:    v_or_b32_e32 v0, 0x80008000, v0
7018 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
7019 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
7020 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v0, v0
7021 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v1, v1
7022 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
7023 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7024 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7025 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7026 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v0, v0, v1
7027 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
7029 ; R600-LABEL: v_log_fneg_fabs_v2f16:
7030 ; R600:       ; %bb.0:
7031 ; R600-NEXT:    CF_END
7032 ; R600-NEXT:    PAD
7034 ; CM-LABEL: v_log_fneg_fabs_v2f16:
7035 ; CM:       ; %bb.0:
7036 ; CM-NEXT:    CF_END
7037 ; CM-NEXT:    PAD
7038   %fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %in)
7039   %fneg.fabs = fneg <2 x half> %fabs
7040   %result = call <2 x half> @llvm.log.v2f16(<2 x half> %fneg.fabs)
7041   ret <2 x half> %result
7044 define <2 x half> @v_log_fneg_v2f16(<2 x half> %in) {
7045 ; SI-SDAG-LABEL: v_log_fneg_v2f16:
7046 ; SI-SDAG:       ; %bb.0:
7047 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7048 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7049 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7050 ; SI-SDAG-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
7051 ; SI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
7052 ; SI-SDAG-NEXT:    v_xor_b32_e32 v0, 0x80008000, v0
7053 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v0
7054 ; SI-SDAG-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
7055 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7056 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
7057 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
7058 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7059 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7060 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7061 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v0
7062 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v1
7063 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v2
7064 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
7066 ; SI-GISEL-LABEL: v_log_fneg_v2f16:
7067 ; SI-GISEL:       ; %bb.0:
7068 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7069 ; SI-GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
7070 ; SI-GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
7071 ; SI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
7072 ; SI-GISEL-NEXT:    v_xor_b32_e32 v0, 0x80008000, v0
7073 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v0
7074 ; SI-GISEL-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
7075 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
7076 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
7077 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v0
7078 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v1
7079 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
7080 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v2
7081 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
7082 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
7084 ; VI-SDAG-LABEL: v_log_fneg_v2f16:
7085 ; VI-SDAG:       ; %bb.0:
7086 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7087 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, -v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7088 ; VI-SDAG-NEXT:    v_log_f16_e64 v0, -v0
7089 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x398c
7090 ; VI-SDAG-NEXT:    v_mul_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7091 ; VI-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7092 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
7093 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
7095 ; VI-GISEL-LABEL: v_log_fneg_v2f16:
7096 ; VI-GISEL:       ; %bb.0:
7097 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7098 ; VI-GISEL-NEXT:    v_xor_b32_e32 v0, 0x80008000, v0
7099 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v0
7100 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7101 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x398c
7102 ; VI-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7103 ; VI-GISEL-NEXT:    v_mul_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7104 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
7105 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
7107 ; GFX900-SDAG-LABEL: v_log_fneg_v2f16:
7108 ; GFX900-SDAG:       ; %bb.0:
7109 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7110 ; GFX900-SDAG-NEXT:    v_log_f16_e64 v1, -v0
7111 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v0, -v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7112 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7113 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7114 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v1, v0
7115 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
7117 ; GFX900-GISEL-LABEL: v_log_fneg_v2f16:
7118 ; GFX900-GISEL:       ; %bb.0:
7119 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7120 ; GFX900-GISEL-NEXT:    v_xor_b32_e32 v0, 0x80008000, v0
7121 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v1, v0
7122 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7123 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7124 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7125 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v1, v0
7126 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
7128 ; GFX1100-SDAG-LABEL: v_log_fneg_v2f16:
7129 ; GFX1100-SDAG:       ; %bb.0:
7130 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7131 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
7132 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v0, -v0
7133 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
7134 ; GFX1100-SDAG-NEXT:    v_log_f16_e64 v1, -v1
7135 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
7136 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7137 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7138 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1
7139 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
7141 ; GFX1100-GISEL-LABEL: v_log_fneg_v2f16:
7142 ; GFX1100-GISEL:       ; %bb.0:
7143 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7144 ; GFX1100-GISEL-NEXT:    v_xor_b32_e32 v0, 0x80008000, v0
7145 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
7146 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
7147 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v0, v0
7148 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v1, v1
7149 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
7150 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7151 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7152 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7153 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v0, v0, v1
7154 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
7156 ; R600-LABEL: v_log_fneg_v2f16:
7157 ; R600:       ; %bb.0:
7158 ; R600-NEXT:    CF_END
7159 ; R600-NEXT:    PAD
7161 ; CM-LABEL: v_log_fneg_v2f16:
7162 ; CM:       ; %bb.0:
7163 ; CM-NEXT:    CF_END
7164 ; CM-NEXT:    PAD
7165   %fneg = fneg <2 x half> %in
7166   %result = call <2 x half> @llvm.log.v2f16(<2 x half> %fneg)
7167   ret <2 x half> %result
7170 define <2 x half> @v_log_v2f16_fast(<2 x half> %in) {
7171 ; SI-SDAG-LABEL: v_log_v2f16_fast:
7172 ; SI-SDAG:       ; %bb.0:
7173 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7174 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7175 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7176 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7177 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
7178 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
7179 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
7180 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7181 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7182 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7183 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7184 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7185 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
7186 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
7188 ; SI-GISEL-LABEL: v_log_v2f16_fast:
7189 ; SI-GISEL:       ; %bb.0:
7190 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7191 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
7192 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
7193 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
7194 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
7195 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7196 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7197 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
7198 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
7199 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
7201 ; VI-SDAG-LABEL: v_log_v2f16_fast:
7202 ; VI-SDAG:       ; %bb.0:
7203 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7204 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7205 ; VI-SDAG-NEXT:    v_log_f16_e32 v0, v0
7206 ; VI-SDAG-NEXT:    v_mov_b32_e32 v2, 0x398c
7207 ; VI-SDAG-NEXT:    v_mul_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7208 ; VI-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7209 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
7210 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
7212 ; VI-GISEL-LABEL: v_log_v2f16_fast:
7213 ; VI-GISEL:       ; %bb.0:
7214 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7215 ; VI-GISEL-NEXT:    v_log_f16_e32 v1, v0
7216 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7217 ; VI-GISEL-NEXT:    v_mov_b32_e32 v2, 0x398c
7218 ; VI-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7219 ; VI-GISEL-NEXT:    v_mul_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7220 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v1, v0
7221 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
7223 ; GFX900-LABEL: v_log_v2f16_fast:
7224 ; GFX900:       ; %bb.0:
7225 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7226 ; GFX900-NEXT:    v_log_f16_e32 v1, v0
7227 ; GFX900-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7228 ; GFX900-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7229 ; GFX900-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7230 ; GFX900-NEXT:    v_pack_b32_f16 v0, v1, v0
7231 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
7233 ; GFX1100-LABEL: v_log_v2f16_fast:
7234 ; GFX1100:       ; %bb.0:
7235 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7236 ; GFX1100-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
7237 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
7238 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
7239 ; GFX1100-NEXT:    v_log_f16_e32 v1, v1
7240 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
7241 ; GFX1100-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7242 ; GFX1100-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7243 ; GFX1100-NEXT:    v_pack_b32_f16 v0, v0, v1
7244 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
7246 ; R600-LABEL: v_log_v2f16_fast:
7247 ; R600:       ; %bb.0:
7248 ; R600-NEXT:    CF_END
7249 ; R600-NEXT:    PAD
7251 ; CM-LABEL: v_log_v2f16_fast:
7252 ; CM:       ; %bb.0:
7253 ; CM-NEXT:    CF_END
7254 ; CM-NEXT:    PAD
7255   %result = call fast <2 x half> @llvm.log.v2f16(<2 x half> %in)
7256   ret <2 x half> %result
7259 define <3 x half> @v_log_v3f16(<3 x half> %in) {
7260 ; SI-SDAG-LABEL: v_log_v3f16:
7261 ; SI-SDAG:       ; %bb.0:
7262 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7263 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7264 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7265 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
7266 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7267 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
7268 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
7269 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
7270 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
7271 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v2
7272 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7273 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7274 ; SI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317218, v2
7275 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7276 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7277 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
7278 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7279 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
7280 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
7281 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
7283 ; SI-GISEL-LABEL: v_log_v3f16:
7284 ; SI-GISEL:       ; %bb.0:
7285 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7286 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
7287 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
7288 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2
7289 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
7290 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
7291 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v2
7292 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7293 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7294 ; SI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317218, v2
7295 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
7296 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
7297 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v2, v2
7298 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
7300 ; VI-LABEL: v_log_v3f16:
7301 ; VI:       ; %bb.0:
7302 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7303 ; VI-NEXT:    v_log_f16_e32 v2, v0
7304 ; VI-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7305 ; VI-NEXT:    v_log_f16_e32 v1, v1
7306 ; VI-NEXT:    v_mov_b32_e32 v3, 0x398c
7307 ; VI-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7308 ; VI-NEXT:    v_mul_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7309 ; VI-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7310 ; VI-NEXT:    v_or_b32_e32 v0, v2, v0
7311 ; VI-NEXT:    s_setpc_b64 s[30:31]
7313 ; GFX900-LABEL: v_log_v3f16:
7314 ; GFX900:       ; %bb.0:
7315 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7316 ; GFX900-NEXT:    v_log_f16_e32 v2, v0
7317 ; GFX900-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7318 ; GFX900-NEXT:    v_log_f16_e32 v1, v1
7319 ; GFX900-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7320 ; GFX900-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7321 ; GFX900-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7322 ; GFX900-NEXT:    v_pack_b32_f16 v0, v2, v0
7323 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
7325 ; GFX1100-LABEL: v_log_v3f16:
7326 ; GFX1100:       ; %bb.0:
7327 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7328 ; GFX1100-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
7329 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
7330 ; GFX1100-NEXT:    v_log_f16_e32 v1, v1
7331 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_3)
7332 ; GFX1100-NEXT:    v_log_f16_e32 v2, v2
7333 ; GFX1100-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7334 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
7335 ; GFX1100-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7336 ; GFX1100-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7337 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7338 ; GFX1100-NEXT:    v_pack_b32_f16 v0, v0, v2
7339 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
7341 ; R600-LABEL: v_log_v3f16:
7342 ; R600:       ; %bb.0:
7343 ; R600-NEXT:    CF_END
7344 ; R600-NEXT:    PAD
7346 ; CM-LABEL: v_log_v3f16:
7347 ; CM:       ; %bb.0:
7348 ; CM-NEXT:    CF_END
7349 ; CM-NEXT:    PAD
7350   %result = call <3 x half> @llvm.log.v3f16(<3 x half> %in)
7351   ret <3 x half> %result
7354 define <3 x half> @v_log_v3f16_fast(<3 x half> %in) {
7355 ; SI-SDAG-LABEL: v_log_v3f16_fast:
7356 ; SI-SDAG:       ; %bb.0:
7357 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7358 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7359 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7360 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
7361 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7362 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
7363 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
7364 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
7365 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
7366 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v2
7367 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7368 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7369 ; SI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317218, v2
7370 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7371 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7372 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
7373 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7374 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
7375 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
7376 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
7378 ; SI-GISEL-LABEL: v_log_v3f16_fast:
7379 ; SI-GISEL:       ; %bb.0:
7380 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7381 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
7382 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
7383 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2
7384 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
7385 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
7386 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v2
7387 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7388 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7389 ; SI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317218, v2
7390 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
7391 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
7392 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v2, v2
7393 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
7395 ; VI-LABEL: v_log_v3f16_fast:
7396 ; VI:       ; %bb.0:
7397 ; VI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7398 ; VI-NEXT:    v_log_f16_e32 v2, v0
7399 ; VI-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7400 ; VI-NEXT:    v_log_f16_e32 v1, v1
7401 ; VI-NEXT:    v_mov_b32_e32 v3, 0x398c
7402 ; VI-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7403 ; VI-NEXT:    v_mul_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7404 ; VI-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7405 ; VI-NEXT:    v_or_b32_e32 v0, v2, v0
7406 ; VI-NEXT:    s_setpc_b64 s[30:31]
7408 ; GFX900-LABEL: v_log_v3f16_fast:
7409 ; GFX900:       ; %bb.0:
7410 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7411 ; GFX900-NEXT:    v_log_f16_e32 v2, v0
7412 ; GFX900-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7413 ; GFX900-NEXT:    v_log_f16_e32 v1, v1
7414 ; GFX900-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7415 ; GFX900-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7416 ; GFX900-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7417 ; GFX900-NEXT:    v_pack_b32_f16 v0, v2, v0
7418 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
7420 ; GFX1100-LABEL: v_log_v3f16_fast:
7421 ; GFX1100:       ; %bb.0:
7422 ; GFX1100-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7423 ; GFX1100-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
7424 ; GFX1100-NEXT:    v_log_f16_e32 v0, v0
7425 ; GFX1100-NEXT:    v_log_f16_e32 v1, v1
7426 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_3)
7427 ; GFX1100-NEXT:    v_log_f16_e32 v2, v2
7428 ; GFX1100-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7429 ; GFX1100-NEXT:    s_waitcnt_depctr 0xfff
7430 ; GFX1100-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7431 ; GFX1100-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7432 ; GFX1100-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7433 ; GFX1100-NEXT:    v_pack_b32_f16 v0, v0, v2
7434 ; GFX1100-NEXT:    s_setpc_b64 s[30:31]
7436 ; R600-LABEL: v_log_v3f16_fast:
7437 ; R600:       ; %bb.0:
7438 ; R600-NEXT:    CF_END
7439 ; R600-NEXT:    PAD
7441 ; CM-LABEL: v_log_v3f16_fast:
7442 ; CM:       ; %bb.0:
7443 ; CM-NEXT:    CF_END
7444 ; CM-NEXT:    PAD
7445   %result = call fast <3 x half> @llvm.log.v3f16(<3 x half> %in)
7446   ret <3 x half> %result
7449 define <4 x half> @v_log_v4f16(<4 x half> %in) {
7450 ; SI-SDAG-LABEL: v_log_v4f16:
7451 ; SI-SDAG:       ; %bb.0:
7452 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7453 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7454 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7455 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v3, v3
7456 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
7457 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7458 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
7459 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v3, v3
7460 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
7461 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
7462 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
7463 ; SI-SDAG-NEXT:    v_log_f32_e32 v3, v3
7464 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v2
7465 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7466 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7467 ; SI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317218, v3
7468 ; SI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317218, v2
7469 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7470 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7471 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
7472 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v3, v3
7473 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7474 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
7475 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
7476 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v3, v3
7477 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
7479 ; SI-GISEL-LABEL: v_log_v4f16:
7480 ; SI-GISEL:       ; %bb.0:
7481 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7482 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
7483 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
7484 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2
7485 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v3, v3
7486 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
7487 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
7488 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v2
7489 ; SI-GISEL-NEXT:    v_log_f32_e32 v3, v3
7490 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7491 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7492 ; SI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317218, v2
7493 ; SI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317218, v3
7494 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
7495 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
7496 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v2, v2
7497 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v3, v3
7498 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
7500 ; VI-SDAG-LABEL: v_log_v4f16:
7501 ; VI-SDAG:       ; %bb.0:
7502 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7503 ; VI-SDAG-NEXT:    v_log_f16_e32 v2, v1
7504 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7505 ; VI-SDAG-NEXT:    v_log_f16_e32 v3, v0
7506 ; VI-SDAG-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7507 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0x398c
7508 ; VI-SDAG-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7509 ; VI-SDAG-NEXT:    v_mul_f16_sdwa v1, v1, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7510 ; VI-SDAG-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7511 ; VI-SDAG-NEXT:    v_mul_f16_sdwa v0, v0, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7512 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v3, v0
7513 ; VI-SDAG-NEXT:    v_or_b32_e32 v1, v2, v1
7514 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
7516 ; VI-GISEL-LABEL: v_log_v4f16:
7517 ; VI-GISEL:       ; %bb.0:
7518 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7519 ; VI-GISEL-NEXT:    v_log_f16_e32 v2, v0
7520 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7521 ; VI-GISEL-NEXT:    v_log_f16_e32 v3, v1
7522 ; VI-GISEL-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7523 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x398c
7524 ; VI-GISEL-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7525 ; VI-GISEL-NEXT:    v_mul_f16_sdwa v0, v0, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7526 ; VI-GISEL-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7527 ; VI-GISEL-NEXT:    v_mul_f16_sdwa v1, v1, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7528 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v2, v0
7529 ; VI-GISEL-NEXT:    v_or_b32_e32 v1, v3, v1
7530 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
7532 ; GFX900-SDAG-LABEL: v_log_v4f16:
7533 ; GFX900-SDAG:       ; %bb.0:
7534 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7535 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v2, v1
7536 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7537 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v3, v0
7538 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7539 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7540 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7541 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7542 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7543 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v3, v0
7544 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v1, v2, v1
7545 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
7547 ; GFX900-GISEL-LABEL: v_log_v4f16:
7548 ; GFX900-GISEL:       ; %bb.0:
7549 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7550 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v2, v0
7551 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7552 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v3, v1
7553 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7554 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7555 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7556 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7557 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7558 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v2, v0
7559 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v1, v3, v1
7560 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
7562 ; GFX1100-SDAG-LABEL: v_log_v4f16:
7563 ; GFX1100-SDAG:       ; %bb.0:
7564 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7565 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
7566 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
7567 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v1, v1
7568 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v0, v0
7569 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
7570 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v2, v2
7571 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v3, v3
7572 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7573 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(TRANS32_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_2)
7574 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7575 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
7576 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7577 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7578 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v2
7579 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
7580 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v1, v1, v3
7581 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
7583 ; GFX1100-GISEL-LABEL: v_log_v4f16:
7584 ; GFX1100-GISEL:       ; %bb.0:
7585 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7586 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
7587 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
7588 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v0, v0
7589 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v1, v1
7590 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
7591 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v2, v2
7592 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v3, v3
7593 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7594 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(TRANS32_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_2)
7595 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7596 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
7597 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7598 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7599 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v0, v0, v2
7600 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
7601 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v1, v1, v3
7602 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
7604 ; R600-LABEL: v_log_v4f16:
7605 ; R600:       ; %bb.0:
7606 ; R600-NEXT:    CF_END
7607 ; R600-NEXT:    PAD
7609 ; CM-LABEL: v_log_v4f16:
7610 ; CM:       ; %bb.0:
7611 ; CM-NEXT:    CF_END
7612 ; CM-NEXT:    PAD
7613   %result = call <4 x half> @llvm.log.v4f16(<4 x half> %in)
7614   ret <4 x half> %result
7617 define <4 x half> @v_log_v4f16_fast(<4 x half> %in) {
7618 ; SI-SDAG-LABEL: v_log_v4f16_fast:
7619 ; SI-SDAG:       ; %bb.0:
7620 ; SI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7621 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7622 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7623 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v3, v3
7624 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
7625 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7626 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
7627 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v3, v3
7628 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
7629 ; SI-SDAG-NEXT:    v_log_f32_e32 v0, v0
7630 ; SI-SDAG-NEXT:    v_log_f32_e32 v1, v1
7631 ; SI-SDAG-NEXT:    v_log_f32_e32 v3, v3
7632 ; SI-SDAG-NEXT:    v_log_f32_e32 v2, v2
7633 ; SI-SDAG-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7634 ; SI-SDAG-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7635 ; SI-SDAG-NEXT:    v_mul_f32_e32 v3, 0x3f317218, v3
7636 ; SI-SDAG-NEXT:    v_mul_f32_e32 v2, 0x3f317218, v2
7637 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0
7638 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1
7639 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2
7640 ; SI-SDAG-NEXT:    v_cvt_f16_f32_e32 v3, v3
7641 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0
7642 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1
7643 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v2
7644 ; SI-SDAG-NEXT:    v_cvt_f32_f16_e32 v3, v3
7645 ; SI-SDAG-NEXT:    s_setpc_b64 s[30:31]
7647 ; SI-GISEL-LABEL: v_log_v4f16_fast:
7648 ; SI-GISEL:       ; %bb.0:
7649 ; SI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7650 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0
7651 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1
7652 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2
7653 ; SI-GISEL-NEXT:    v_cvt_f32_f16_e32 v3, v3
7654 ; SI-GISEL-NEXT:    v_log_f32_e32 v0, v0
7655 ; SI-GISEL-NEXT:    v_log_f32_e32 v1, v1
7656 ; SI-GISEL-NEXT:    v_log_f32_e32 v2, v2
7657 ; SI-GISEL-NEXT:    v_log_f32_e32 v3, v3
7658 ; SI-GISEL-NEXT:    v_mul_f32_e32 v0, 0x3f317218, v0
7659 ; SI-GISEL-NEXT:    v_mul_f32_e32 v1, 0x3f317218, v1
7660 ; SI-GISEL-NEXT:    v_mul_f32_e32 v2, 0x3f317218, v2
7661 ; SI-GISEL-NEXT:    v_mul_f32_e32 v3, 0x3f317218, v3
7662 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0
7663 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1
7664 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v2, v2
7665 ; SI-GISEL-NEXT:    v_cvt_f16_f32_e32 v3, v3
7666 ; SI-GISEL-NEXT:    s_setpc_b64 s[30:31]
7668 ; VI-SDAG-LABEL: v_log_v4f16_fast:
7669 ; VI-SDAG:       ; %bb.0:
7670 ; VI-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7671 ; VI-SDAG-NEXT:    v_log_f16_e32 v2, v1
7672 ; VI-SDAG-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7673 ; VI-SDAG-NEXT:    v_log_f16_e32 v3, v0
7674 ; VI-SDAG-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7675 ; VI-SDAG-NEXT:    v_mov_b32_e32 v4, 0x398c
7676 ; VI-SDAG-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7677 ; VI-SDAG-NEXT:    v_mul_f16_sdwa v1, v1, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7678 ; VI-SDAG-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7679 ; VI-SDAG-NEXT:    v_mul_f16_sdwa v0, v0, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7680 ; VI-SDAG-NEXT:    v_or_b32_e32 v0, v3, v0
7681 ; VI-SDAG-NEXT:    v_or_b32_e32 v1, v2, v1
7682 ; VI-SDAG-NEXT:    s_setpc_b64 s[30:31]
7684 ; VI-GISEL-LABEL: v_log_v4f16_fast:
7685 ; VI-GISEL:       ; %bb.0:
7686 ; VI-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7687 ; VI-GISEL-NEXT:    v_log_f16_e32 v2, v0
7688 ; VI-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7689 ; VI-GISEL-NEXT:    v_log_f16_e32 v3, v1
7690 ; VI-GISEL-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7691 ; VI-GISEL-NEXT:    v_mov_b32_e32 v4, 0x398c
7692 ; VI-GISEL-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7693 ; VI-GISEL-NEXT:    v_mul_f16_sdwa v0, v0, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7694 ; VI-GISEL-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7695 ; VI-GISEL-NEXT:    v_mul_f16_sdwa v1, v1, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
7696 ; VI-GISEL-NEXT:    v_or_b32_e32 v0, v2, v0
7697 ; VI-GISEL-NEXT:    v_or_b32_e32 v1, v3, v1
7698 ; VI-GISEL-NEXT:    s_setpc_b64 s[30:31]
7700 ; GFX900-SDAG-LABEL: v_log_v4f16_fast:
7701 ; GFX900-SDAG:       ; %bb.0:
7702 ; GFX900-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7703 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v2, v1
7704 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7705 ; GFX900-SDAG-NEXT:    v_log_f16_e32 v3, v0
7706 ; GFX900-SDAG-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7707 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7708 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7709 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7710 ; GFX900-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7711 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v0, v3, v0
7712 ; GFX900-SDAG-NEXT:    v_pack_b32_f16 v1, v2, v1
7713 ; GFX900-SDAG-NEXT:    s_setpc_b64 s[30:31]
7715 ; GFX900-GISEL-LABEL: v_log_v4f16_fast:
7716 ; GFX900-GISEL:       ; %bb.0:
7717 ; GFX900-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7718 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v2, v0
7719 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7720 ; GFX900-GISEL-NEXT:    v_log_f16_e32 v3, v1
7721 ; GFX900-GISEL-NEXT:    v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
7722 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7723 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7724 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7725 ; GFX900-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7726 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v0, v2, v0
7727 ; GFX900-GISEL-NEXT:    v_pack_b32_f16 v1, v3, v1
7728 ; GFX900-GISEL-NEXT:    s_setpc_b64 s[30:31]
7730 ; GFX1100-SDAG-LABEL: v_log_v4f16_fast:
7731 ; GFX1100-SDAG:       ; %bb.0:
7732 ; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7733 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
7734 ; GFX1100-SDAG-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
7735 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v1, v1
7736 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v0, v0
7737 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
7738 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v2, v2
7739 ; GFX1100-SDAG-NEXT:    v_log_f16_e32 v3, v3
7740 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7741 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(TRANS32_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_2)
7742 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7743 ; GFX1100-SDAG-NEXT:    s_waitcnt_depctr 0xfff
7744 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7745 ; GFX1100-SDAG-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7746 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v2
7747 ; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
7748 ; GFX1100-SDAG-NEXT:    v_pack_b32_f16 v1, v1, v3
7749 ; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]
7751 ; GFX1100-GISEL-LABEL: v_log_v4f16_fast:
7752 ; GFX1100-GISEL:       ; %bb.0:
7753 ; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7754 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
7755 ; GFX1100-GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
7756 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v0, v0
7757 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v1, v1
7758 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
7759 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v2, v2
7760 ; GFX1100-GISEL-NEXT:    v_log_f16_e32 v3, v3
7761 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v0, 0x398c, v0
7762 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(TRANS32_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_2)
7763 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v1, 0x398c, v1
7764 ; GFX1100-GISEL-NEXT:    s_waitcnt_depctr 0xfff
7765 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v2, 0x398c, v2
7766 ; GFX1100-GISEL-NEXT:    v_mul_f16_e32 v3, 0x398c, v3
7767 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v0, v0, v2
7768 ; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
7769 ; GFX1100-GISEL-NEXT:    v_pack_b32_f16 v1, v1, v3
7770 ; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]
7772 ; R600-LABEL: v_log_v4f16_fast:
7773 ; R600:       ; %bb.0:
7774 ; R600-NEXT:    CF_END
7775 ; R600-NEXT:    PAD
7777 ; CM-LABEL: v_log_v4f16_fast:
7778 ; CM:       ; %bb.0:
7779 ; CM-NEXT:    CF_END
7780 ; CM-NEXT:    PAD
7781   %result = call fast <4 x half> @llvm.log.v4f16(<4 x half> %in)
7782   ret <4 x half> %result
7785 declare float @llvm.fabs.f32(float) #2
7786 declare float @llvm.log.f32(float) #2
7787 declare <2 x float> @llvm.log.v2f32(<2 x float>) #2
7788 declare <3 x float> @llvm.log.v3f32(<3 x float>) #2
7789 declare <4 x float> @llvm.log.v4f32(<4 x float>) #2
7790 declare half @llvm.fabs.f16(half) #2
7791 declare half @llvm.log.f16(half) #2
7792 declare <2 x half> @llvm.log.v2f16(<2 x half>) #2
7793 declare <3 x half> @llvm.log.v3f16(<3 x half>) #2
7794 declare <4 x half> @llvm.log.v4f16(<4 x half>) #2
7795 declare <2 x half> @llvm.fabs.v2f16(<2 x half>) #2
7797 attributes #0 = { "denormal-fp-math-f32"="ieee,preserve-sign" }
7798 attributes #1 = { "denormal-fp-math-f32"="dynamic,dynamic" }
7799 attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
7800 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
7801 ; GFX689-GISEL: {{.*}}
7802 ; GFX689-SDAG: {{.*}}
7803 ; SI: {{.*}}