@@ -368,8 +368,8 @@ define float @ldexp_ldexp_reassoc(float %x, i32 %a, i32 %b) {
368
368
define float @ldexp_reassoc_ldexp_reassoc (float %x , i32 %a , i32 %b ) {
369
369
; CHECK-LABEL: define float @ldexp_reassoc_ldexp_reassoc
370
370
; CHECK-SAME: (float [[X:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]) {
371
- ; CHECK-NEXT: [[LDEXP0 :%.*]] = call reassoc float @llvm.ldexp.f32. i32(float [[X ]], i32 [[A]])
372
- ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[LDEXP0 ]], i32 [[B ]])
371
+ ; CHECK-NEXT: [[TMP1 :%.*]] = add i32 [[A ]], [[B]]
372
+ ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[X ]], i32 [[TMP1 ]])
373
373
; CHECK-NEXT: ret float [[LDEXP1]]
374
374
;
375
375
%ldexp0 = call reassoc float @llvm.ldexp.f32.i32 (float %x , i32 %a )
@@ -381,8 +381,8 @@ define float @ldexp_reassoc_ldexp_reassoc(float %x, i32 %a, i32 %b) {
381
381
define float @ldexp_reassoc_ldexp_reassoc_preserve_flags (float %x , i32 %a , i32 %b ) {
382
382
; CHECK-LABEL: define float @ldexp_reassoc_ldexp_reassoc_preserve_flags
383
383
; CHECK-SAME: (float [[X:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]) {
384
- ; CHECK-NEXT: [[LDEXP0 :%.*]] = call reassoc ninf float @llvm.ldexp.f32. i32(float [[X ]], i32 [[A]])
385
- ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc nnan float @llvm.ldexp.f32.i32(float [[LDEXP0 ]], i32 [[B ]])
384
+ ; CHECK-NEXT: [[TMP1 :%.*]] = add i32 [[A ]], [[B]]
385
+ ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc nnan ninf float @llvm.ldexp.f32.i32(float [[X ]], i32 [[TMP1 ]])
386
386
; CHECK-NEXT: ret float [[LDEXP1]]
387
387
;
388
388
%ldexp0 = call reassoc ninf float @llvm.ldexp.f32.i32 (float %x , i32 %a )
@@ -393,8 +393,8 @@ define float @ldexp_reassoc_ldexp_reassoc_preserve_flags(float %x, i32 %a, i32 %
393
393
define <2 x float > @ldexp_reassoc_ldexp_reassoc_vec (<2 x float > %x , <2 x i32 > %a , <2 x i32 > %b ) {
394
394
; CHECK-LABEL: define <2 x float> @ldexp_reassoc_ldexp_reassoc_vec
395
395
; CHECK-SAME: (<2 x float> [[X:%.*]], <2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]]) {
396
- ; CHECK-NEXT: [[LDEXP0 :%.*]] = call reassoc <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> [[X ]], <2 x i32> [[A]])
397
- ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> [[LDEXP0 ]], <2 x i32> [[B ]])
396
+ ; CHECK-NEXT: [[TMP1 :%.*]] = add <2 x i32> [[A ]], [[B]]
397
+ ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> [[X ]], <2 x i32> [[TMP1 ]])
398
398
; CHECK-NEXT: ret <2 x float> [[LDEXP1]]
399
399
;
400
400
%ldexp0 = call reassoc <2 x float > @llvm.ldexp.v2f32.v2i32 (<2 x float > %x , <2 x i32 > %a )
@@ -432,8 +432,7 @@ define float @ldexp_ldexp_different_exp_type(float %x, i32 %a, i64 %b) {
432
432
define float @ldexp_ldexp_constants (float %x ) {
433
433
; CHECK-LABEL: define float @ldexp_ldexp_constants
434
434
; CHECK-SAME: (float [[X:%.*]]) {
435
- ; CHECK-NEXT: [[LDEXP0:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[X]], i32 8)
436
- ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[LDEXP0]], i32 24)
435
+ ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[X]], i32 32)
437
436
; CHECK-NEXT: ret float [[LDEXP1]]
438
437
;
439
438
%ldexp0 = call reassoc float @llvm.ldexp.f32.i32 (float %x , i32 8 )
@@ -444,8 +443,7 @@ define float @ldexp_ldexp_constants(float %x) {
444
443
define float @ldexp_ldexp_opposite_constants (float %x ) {
445
444
; CHECK-LABEL: define float @ldexp_ldexp_opposite_constants
446
445
; CHECK-SAME: (float [[X:%.*]]) {
447
- ; CHECK-NEXT: [[LDEXP0:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[X]], i32 8)
448
- ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[LDEXP0]], i32 -8)
446
+ ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[X]], i32 0)
449
447
; CHECK-NEXT: ret float [[LDEXP1]]
450
448
;
451
449
%ldexp0 = call reassoc float @llvm.ldexp.f32.i32 (float %x , i32 8 )
@@ -456,9 +454,7 @@ define float @ldexp_ldexp_opposite_constants(float %x) {
456
454
define float @ldexp_ldexp_negated_variable_reassoc (float %x , i32 %a ) {
457
455
; CHECK-LABEL: define float @ldexp_ldexp_negated_variable_reassoc
458
456
; CHECK-SAME: (float [[X:%.*]], i32 [[A:%.*]]) {
459
- ; CHECK-NEXT: [[LDEXP0:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[X]], i32 [[A]])
460
- ; CHECK-NEXT: [[NEG_A:%.*]] = sub i32 0, [[A]]
461
- ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[LDEXP0]], i32 [[NEG_A]])
457
+ ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[X]], i32 0)
462
458
; CHECK-NEXT: ret float [[LDEXP1]]
463
459
;
464
460
%ldexp0 = call reassoc float @llvm.ldexp.f32.i32 (float %x , i32 %a )
@@ -514,8 +510,8 @@ define float @ldexp_ldexp_both_exp_known_positive(float %x, i32 %a.arg, i32 %b.a
514
510
; CHECK-SAME: (float [[X:%.*]], i32 [[A_ARG:%.*]], i32 [[B_ARG:%.*]]) {
515
511
; CHECK-NEXT: [[A:%.*]] = and i32 [[A_ARG]], 127
516
512
; CHECK-NEXT: [[B:%.*]] = and i32 [[B_ARG]], 127
517
- ; CHECK-NEXT: [[LDEXP0 :%.*]] = call float @llvm.ldexp.f32. i32(float [[X ]], i32 [[A]])
518
- ; CHECK-NEXT: [[LDEXP1:%.*]] = call float @llvm.ldexp.f32.i32(float [[LDEXP0 ]], i32 [[B ]])
513
+ ; CHECK-NEXT: [[TMP1 :%.*]] = add nuw nsw i32 [[A ]], [[B]]
514
+ ; CHECK-NEXT: [[LDEXP1:%.*]] = call float @llvm.ldexp.f32.i32(float [[X ]], i32 [[TMP1 ]])
519
515
; CHECK-NEXT: ret float [[LDEXP1]]
520
516
;
521
517
%a = and i32 %a.arg , 127
@@ -530,8 +526,8 @@ define float @ldexp_ldexp_both_exp_known_negative(float %x, ptr %a.ptr, ptr %b.p
530
526
; CHECK-SAME: (float [[X:%.*]], ptr [[A_PTR:%.*]], ptr [[B_PTR:%.*]]) {
531
527
; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[A_PTR]], align 4, !range [[RNG0:![0-9]+]]
532
528
; CHECK-NEXT: [[B:%.*]] = load i32, ptr [[B_PTR]], align 4, !range [[RNG0]]
533
- ; CHECK-NEXT: [[LDEXP0 :%.*]] = call float @llvm.ldexp.f32. i32(float [[X ]], i32 [[A]])
534
- ; CHECK-NEXT: [[LDEXP1:%.*]] = call float @llvm.ldexp.f32.i32(float [[LDEXP0 ]], i32 [[B ]])
529
+ ; CHECK-NEXT: [[TMP1 :%.*]] = add nsw i32 [[A ]], [[B]]
530
+ ; CHECK-NEXT: [[LDEXP1:%.*]] = call float @llvm.ldexp.f32.i32(float [[X ]], i32 [[TMP1 ]])
535
531
; CHECK-NEXT: ret float [[LDEXP1]]
536
532
;
537
533
%a = load i32 , ptr %a.ptr , !range !0
@@ -576,8 +572,7 @@ define float @ldexp_ldexp_exp_known_positive_and_negative(float %x, ptr %a.ptr,
576
572
define float @ldexp_reassoc_ldexp_reassoc_0 (float %x , i32 %y ) {
577
573
; CHECK-LABEL: define float @ldexp_reassoc_ldexp_reassoc_0
578
574
; CHECK-SAME: (float [[X:%.*]], i32 [[Y:%.*]]) {
579
- ; CHECK-NEXT: [[LDEXP0:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[X]], i32 0)
580
- ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[LDEXP0]], i32 [[Y]])
575
+ ; CHECK-NEXT: [[LDEXP1:%.*]] = call reassoc float @llvm.ldexp.f32.i32(float [[X]], i32 [[Y]])
581
576
; CHECK-NEXT: ret float [[LDEXP1]]
582
577
;
583
578
%ldexp0 = call reassoc float @llvm.ldexp.f32.i32 (float %x , i32 0 )
0 commit comments