@@ -136,11 +136,12 @@ define fp128 @powl_exp2l_not_fast(fp128 %x, fp128 %y) {
136136 ret fp128 %pow
137137}
138138
139+ ; TODO: exp10() is not widely enabled by many targets yet.
140+
139141define float @powf_exp10f (float %x , float %y ) {
140- ; CHECK-LABEL: define float @powf_exp10f(
141- ; CHECK-SAME: float [[X:%.*]], float [[Y:%.*]]) {
142- ; CHECK-NEXT: [[CALL:%.*]] = call fast float @exp10f(float [[X]]) #[[ATTR1:[0-9]+]]
143- ; CHECK-NEXT: [[POW:%.*]] = call fast float @llvm.pow.f32(float [[CALL]], 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:%.*]])
144145; CHECK-NEXT: ret float [[POW]]
145146;
146147 %call = call fast float @exp10f (float %x ) nounwind readnone
@@ -149,10 +150,9 @@ define float @powf_exp10f(float %x, float %y) {
149150}
150151
151152define double @pow_exp10 (double %x , double %y ) {
152- ; CHECK-LABEL: define double @pow_exp10(
153- ; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) {
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]])
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:%.*]])
156156; CHECK-NEXT: ret double [[POW]]
157157;
158158 %call = call fast double @exp10 (double %x ) nounwind readnone
@@ -161,10 +161,9 @@ define double @pow_exp10(double %x, double %y) {
161161}
162162
163163define fp128 @pow_exp10l (fp128 %x , fp128 %y ) {
164- ; CHECK-LABEL: define fp128 @pow_exp10l(
165- ; CHECK-SAME: fp128 [[X:%.*]], fp128 [[Y:%.*]]) {
166- ; CHECK-NEXT: [[CALL:%.*]] = call fast fp128 @exp10l(fp128 [[X]]) #[[ATTR1]]
167- ; CHECK-NEXT: [[POW:%.*]] = call fast fp128 @llvm.pow.f128(fp128 [[CALL]], 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:%.*]])
168167; CHECK-NEXT: ret fp128 [[POW]]
169168;
170169 %call = call fast fp128 @exp10l (fp128 %x ) nounwind readnone
@@ -256,10 +255,10 @@ define double @pow_ok_base3(double %e) {
256255}
257256
258257define double @pow_ok_ten_base (double %e ) {
259- ; CHECK-LABEL: define double @pow_ok_ten_base(
260- ; CHECK-SAME: double [[E:%.*]]) {
261- ; CHECK-NEXT: [[EXP10 :%.*]] = tail call nnan ninf afn double @exp10 (double [[E ]])
262- ; CHECK-NEXT: ret double [[EXP10 ]]
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 ]]
263262;
264263 %call = tail call afn nnan ninf double @pow (double 1 .000000e+01 , double %e )
265264 ret double %call
@@ -306,10 +305,10 @@ define float @powf_ok_base3(float %e) {
306305}
307306
308307define float @powf_ok_ten_base (float %e ) {
309- ; CHECK-LABEL: define float @powf_ok_ten_base(
310- ; CHECK-SAME: float [[E:%.*]]) {
311- ; CHECK-NEXT: [[EXP10F :%.*]] = tail call nnan ninf afn float @exp10f (float [[E ]])
312- ; CHECK-NEXT: ret float [[EXP10F ]]
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 ]]
313312;
314313 %call = tail call afn nnan ninf float @powf (float 1 .000000e+01 , float %e )
315314 ret float %call
0 commit comments