1
- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1
+ ; NOTE: Do not autogenerate
2
+ ; Assertions were previously autogenerated by utils/update_test_checks.py
3
+ ; but some hand modifications were needed to account for rounding errors
4
+ ; in constant folding that depend on the compiler's math library version.
2
5
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3
6
4
7
define float @powf_expf (float %x , float %y ) {
@@ -212,18 +215,18 @@ declare void @use_f(float)
212
215
213
216
define double @pow_ok_base (double %e ) {
214
217
; CHECK-LABEL: @pow_ok_base(
215
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0xBFE0776228967D13
218
+ ; Do not change 0xBFE0776{{.*}} to the exact constant, see PR42740
219
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0xBFE0776{{.*}}
216
220
; CHECK-NEXT: [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])
217
221
; CHECK-NEXT: ret double [[EXP2]]
218
222
;
219
- ; Do not change 0xBFE0776{{.*}} to the exact constant, see PR42740
220
223
%call = tail call afn nnan ninf double @pow (double 0x3FE6666666666666 , double %e )
221
224
ret double %call
222
225
}
223
226
224
227
define double @pow_ok_base_fast (double %e ) {
225
228
; CHECK-LABEL: @pow_ok_base_fast(
226
- ; CHECK-NEXT: [[MUL:%.*]] = fmul fast double [[E:%.*]], 0xBFE0776228967D13
229
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul fast double [[E:%.*]], 0xBFE0776{{.*}}
227
230
; CHECK-NEXT: [[EXP2:%.*]] = tail call fast double @exp2(double [[MUL]])
228
231
; CHECK-NEXT: ret double [[EXP2]]
229
232
;
@@ -233,7 +236,7 @@ define double @pow_ok_base_fast(double %e) {
233
236
234
237
define double @pow_ok_base2 (double %e ) {
235
238
; CHECK-LABEL: @pow_ok_base2(
236
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x4010952C788751AC
239
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x4010952{{.*}}
237
240
; CHECK-NEXT: [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])
238
241
; CHECK-NEXT: ret double [[EXP2]]
239
242
;
@@ -243,7 +246,7 @@ define double @pow_ok_base2(double %e) {
243
246
244
247
define double @pow_ok_base3 (double %e ) {
245
248
; CHECK-LABEL: @pow_ok_base3(
246
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x400AB0B5584886CD
249
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x400AB0B5{{.*}}
247
250
; CHECK-NEXT: [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])
248
251
; CHECK-NEXT: ret double [[EXP2]]
249
252
;
@@ -253,7 +256,7 @@ define double @pow_ok_base3(double %e) {
253
256
254
257
define double @pow_ok_ten_base (double %e ) {
255
258
; CHECK-LABEL: @pow_ok_ten_base(
256
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x400A934F0979A371
259
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x400A934F{{.*}}
257
260
; CHECK-NEXT: [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])
258
261
; CHECK-NEXT: ret double [[EXP2]]
259
262
;
@@ -273,7 +276,7 @@ define double @pow_ok_denorm_base(double %e) {
273
276
274
277
define float @powf_ok_base (float %e ) {
275
278
; CHECK-LABEL: @powf_ok_base(
276
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0xBFE0776240000000
279
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0xBFE07762{{.*}}
277
280
; CHECK-NEXT: [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])
278
281
; CHECK-NEXT: ret float [[EXP2F]]
279
282
;
@@ -283,7 +286,7 @@ define float @powf_ok_base(float %e) {
283
286
284
287
define float @powf_ok_base2 (float %e ) {
285
288
; CHECK-LABEL: @powf_ok_base2(
286
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x4010952C80000000
289
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x4010952{{.*}}
287
290
; CHECK-NEXT: [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])
288
291
; CHECK-NEXT: ret float [[EXP2F]]
289
292
;
@@ -293,7 +296,7 @@ define float @powf_ok_base2(float %e) {
293
296
294
297
define float @powf_ok_base3 (float %e ) {
295
298
; CHECK-LABEL: @powf_ok_base3(
296
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x400AB0B560000000
299
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x400AB0B5{{.*}}
297
300
; CHECK-NEXT: [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])
298
301
; CHECK-NEXT: ret float [[EXP2F]]
299
302
;
@@ -303,7 +306,7 @@ define float @powf_ok_base3(float %e) {
303
306
304
307
define float @powf_ok_ten_base (float %e ) {
305
308
; CHECK-LABEL: @powf_ok_ten_base(
306
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x400A934F00000000
309
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x400A934{{.*}}
307
310
; CHECK-NEXT: [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])
308
311
; CHECK-NEXT: ret float [[EXP2F]]
309
312
;
@@ -370,7 +373,7 @@ define double @pow_negative_base(double %e) {
370
373
371
374
define double @pow_multiuse (double %e ) {
372
375
; CHECK-LABEL: @pow_multiuse(
373
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x4002934F0979A371
376
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x4002934{{.*}}
374
377
; CHECK-NEXT: [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])
375
378
; CHECK-NEXT: tail call void @use_d(double [[EXP2]])
376
379
; CHECK-NEXT: ret double [[EXP2]]
@@ -400,7 +403,7 @@ define double @pow_ok_base_no_nnan(double %e) {
400
403
401
404
define double @pow_ok_base_no_ninf (double %e ) {
402
405
; CHECK-LABEL: @pow_ok_base_no_ninf(
403
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan afn double [[E:%.*]], 0xBFE0776228967D13
406
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan afn double [[E:%.*]], 0xBFE0776{{.*}}
404
407
; CHECK-NEXT: [[EXP2:%.*]] = tail call nnan afn double @exp2(double [[MUL]])
405
408
; CHECK-NEXT: ret double [[EXP2]]
406
409
;
@@ -455,7 +458,7 @@ define float @powf_negative_base(float %e) {
455
458
456
459
define float @powf_multiuse (float %e ) {
457
460
; CHECK-LABEL: @powf_multiuse(
458
- ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x4002934F00000000
461
+ ; CHECK-NEXT: [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x4002934{{.*}}
459
462
; CHECK-NEXT: [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])
460
463
; CHECK-NEXT: tail call void @use_f(float [[EXP2F]])
461
464
; CHECK-NEXT: ret float [[EXP2F]]
0 commit comments