xref: /llvm-project/llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-log.ll (revision 32f9983c064557883223b585810eac3c6797d500)
1a8376bbeSMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2a8376bbeSMatt Arsenault; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-simplifylib %s | FileCheck %s
3a8376bbeSMatt Arsenault
4*32f9983cSJessica Deltarget datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7:8:9"
5a8376bbeSMatt Arsenault
6a8376bbeSMatt Arsenaultdeclare float @_Z3logf(float)
7a8376bbeSMatt Arsenaultdeclare <2 x float> @_Z3logDv2_f(<2 x float>)
8a8376bbeSMatt Arsenaultdeclare <3 x float> @_Z3logDv3_f(<3 x float>)
9a8376bbeSMatt Arsenaultdeclare <4 x float> @_Z3logDv4_f(<4 x float>)
10a8376bbeSMatt Arsenaultdeclare <8 x float> @_Z3logDv8_f(<8 x float>)
11a8376bbeSMatt Arsenaultdeclare <16 x float> @_Z3logDv16_f(<16 x float>)
12a8376bbeSMatt Arsenault
13a8376bbeSMatt Arsenaultdeclare double @_Z3logd(double)
14a8376bbeSMatt Arsenaultdeclare <2 x double> @_Z3logDv2_d(<2 x double>)
15a8376bbeSMatt Arsenaultdeclare <3 x double> @_Z3logDv3_d(<3 x double>)
16a8376bbeSMatt Arsenaultdeclare <4 x double> @_Z3logDv4_d(<4 x double>)
17a8376bbeSMatt Arsenaultdeclare <8 x double> @_Z3logDv8_d(<8 x double>)
18a8376bbeSMatt Arsenaultdeclare <16 x double> @_Z3logDv16_d(<16 x double>)
19a8376bbeSMatt Arsenault
20a8376bbeSMatt Arsenaultdeclare half @_Z3logDh(half)
21a8376bbeSMatt Arsenaultdeclare <2 x half> @_Z3logDv2_Dh(<2 x half>)
22a8376bbeSMatt Arsenaultdeclare <3 x half> @_Z3logDv3_Dh(<3 x half>)
23a8376bbeSMatt Arsenaultdeclare <4 x half> @_Z3logDv4_Dh(<4 x half>)
24a8376bbeSMatt Arsenaultdeclare <8 x half> @_Z3logDv8_Dh(<8 x half>)
25a8376bbeSMatt Arsenaultdeclare <16 x half> @_Z3logDv16_Dh(<16 x half>)
26a8376bbeSMatt Arsenault
27a8376bbeSMatt Arsenaultdefine float @test_log_f32(float %arg) {
28a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32
29a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
30a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call float @_Z3logf(float [[ARG]]), !fpmath !0
31a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
32a8376bbeSMatt Arsenault;
33a8376bbeSMatt Arsenault  %log = tail call float @_Z3logf(float %arg), !fpmath !0
34a8376bbeSMatt Arsenault  ret float %log
35a8376bbeSMatt Arsenault}
36a8376bbeSMatt Arsenault
37a8376bbeSMatt Arsenaultdefine <2 x float> @test_log_v2f32(<2 x float> %arg) {
38a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x float> @test_log_v2f32
39a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x float> [[ARG:%.*]]) {
40a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <2 x float> @_Z3logDv2_f(<2 x float> [[ARG]]), !fpmath !0
41a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x float> [[LOG]]
42a8376bbeSMatt Arsenault;
43a8376bbeSMatt Arsenault  %log = tail call <2 x float> @_Z3logDv2_f(<2 x float> %arg), !fpmath !0
44a8376bbeSMatt Arsenault  ret <2 x float> %log
45a8376bbeSMatt Arsenault}
46a8376bbeSMatt Arsenault
47a8376bbeSMatt Arsenaultdefine <3 x float> @test_log_v3f32(<3 x float> %arg) {
48a8376bbeSMatt Arsenault; CHECK-LABEL: define <3 x float> @test_log_v3f32
49a8376bbeSMatt Arsenault; CHECK-SAME: (<3 x float> [[ARG:%.*]]) {
50a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <3 x float> @_Z3logDv3_f(<3 x float> [[ARG]]), !fpmath !0
51a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <3 x float> [[LOG]]
52a8376bbeSMatt Arsenault;
53a8376bbeSMatt Arsenault  %log = tail call <3 x float> @_Z3logDv3_f(<3 x float> %arg), !fpmath !0
54a8376bbeSMatt Arsenault  ret <3 x float> %log
55a8376bbeSMatt Arsenault}
56a8376bbeSMatt Arsenault
57a8376bbeSMatt Arsenaultdefine <4 x float> @test_log_v4f32(<4 x float> %arg) {
58a8376bbeSMatt Arsenault; CHECK-LABEL: define <4 x float> @test_log_v4f32
59a8376bbeSMatt Arsenault; CHECK-SAME: (<4 x float> [[ARG:%.*]]) {
60a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <4 x float> @_Z3logDv4_f(<4 x float> [[ARG]]), !fpmath !0
61a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <4 x float> [[LOG]]
62a8376bbeSMatt Arsenault;
63a8376bbeSMatt Arsenault  %log = tail call <4 x float> @_Z3logDv4_f(<4 x float> %arg), !fpmath !0
64a8376bbeSMatt Arsenault  ret <4 x float> %log
65a8376bbeSMatt Arsenault}
66a8376bbeSMatt Arsenault
67a8376bbeSMatt Arsenaultdefine <8 x float> @test_log_v8f32(<8 x float> %arg) {
68a8376bbeSMatt Arsenault; CHECK-LABEL: define <8 x float> @test_log_v8f32
69a8376bbeSMatt Arsenault; CHECK-SAME: (<8 x float> [[ARG:%.*]]) {
70a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <8 x float> @_Z3logDv8_f(<8 x float> [[ARG]]), !fpmath !0
71a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <8 x float> [[LOG]]
72a8376bbeSMatt Arsenault;
73a8376bbeSMatt Arsenault  %log = tail call <8 x float> @_Z3logDv8_f(<8 x float> %arg), !fpmath !0
74a8376bbeSMatt Arsenault  ret <8 x float> %log
75a8376bbeSMatt Arsenault}
76a8376bbeSMatt Arsenault
77a8376bbeSMatt Arsenaultdefine <16 x float> @test_log_v16f32(<16 x float> %arg) {
78a8376bbeSMatt Arsenault; CHECK-LABEL: define <16 x float> @test_log_v16f32
79a8376bbeSMatt Arsenault; CHECK-SAME: (<16 x float> [[ARG:%.*]]) {
80a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <16 x float> @_Z3logDv16_f(<16 x float> [[ARG]]), !fpmath !0
81a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <16 x float> [[LOG]]
82a8376bbeSMatt Arsenault;
83a8376bbeSMatt Arsenault  %log = tail call <16 x float> @_Z3logDv16_f(<16 x float> %arg), !fpmath !0
84a8376bbeSMatt Arsenault  ret <16 x float> %log
85a8376bbeSMatt Arsenault}
86a8376bbeSMatt Arsenault
87a8376bbeSMatt Arsenaultdefine float @test_log_cr_f32(float %arg) {
88a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_cr_f32
89a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
90a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call float @_Z3logf(float [[ARG]])
91a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
92a8376bbeSMatt Arsenault;
93a8376bbeSMatt Arsenault  %log = tail call float @_Z3logf(float %arg)
94a8376bbeSMatt Arsenault  ret float %log
95a8376bbeSMatt Arsenault}
96a8376bbeSMatt Arsenault
97a8376bbeSMatt Arsenaultdefine <2 x float> @test_log_cr_v2f32(<2 x float> %arg) {
98a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x float> @test_log_cr_v2f32
99a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x float> [[ARG:%.*]]) {
100a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <2 x float> @_Z3logDv2_f(<2 x float> [[ARG]])
101a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x float> [[LOG]]
102a8376bbeSMatt Arsenault;
103a8376bbeSMatt Arsenault  %log = tail call <2 x float> @_Z3logDv2_f(<2 x float> %arg)
104a8376bbeSMatt Arsenault  ret <2 x float> %log
105a8376bbeSMatt Arsenault}
106a8376bbeSMatt Arsenault
107a8376bbeSMatt Arsenaultdefine <3 x float> @test_log_cr_v3f32(<3 x float> %arg) {
108a8376bbeSMatt Arsenault; CHECK-LABEL: define <3 x float> @test_log_cr_v3f32
109a8376bbeSMatt Arsenault; CHECK-SAME: (<3 x float> [[ARG:%.*]]) {
110a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <3 x float> @_Z3logDv3_f(<3 x float> [[ARG]])
111a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <3 x float> [[LOG]]
112a8376bbeSMatt Arsenault;
113a8376bbeSMatt Arsenault  %log = tail call <3 x float> @_Z3logDv3_f(<3 x float> %arg)
114a8376bbeSMatt Arsenault  ret <3 x float> %log
115a8376bbeSMatt Arsenault}
116a8376bbeSMatt Arsenault
117a8376bbeSMatt Arsenaultdefine <4 x float> @test_log_cr_v4f32(<4 x float> %arg) {
118a8376bbeSMatt Arsenault; CHECK-LABEL: define <4 x float> @test_log_cr_v4f32
119a8376bbeSMatt Arsenault; CHECK-SAME: (<4 x float> [[ARG:%.*]]) {
120a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <4 x float> @_Z3logDv4_f(<4 x float> [[ARG]])
121a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <4 x float> [[LOG]]
122a8376bbeSMatt Arsenault;
123a8376bbeSMatt Arsenault  %log = tail call <4 x float> @_Z3logDv4_f(<4 x float> %arg)
124a8376bbeSMatt Arsenault  ret <4 x float> %log
125a8376bbeSMatt Arsenault}
126a8376bbeSMatt Arsenault
127a8376bbeSMatt Arsenaultdefine <8 x float> @test_log_cr_v8f32(<8 x float> %arg) {
128a8376bbeSMatt Arsenault; CHECK-LABEL: define <8 x float> @test_log_cr_v8f32
129a8376bbeSMatt Arsenault; CHECK-SAME: (<8 x float> [[ARG:%.*]]) {
130a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <8 x float> @_Z3logDv8_f(<8 x float> [[ARG]])
131a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <8 x float> [[LOG]]
132a8376bbeSMatt Arsenault;
133a8376bbeSMatt Arsenault  %log = tail call <8 x float> @_Z3logDv8_f(<8 x float> %arg)
134a8376bbeSMatt Arsenault  ret <8 x float> %log
135a8376bbeSMatt Arsenault}
136a8376bbeSMatt Arsenault
137a8376bbeSMatt Arsenaultdefine <16 x float> @test_log_cr_v16f32(<16 x float> %arg) {
138a8376bbeSMatt Arsenault; CHECK-LABEL: define <16 x float> @test_log_cr_v16f32
139a8376bbeSMatt Arsenault; CHECK-SAME: (<16 x float> [[ARG:%.*]]) {
140a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <16 x float> @_Z3logDv16_f(<16 x float> [[ARG]])
141a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <16 x float> [[LOG]]
142a8376bbeSMatt Arsenault;
143a8376bbeSMatt Arsenault  %log = tail call <16 x float> @_Z3logDv16_f(<16 x float> %arg)
144a8376bbeSMatt Arsenault  ret <16 x float> %log
145a8376bbeSMatt Arsenault}
146a8376bbeSMatt Arsenault
147a8376bbeSMatt Arsenaultdefine double @test_log_f64(double %arg) {
148a8376bbeSMatt Arsenault; CHECK-LABEL: define double @test_log_f64
149a8376bbeSMatt Arsenault; CHECK-SAME: (double [[ARG:%.*]]) {
150a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call double @_Z3logd(double [[ARG]])
151a8376bbeSMatt Arsenault; CHECK-NEXT:    ret double [[LOG]]
152a8376bbeSMatt Arsenault;
153a8376bbeSMatt Arsenault  %log = tail call double @_Z3logd(double %arg)
154a8376bbeSMatt Arsenault  ret double %log
155a8376bbeSMatt Arsenault}
156a8376bbeSMatt Arsenault
157a8376bbeSMatt Arsenaultdefine <2 x double> @test_log_v2f64(<2 x double> %arg) {
158a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x double> @test_log_v2f64
159a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x double> [[ARG:%.*]]) {
160a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <2 x double> @_Z3logDv2_d(<2 x double> [[ARG]])
161a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x double> [[LOG]]
162a8376bbeSMatt Arsenault;
163a8376bbeSMatt Arsenault  %log = tail call <2 x double> @_Z3logDv2_d(<2 x double> %arg)
164a8376bbeSMatt Arsenault  ret <2 x double> %log
165a8376bbeSMatt Arsenault}
166a8376bbeSMatt Arsenault
167a8376bbeSMatt Arsenaultdefine <3 x double> @test_log_v3f64(<3 x double> %arg) {
168a8376bbeSMatt Arsenault; CHECK-LABEL: define <3 x double> @test_log_v3f64
169a8376bbeSMatt Arsenault; CHECK-SAME: (<3 x double> [[ARG:%.*]]) {
170a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <3 x double> @_Z3logDv3_d(<3 x double> [[ARG]])
171a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <3 x double> [[LOG]]
172a8376bbeSMatt Arsenault;
173a8376bbeSMatt Arsenault  %log = tail call <3 x double> @_Z3logDv3_d(<3 x double> %arg)
174a8376bbeSMatt Arsenault  ret <3 x double> %log
175a8376bbeSMatt Arsenault}
176a8376bbeSMatt Arsenault
177a8376bbeSMatt Arsenaultdefine <4 x double> @test_log_v4f64(<4 x double> %arg) {
178a8376bbeSMatt Arsenault; CHECK-LABEL: define <4 x double> @test_log_v4f64
179a8376bbeSMatt Arsenault; CHECK-SAME: (<4 x double> [[ARG:%.*]]) {
180a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <4 x double> @_Z3logDv4_d(<4 x double> [[ARG]])
181a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <4 x double> [[LOG]]
182a8376bbeSMatt Arsenault;
183a8376bbeSMatt Arsenault  %log = tail call <4 x double> @_Z3logDv4_d(<4 x double> %arg)
184a8376bbeSMatt Arsenault  ret <4 x double> %log
185a8376bbeSMatt Arsenault}
186a8376bbeSMatt Arsenault
187a8376bbeSMatt Arsenaultdefine <8 x double> @test_log_v8f64(<8 x double> %arg) {
188a8376bbeSMatt Arsenault; CHECK-LABEL: define <8 x double> @test_log_v8f64
189a8376bbeSMatt Arsenault; CHECK-SAME: (<8 x double> [[ARG:%.*]]) {
190a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <8 x double> @_Z3logDv8_d(<8 x double> [[ARG]])
191a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <8 x double> [[LOG]]
192a8376bbeSMatt Arsenault;
193a8376bbeSMatt Arsenault  %log = tail call <8 x double> @_Z3logDv8_d(<8 x double> %arg)
194a8376bbeSMatt Arsenault  ret <8 x double> %log
195a8376bbeSMatt Arsenault}
196a8376bbeSMatt Arsenault
197a8376bbeSMatt Arsenaultdefine <16 x double> @test_log_v16f64(<16 x double> %arg) {
198a8376bbeSMatt Arsenault; CHECK-LABEL: define <16 x double> @test_log_v16f64
199a8376bbeSMatt Arsenault; CHECK-SAME: (<16 x double> [[ARG:%.*]]) {
200a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <16 x double> @_Z3logDv16_d(<16 x double> [[ARG]])
201a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <16 x double> [[LOG]]
202a8376bbeSMatt Arsenault;
203a8376bbeSMatt Arsenault  %log = tail call <16 x double> @_Z3logDv16_d(<16 x double> %arg)
204a8376bbeSMatt Arsenault  ret <16 x double> %log
205a8376bbeSMatt Arsenault}
206a8376bbeSMatt Arsenault
207a8376bbeSMatt Arsenaultdefine half @test_log_f16(half %arg) {
208a8376bbeSMatt Arsenault; CHECK-LABEL: define half @test_log_f16
209a8376bbeSMatt Arsenault; CHECK-SAME: (half [[ARG:%.*]]) {
210a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call half @_Z3logDh(half [[ARG]])
211a8376bbeSMatt Arsenault; CHECK-NEXT:    ret half [[LOG]]
212a8376bbeSMatt Arsenault;
213a8376bbeSMatt Arsenault  %log = tail call half @_Z3logDh(half %arg)
214a8376bbeSMatt Arsenault  ret half %log
215a8376bbeSMatt Arsenault}
216a8376bbeSMatt Arsenault
217a8376bbeSMatt Arsenaultdefine half @test_log_f16_fast(half %arg) {
218a8376bbeSMatt Arsenault; CHECK-LABEL: define half @test_log_f16_fast
219a8376bbeSMatt Arsenault; CHECK-SAME: (half [[ARG:%.*]]) {
220d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call fast half @llvm.log.f16(half [[ARG]])
221a8376bbeSMatt Arsenault; CHECK-NEXT:    ret half [[LOG]]
222a8376bbeSMatt Arsenault;
223a8376bbeSMatt Arsenault  %log = tail call fast half @_Z3logDh(half %arg)
224a8376bbeSMatt Arsenault  ret half %log
225a8376bbeSMatt Arsenault}
226a8376bbeSMatt Arsenault
227a8376bbeSMatt Arsenaultdefine <2 x half> @test_log_v2f16(<2 x half> %arg) {
228a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x half> @test_log_v2f16
229a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x half> [[ARG:%.*]]) {
230a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <2 x half> @_Z3logDv2_Dh(<2 x half> [[ARG]])
231a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x half> [[LOG]]
232a8376bbeSMatt Arsenault;
233a8376bbeSMatt Arsenault  %log = tail call <2 x half> @_Z3logDv2_Dh(<2 x half> %arg)
234a8376bbeSMatt Arsenault  ret <2 x half> %log
235a8376bbeSMatt Arsenault}
236a8376bbeSMatt Arsenault
237a8376bbeSMatt Arsenaultdefine <3 x half> @test_log_v3f16(<3 x half> %arg) {
238a8376bbeSMatt Arsenault; CHECK-LABEL: define <3 x half> @test_log_v3f16
239a8376bbeSMatt Arsenault; CHECK-SAME: (<3 x half> [[ARG:%.*]]) {
240a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <3 x half> @_Z3logDv3_Dh(<3 x half> [[ARG]])
241a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <3 x half> [[LOG]]
242a8376bbeSMatt Arsenault;
243a8376bbeSMatt Arsenault  %log = tail call <3 x half> @_Z3logDv3_Dh(<3 x half> %arg)
244a8376bbeSMatt Arsenault  ret <3 x half> %log
245a8376bbeSMatt Arsenault}
246a8376bbeSMatt Arsenault
247a8376bbeSMatt Arsenaultdefine <4 x half> @test_log_v4f16(<4 x half> %arg) {
248a8376bbeSMatt Arsenault; CHECK-LABEL: define <4 x half> @test_log_v4f16
249a8376bbeSMatt Arsenault; CHECK-SAME: (<4 x half> [[ARG:%.*]]) {
250a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <4 x half> @_Z3logDv4_Dh(<4 x half> [[ARG]])
251a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <4 x half> [[LOG]]
252a8376bbeSMatt Arsenault;
253a8376bbeSMatt Arsenault  %log = tail call <4 x half> @_Z3logDv4_Dh(<4 x half> %arg)
254a8376bbeSMatt Arsenault  ret <4 x half> %log
255a8376bbeSMatt Arsenault}
256a8376bbeSMatt Arsenault
257a8376bbeSMatt Arsenaultdefine <8 x half> @test_log_v8f16(<8 x half> %arg) {
258a8376bbeSMatt Arsenault; CHECK-LABEL: define <8 x half> @test_log_v8f16
259a8376bbeSMatt Arsenault; CHECK-SAME: (<8 x half> [[ARG:%.*]]) {
260a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <8 x half> @_Z3logDv8_Dh(<8 x half> [[ARG]])
261a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <8 x half> [[LOG]]
262a8376bbeSMatt Arsenault;
263a8376bbeSMatt Arsenault  %log = tail call <8 x half> @_Z3logDv8_Dh(<8 x half> %arg)
264a8376bbeSMatt Arsenault  ret <8 x half> %log
265a8376bbeSMatt Arsenault}
266a8376bbeSMatt Arsenault
267a8376bbeSMatt Arsenaultdefine <16 x half> @test_log_v16f16(<16 x half> %arg) {
268a8376bbeSMatt Arsenault; CHECK-LABEL: define <16 x half> @test_log_v16f16
269a8376bbeSMatt Arsenault; CHECK-SAME: (<16 x half> [[ARG:%.*]]) {
270a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <16 x half> @_Z3logDv16_Dh(<16 x half> [[ARG]])
271a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <16 x half> [[LOG]]
272a8376bbeSMatt Arsenault;
273a8376bbeSMatt Arsenault  %log = tail call <16 x half> @_Z3logDv16_Dh(<16 x half> %arg)
274a8376bbeSMatt Arsenault  ret <16 x half> %log
275a8376bbeSMatt Arsenault}
276a8376bbeSMatt Arsenault
277a8376bbeSMatt Arsenaultdefine float @test_log_f32_nobuiltin_callsite(float %arg) {
278a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32_nobuiltin_callsite
279a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
280d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call float @_Z3logf(float [[ARG]]) #[[ATTR6:[0-9]+]], !fpmath !0
281a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
282a8376bbeSMatt Arsenault;
283a8376bbeSMatt Arsenault  %log = tail call float @_Z3logf(float %arg) #0, !fpmath !0
284a8376bbeSMatt Arsenault  ret float %log
285a8376bbeSMatt Arsenault}
286a8376bbeSMatt Arsenault
287a8376bbeSMatt Arsenaultdefine <2 x float> @test_log_v2f32_nobuiltin_callsite(<2 x float> %arg) {
288a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x float> @test_log_v2f32_nobuiltin_callsite
289a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x float> [[ARG:%.*]]) {
290d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <2 x float> @_Z3logDv2_f(<2 x float> [[ARG]]) #[[ATTR6]], !fpmath !0
291a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x float> [[LOG]]
292a8376bbeSMatt Arsenault;
293a8376bbeSMatt Arsenault  %log = tail call <2 x float> @_Z3logDv2_f(<2 x float> %arg) #0, !fpmath !0
294a8376bbeSMatt Arsenault  ret <2 x float> %log
295a8376bbeSMatt Arsenault}
296a8376bbeSMatt Arsenault
297a8376bbeSMatt Arsenaultdefine float @test_log_cr_f32_nobuiltin_callsite(float %arg) {
298a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_cr_f32_nobuiltin_callsite
299a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
300d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call float @_Z3logf(float [[ARG]]) #[[ATTR6]]
301a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
302a8376bbeSMatt Arsenault;
303a8376bbeSMatt Arsenault  %log = tail call float @_Z3logf(float %arg) #0
304a8376bbeSMatt Arsenault  ret float %log
305a8376bbeSMatt Arsenault}
306a8376bbeSMatt Arsenault
307a8376bbeSMatt Arsenaultdefine <2 x float> @test_log_cr_v2f32_nobuiltin_callsite(<2 x float> %arg) {
308a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x float> @test_log_cr_v2f32_nobuiltin_callsite
309a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x float> [[ARG:%.*]]) {
310d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <2 x float> @_Z3logDv2_f(<2 x float> [[ARG]]) #[[ATTR6]]
311a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x float> [[LOG]]
312a8376bbeSMatt Arsenault;
313a8376bbeSMatt Arsenault  %log = tail call <2 x float> @_Z3logDv2_f(<2 x float> %arg) #0
314a8376bbeSMatt Arsenault  ret <2 x float> %log
315a8376bbeSMatt Arsenault}
316a8376bbeSMatt Arsenault
317a8376bbeSMatt Arsenault; "no-builtins" should be ignored
318a8376bbeSMatt Arsenaultdefine float @test_log_f32_nobuiltins(float %arg) #1 {
319a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32_nobuiltins
320a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
321d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call float @_Z3logf(float [[ARG]]) #[[ATTR6]], !fpmath !0
322a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
323a8376bbeSMatt Arsenault;
324a8376bbeSMatt Arsenault  %log = tail call float @_Z3logf(float %arg) #0, !fpmath !0
325a8376bbeSMatt Arsenault  ret float %log
326a8376bbeSMatt Arsenault}
327a8376bbeSMatt Arsenault
328a8376bbeSMatt Arsenaultdefine <2 x float> @test_log_v2f32_nobuiltins(<2 x float> %arg) #1 {
329a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x float> @test_log_v2f32_nobuiltins
330a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x float> [[ARG:%.*]]) #[[ATTR0]] {
331d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <2 x float> @_Z3logDv2_f(<2 x float> [[ARG]]) #[[ATTR6]], !fpmath !0
332a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x float> [[LOG]]
333a8376bbeSMatt Arsenault;
334a8376bbeSMatt Arsenault  %log = tail call <2 x float> @_Z3logDv2_f(<2 x float> %arg) #0, !fpmath !0
335a8376bbeSMatt Arsenault  ret <2 x float> %log
336a8376bbeSMatt Arsenault}
337a8376bbeSMatt Arsenault
338a8376bbeSMatt Arsenaultdefine float @test_log_cr_f32_nobuiltins(float %arg) #1 {
339a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_cr_f32_nobuiltins
340a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR0]] {
341d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call float @_Z3logf(float [[ARG]]) #[[ATTR6]]
342a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
343a8376bbeSMatt Arsenault;
344a8376bbeSMatt Arsenault  %log = tail call float @_Z3logf(float %arg) #0
345a8376bbeSMatt Arsenault  ret float %log
346a8376bbeSMatt Arsenault}
347a8376bbeSMatt Arsenault
348a8376bbeSMatt Arsenaultdefine <2 x float> @test_log_cr_v2f32_nobuiltins(<2 x float> %arg) #1 {
349a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x float> @test_log_cr_v2f32_nobuiltins
350a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x float> [[ARG:%.*]]) #[[ATTR0]] {
351d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call <2 x float> @_Z3logDv2_f(<2 x float> [[ARG]]) #[[ATTR6]]
352a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x float> [[LOG]]
353a8376bbeSMatt Arsenault;
354a8376bbeSMatt Arsenault  %log = tail call <2 x float> @_Z3logDv2_f(<2 x float> %arg) #0
355a8376bbeSMatt Arsenault  ret <2 x float> %log
356a8376bbeSMatt Arsenault}
357a8376bbeSMatt Arsenault
358a8376bbeSMatt Arsenaultdefine float @test_log_f32_preserve_flags(float %arg) {
359a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32_preserve_flags
360a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
361d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call nnan ninf float @llvm.log.f32(float [[ARG]]), !fpmath !0
362a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
363a8376bbeSMatt Arsenault;
364a8376bbeSMatt Arsenault  %log = tail call nnan ninf float @_Z3logf(float %arg), !fpmath !0
365a8376bbeSMatt Arsenault  ret float %log
366a8376bbeSMatt Arsenault}
367a8376bbeSMatt Arsenault
368a8376bbeSMatt Arsenaultdefine <2 x float> @test_log_v2f32_preserve_flags(<2 x float> %arg) {
369a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x float> @test_log_v2f32_preserve_flags
370a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x float> [[ARG:%.*]]) {
371d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call nnan nsz contract <2 x float> @llvm.log.v2f32(<2 x float> [[ARG]]), !fpmath !0
372a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x float> [[LOG]]
373a8376bbeSMatt Arsenault;
374a8376bbeSMatt Arsenault  %log = tail call contract nsz nnan <2 x float> @_Z3logDv2_f(<2 x float> %arg), !fpmath !0
375a8376bbeSMatt Arsenault  ret <2 x float> %log
376a8376bbeSMatt Arsenault}
377a8376bbeSMatt Arsenault
378a8376bbeSMatt Arsenaultdefine float @test_log_f32_preserve_flags_md(float %arg) {
379a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32_preserve_flags_md
380a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
381d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call nnan ninf float @llvm.log.f32(float [[ARG]]), !fpmath !0, !foo !1
382a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
383a8376bbeSMatt Arsenault;
384a8376bbeSMatt Arsenault  %log = tail call nnan ninf float @_Z3logf(float %arg), !fpmath !0, !foo !1
385a8376bbeSMatt Arsenault  ret float %log
386a8376bbeSMatt Arsenault}
387a8376bbeSMatt Arsenault
388a8376bbeSMatt Arsenaultdefine <2 x float> @test_log_v2f32_preserve_flags_md(<2 x float> %arg) {
389a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x float> @test_log_v2f32_preserve_flags_md
390a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x float> [[ARG:%.*]]) {
391d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call nnan nsz contract <2 x float> @llvm.log.v2f32(<2 x float> [[ARG]]), !fpmath !0, !foo !1
392a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x float> [[LOG]]
393a8376bbeSMatt Arsenault;
394a8376bbeSMatt Arsenault  %log = tail call contract nsz nnan <2 x float> @_Z3logDv2_f(<2 x float> %arg), !fpmath !0, !foo !1
395a8376bbeSMatt Arsenault  ret <2 x float> %log
396a8376bbeSMatt Arsenault}
397a8376bbeSMatt Arsenault
398a8376bbeSMatt Arsenaultdefine float @test_log_cr_f32_preserve_flags(float %arg) {
399a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_cr_f32_preserve_flags
400a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
401d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call ninf contract float @llvm.log.f32(float [[ARG]])
402a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
403a8376bbeSMatt Arsenault;
404a8376bbeSMatt Arsenault  %log = tail call ninf contract float @_Z3logf(float %arg)
405a8376bbeSMatt Arsenault  ret float %log
406a8376bbeSMatt Arsenault}
407a8376bbeSMatt Arsenault
408a8376bbeSMatt Arsenaultdefine <2 x float> @test_log_cr_v2f32_preserve_flags(<2 x float> %arg) {
409a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x float> @test_log_cr_v2f32_preserve_flags
410a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x float> [[ARG:%.*]]) {
411d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call nnan nsz <2 x float> @llvm.log.v2f32(<2 x float> [[ARG]])
412a8376bbeSMatt Arsenault; CHECK-NEXT:    ret <2 x float> [[LOG]]
413a8376bbeSMatt Arsenault;
414a8376bbeSMatt Arsenault  %log = tail call nnan nsz <2 x float> @_Z3logDv2_f(<2 x float> %arg)
415a8376bbeSMatt Arsenault  ret <2 x float> %log
416a8376bbeSMatt Arsenault}
417a8376bbeSMatt Arsenault
418a8376bbeSMatt Arsenault; Test the libm name, not a recognized opencl builtin.
419a8376bbeSMatt Arsenaultdeclare float @logf(float) #2
420a8376bbeSMatt Arsenaultdeclare double @log(double) #2
421a8376bbeSMatt Arsenault
422a8376bbeSMatt Arsenaultdefine float @test_libm_log_f32(float %arg) {
423a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_libm_log_f32
424a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
425a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call float @logf(float [[ARG]])
426a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
427a8376bbeSMatt Arsenault;
428a8376bbeSMatt Arsenault  %log = tail call float @logf(float %arg)
429a8376bbeSMatt Arsenault  ret float %log
430a8376bbeSMatt Arsenault}
431a8376bbeSMatt Arsenault
432a8376bbeSMatt Arsenaultdefine float @test_libm_log_f32_fast(float %arg) {
433a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_libm_log_f32_fast
434a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
435a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call fast float @logf(float [[ARG]])
436a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
437a8376bbeSMatt Arsenault;
438a8376bbeSMatt Arsenault  %log = tail call fast float @logf(float %arg)
439a8376bbeSMatt Arsenault  ret float %log
440a8376bbeSMatt Arsenault}
441a8376bbeSMatt Arsenault
442a8376bbeSMatt Arsenaultdefine float @test_libm_log_f32_fpmath(float %arg) {
443a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_libm_log_f32_fpmath
444a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
445a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call float @logf(float [[ARG]]), !fpmath !0
446a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
447a8376bbeSMatt Arsenault;
448a8376bbeSMatt Arsenault  %log = tail call float @logf(float %arg), !fpmath !0
449a8376bbeSMatt Arsenault  ret float %log
450a8376bbeSMatt Arsenault}
451a8376bbeSMatt Arsenault
452a8376bbeSMatt Arsenaultdefine double @test_libm_log_f64(double %arg) {
453a8376bbeSMatt Arsenault; CHECK-LABEL: define double @test_libm_log_f64
454a8376bbeSMatt Arsenault; CHECK-SAME: (double [[ARG:%.*]]) {
455a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call double @log(double [[ARG]])
456a8376bbeSMatt Arsenault; CHECK-NEXT:    ret double [[LOG]]
457a8376bbeSMatt Arsenault;
458a8376bbeSMatt Arsenault  %log = tail call double @log(double %arg)
459a8376bbeSMatt Arsenault  ret double %log
460a8376bbeSMatt Arsenault}
461a8376bbeSMatt Arsenault
462a8376bbeSMatt Arsenaultdefine double @test_libm_log_f64_fast(double %arg) {
463a8376bbeSMatt Arsenault; CHECK-LABEL: define double @test_libm_log_f64_fast
464a8376bbeSMatt Arsenault; CHECK-SAME: (double [[ARG:%.*]]) {
465a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call fast double @log(double [[ARG]])
466a8376bbeSMatt Arsenault; CHECK-NEXT:    ret double [[LOG]]
467a8376bbeSMatt Arsenault;
468a8376bbeSMatt Arsenault  %log = tail call fast double @log(double %arg)
469a8376bbeSMatt Arsenault  ret double %log
470a8376bbeSMatt Arsenault}
471a8376bbeSMatt Arsenault
472a8376bbeSMatt Arsenaultdefine double @test_libm_log_f64_fpmath(double %arg) {
473a8376bbeSMatt Arsenault; CHECK-LABEL: define double @test_libm_log_f64_fpmath
474a8376bbeSMatt Arsenault; CHECK-SAME: (double [[ARG:%.*]]) {
475a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call double @log(double [[ARG]]), !fpmath !0
476a8376bbeSMatt Arsenault; CHECK-NEXT:    ret double [[LOG]]
477a8376bbeSMatt Arsenault;
478a8376bbeSMatt Arsenault  %log = tail call double @log(double %arg), !fpmath !0
479a8376bbeSMatt Arsenault  ret double %log
480a8376bbeSMatt Arsenault}
481a8376bbeSMatt Arsenault
482a8376bbeSMatt Arsenaultdefine float @test_log_f32_fast_noinline(float %arg) {
483a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32_fast_noinline
484a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) {
485d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call fast float @_Z3logf(float [[ARG]]) #[[ATTR7:[0-9]+]], !fpmath !0
486a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
487a8376bbeSMatt Arsenault;
488a8376bbeSMatt Arsenault  %log = tail call fast float @_Z3logf(float %arg) #3, !fpmath !0
489a8376bbeSMatt Arsenault  ret float %log
490a8376bbeSMatt Arsenault}
491a8376bbeSMatt Arsenault
492a8376bbeSMatt Arsenaultdefine float @test_log_f32_fast_optsize(float %arg) #4 {
493a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32_fast_optsize
494a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR2:[0-9]+]] {
495d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call fast float @llvm.log.f32(float [[ARG]]), !fpmath !0
496a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
497a8376bbeSMatt Arsenault;
498a8376bbeSMatt Arsenault  %log = tail call fast float @_Z3logf(float %arg), !fpmath !0
499a8376bbeSMatt Arsenault  ret float %log
500a8376bbeSMatt Arsenault}
501a8376bbeSMatt Arsenault
502a8376bbeSMatt Arsenaultdefine float @test_log_f32_fast_minsize(float %arg) #5 {
503a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32_fast_minsize
504a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR3:[0-9]+]] {
505d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call fast float @llvm.log.f32(float [[ARG]]), !fpmath !0
506a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
507a8376bbeSMatt Arsenault;
508a8376bbeSMatt Arsenault  %log = tail call fast float @_Z3logf(float %arg), !fpmath !0
509a8376bbeSMatt Arsenault  ret float %log
510a8376bbeSMatt Arsenault}
511a8376bbeSMatt Arsenault
512a8376bbeSMatt Arsenaultdefine float @test_log_f32_nsz_contract_optsize(float %arg) #4 {
513a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32_nsz_contract_optsize
514a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR2]] {
515d2517616SMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call nsz contract float @llvm.log.f32(float [[ARG]]), !fpmath !0
516a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
517a8376bbeSMatt Arsenault;
518a8376bbeSMatt Arsenault  %log = tail call nsz contract float @_Z3logf(float %arg), !fpmath !0
519a8376bbeSMatt Arsenault  ret float %log
520a8376bbeSMatt Arsenault}
521a8376bbeSMatt Arsenault
522a8376bbeSMatt Arsenaultdefine float @test_log_f32_nsz_contract_minsize(float %arg) #5 {
523a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32_nsz_contract_minsize
524a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR3]] {
525a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call nsz contract float @_Z3logf(float [[ARG]]), !fpmath !0
526a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
527a8376bbeSMatt Arsenault;
528a8376bbeSMatt Arsenault  %log = tail call nsz contract float @_Z3logf(float %arg), !fpmath !0
529a8376bbeSMatt Arsenault  ret float %log
530a8376bbeSMatt Arsenault}
531a8376bbeSMatt Arsenault
532a8376bbeSMatt Arsenaultdefine half @test_log_f16_fast_minsize(half %arg) #5 {
533a8376bbeSMatt Arsenault; CHECK-LABEL: define half @test_log_f16_fast_minsize
534a8376bbeSMatt Arsenault; CHECK-SAME: (half [[ARG:%.*]]) #[[ATTR3]] {
535a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call half @_Z3logDh(half [[ARG]])
536a8376bbeSMatt Arsenault; CHECK-NEXT:    ret half [[LOG]]
537a8376bbeSMatt Arsenault;
538a8376bbeSMatt Arsenault  %log = tail call half @_Z3logDh(half %arg)
539a8376bbeSMatt Arsenault  ret half %log
540a8376bbeSMatt Arsenault}
541a8376bbeSMatt Arsenault
542a8376bbeSMatt Arsenaultdefine float @test_log_f32_strictfp(float %arg) #6 {
543a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_log_f32_strictfp
544a8376bbeSMatt Arsenault; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR4:[0-9]+]] {
545a8376bbeSMatt Arsenault; CHECK-NEXT:    [[LOG:%.*]] = tail call nsz float @_Z3logf(float [[ARG]]) #[[ATTR4]]
546a8376bbeSMatt Arsenault; CHECK-NEXT:    ret float [[LOG]]
547a8376bbeSMatt Arsenault;
548a8376bbeSMatt Arsenault  %log = tail call nsz float @_Z3logf(float %arg) #6
549a8376bbeSMatt Arsenault  ret float %log
550a8376bbeSMatt Arsenault}
551a8376bbeSMatt Arsenault
552a8376bbeSMatt Arsenaultattributes #0 = { nobuiltin }
553a8376bbeSMatt Arsenaultattributes #1 = { "no-builtins" }
554a8376bbeSMatt Arsenaultattributes #2 = { nounwind memory(none) }
555a8376bbeSMatt Arsenaultattributes #3 = { noinline }
556a8376bbeSMatt Arsenaultattributes #4 = { optsize }
557a8376bbeSMatt Arsenaultattributes #5 = { minsize }
558a8376bbeSMatt Arsenaultattributes #6 = { strictfp }
559a8376bbeSMatt Arsenault
560a8376bbeSMatt Arsenault!0 = !{float 3.000000e+00}
561a8376bbeSMatt Arsenault!1 = !{i32 1234}
562