Skip to content

Commit 673d2eb

Browse files
Update with test-cases
1 parent c5a9e35 commit 673d2eb

File tree

3 files changed

+40
-28
lines changed

3 files changed

+40
-28
lines changed

llvm/lib/Analysis/TargetLibraryInfo.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -562,12 +562,9 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
562562
// or we have a reasonable detection strategy, we cannot use exp10 reliably
563563
// on Linux.
564564
//
565-
// Fall through to disable all of them.
566-
[[fallthrough]];
567-
default:
568-
TLI.setUnavailable(LibFunc_exp10);
569-
TLI.setUnavailable(LibFunc_exp10f);
570-
TLI.setUnavailable(LibFunc_exp10l);
565+
TLI.setAvailableWithName(LibFunc_exp10, "__exp10");
566+
TLI.setAvailableWithName(LibFunc_exp10f, "__exp10f");
567+
break;
571568
}
572569

573570
// ffsl is available on at least Darwin, Mac OS X, iOS, FreeBSD, and
@@ -834,6 +831,9 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
834831
TLI.setUnavailable(LibFunc_strndup);
835832
TLI.setUnavailable(LibFunc_strnlen);
836833
TLI.setUnavailable(LibFunc_toascii);
834+
TLI.setUnavailable(LibFunc_exp10);
835+
TLI.setUnavailable(LibFunc_exp10f);
836+
TLI.setUnavailable(LibFunc_exp10l);
837837
}
838838

839839
// As currently implemented in clang, NVPTX code has no standard library to

llvm/test/Transforms/InstCombine/double-float-shrink-1.ll

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,11 +224,20 @@ define double @expm1_test2(float %f) {
224224
; exp10f() doesn't exist for this triple, so it doesn't shrink.
225225

226226
define float @exp10_test1(float %f) {
227-
; CHECK-LABEL: @exp10_test1(
228-
; CHECK-NEXT: [[CONV:%.*]] = fpext float [[F:%.*]] to double
229-
; CHECK-NEXT: [[CALL:%.*]] = call fast double @exp10(double [[CONV]])
230-
; CHECK-NEXT: [[CONV1:%.*]] = fptrunc double [[CALL]] to float
231-
; CHECK-NEXT: ret float [[CONV1]]
227+
; LINUX-LABEL: define float @exp10_test1(
228+
; LINUX-SAME: float [[F:%.*]]) {
229+
; LINUX-NEXT: [[EXP10F:%.*]] = call fast float @__exp10f(float [[F]])
230+
; LINUX-NEXT: ret float [[EXP10F]]
231+
;
232+
; MS64-LABEL: define float @exp10_test1(
233+
; MS64-SAME: float [[F:%.*]]) {
234+
; MS64-NEXT: [[EXP10F:%.*]] = call fast float @exp10f(float [[F]])
235+
; MS64-NEXT: ret float [[EXP10F]]
236+
;
237+
; MS32-LABEL: define float @exp10_test1(
238+
; MS32-SAME: float [[F:%.*]]) {
239+
; MS32-NEXT: [[EXP10F:%.*]] = call fast float @exp10f(float [[F]])
240+
; MS32-NEXT: ret float [[EXP10F]]
232241
;
233242
%conv = fpext float %f to double
234243
%call = call fast double @exp10(double %conv)

llvm/test/Transforms/InstCombine/pow-exp.ll

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,10 @@ define fp128 @powl_exp2l_not_fast(fp128 %x, fp128 %y) {
139139
; TODO: exp10() is not widely enabled by many targets yet.
140140

141141
define float @powf_exp10f(float %x, float %y) {
142-
; CHECK-LABEL: @powf_exp10f(
143-
; CHECK-NEXT: [[CALL:%.*]] = call fast float @exp10f(float [[X:%.*]]) #[[ATTR1:[0-9]+]]
144-
; CHECK-NEXT: [[POW:%.*]] = call fast float @llvm.pow.f32(float [[CALL]], float [[Y:%.*]])
142+
; CHECK-LABEL: define float @powf_exp10f(
143+
; CHECK-SAME: float [[X:%.*]], float [[Y:%.*]]) {
144+
; CHECK-NEXT: [[CALL:%.*]] = call fast float @exp10f(float [[X]]) #[[ATTR1:[0-9]+]]
145+
; CHECK-NEXT: [[POW:%.*]] = call fast float @llvm.pow.f32(float [[CALL]], float [[Y]])
145146
; CHECK-NEXT: ret float [[POW]]
146147
;
147148
%call = call fast float @exp10f(float %x) nounwind readnone
@@ -150,9 +151,10 @@ define float @powf_exp10f(float %x, float %y) {
150151
}
151152

152153
define double @pow_exp10(double %x, double %y) {
153-
; CHECK-LABEL: @pow_exp10(
154-
; CHECK-NEXT: [[CALL:%.*]] = call fast double @exp10(double [[X:%.*]]) #[[ATTR1]]
155-
; CHECK-NEXT: [[POW:%.*]] = call fast double @llvm.pow.f64(double [[CALL]], double [[Y:%.*]])
154+
; CHECK-LABEL: define double @pow_exp10(
155+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) {
156+
; CHECK-NEXT: [[CALL:%.*]] = call fast double @exp10(double [[X]]) #[[ATTR1]]
157+
; CHECK-NEXT: [[POW:%.*]] = call fast double @llvm.pow.f64(double [[CALL]], double [[Y]])
156158
; CHECK-NEXT: ret double [[POW]]
157159
;
158160
%call = call fast double @exp10(double %x) nounwind readnone
@@ -161,9 +163,10 @@ define double @pow_exp10(double %x, double %y) {
161163
}
162164

163165
define fp128 @pow_exp10l(fp128 %x, fp128 %y) {
164-
; CHECK-LABEL: @pow_exp10l(
165-
; CHECK-NEXT: [[CALL:%.*]] = call fast fp128 @exp10l(fp128 [[X:%.*]]) #[[ATTR1]]
166-
; CHECK-NEXT: [[POW:%.*]] = call fast fp128 @llvm.pow.f128(fp128 [[CALL]], fp128 [[Y:%.*]])
166+
; CHECK-LABEL: define fp128 @pow_exp10l(
167+
; CHECK-SAME: fp128 [[X:%.*]], fp128 [[Y:%.*]]) {
168+
; CHECK-NEXT: [[CALL:%.*]] = call fast fp128 @exp10l(fp128 [[X]]) #[[ATTR1]]
169+
; CHECK-NEXT: [[POW:%.*]] = call fast fp128 @llvm.pow.f128(fp128 [[CALL]], fp128 [[Y]])
167170
; CHECK-NEXT: ret fp128 [[POW]]
168171
;
169172
%call = call fast fp128 @exp10l(fp128 %x) nounwind readnone
@@ -255,10 +258,10 @@ define double @pow_ok_base3(double %e) {
255258
}
256259

257260
define double @pow_ok_ten_base(double %e) {
258-
; CHECK-LABEL: @pow_ok_ten_base(
259-
; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x400A934F{{.*}}
260-
; CHECK-NEXT: [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])
261-
; CHECK-NEXT: ret double [[EXP2]]
261+
; CHECK-LABEL: define double @pow_ok_ten_base(
262+
; CHECK-SAME: double [[E:%.*]]) {
263+
; CHECK-NEXT: [[EXP10:%.*]] = tail call nnan ninf afn double @exp10(double [[E]])
264+
; CHECK-NEXT: ret double [[EXP10]]
262265
;
263266
%call = tail call afn nnan ninf double @pow(double 1.000000e+01, double %e)
264267
ret double %call
@@ -305,10 +308,10 @@ define float @powf_ok_base3(float %e) {
305308
}
306309

307310
define float @powf_ok_ten_base(float %e) {
308-
; CHECK-LABEL: @powf_ok_ten_base(
309-
; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x400A934{{.*}}
310-
; CHECK-NEXT: [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])
311-
; CHECK-NEXT: ret float [[EXP2F]]
311+
; CHECK-LABEL: define float @powf_ok_ten_base(
312+
; CHECK-SAME: float [[E:%.*]]) {
313+
; CHECK-NEXT: [[EXP10F:%.*]] = tail call nnan ninf afn float @exp10f(float [[E]])
314+
; CHECK-NEXT: ret float [[EXP10F]]
312315
;
313316
%call = tail call afn nnan ninf float @powf(float 1.000000e+01, float %e)
314317
ret float %call

0 commit comments

Comments
 (0)