@@ -136,11 +136,12 @@ define fp128 @powl_exp2l_not_fast(fp128 %x, fp128 %y) {
136
136
ret fp128 %pow
137
137
}
138
138
139
+ ; TODO: exp10() is not widely enabled by many targets yet.
140
+
139
141
define 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:%.*]])
144
145
; CHECK-NEXT: ret float [[POW]]
145
146
;
146
147
%call = call fast float @exp10f (float %x ) nounwind readnone
@@ -149,10 +150,9 @@ define float @powf_exp10f(float %x, float %y) {
149
150
}
150
151
151
152
define 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:%.*]])
156
156
; CHECK-NEXT: ret double [[POW]]
157
157
;
158
158
%call = call fast double @exp10 (double %x ) nounwind readnone
@@ -161,10 +161,9 @@ define double @pow_exp10(double %x, double %y) {
161
161
}
162
162
163
163
define 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:%.*]])
168
167
; CHECK-NEXT: ret fp128 [[POW]]
169
168
;
170
169
%call = call fast fp128 @exp10l (fp128 %x ) nounwind readnone
@@ -256,10 +255,10 @@ define double @pow_ok_base3(double %e) {
256
255
}
257
256
258
257
define 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 ]]
263
262
;
264
263
%call = tail call afn nnan ninf double @pow (double 1 .000000e+01 , double %e )
265
264
ret double %call
@@ -306,10 +305,10 @@ define float @powf_ok_base3(float %e) {
306
305
}
307
306
308
307
define 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 ]]
313
312
;
314
313
%call = tail call afn nnan ninf float @powf (float 1 .000000e+01 , float %e )
315
314
ret float %call
0 commit comments