@@ -13,10 +13,10 @@ define i32 @combine_gt_ge_10() #0 {
13
13
; CHECK: // %bb.0: // %entry
14
14
; CHECK-NEXT: adrp x8, :got:a
15
15
; CHECK-NEXT: ldr x8, [x8, :got_lo12:a]
16
- ; CHECK-NEXT: ldr w8, [x8]
17
- ; CHECK-NEXT: cmp w8, #10
16
+ ; CHECK-NEXT: ldr w9, [x8]
18
17
; CHECK-NEXT: adrp x8, :got:b
19
18
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
19
+ ; CHECK-NEXT: cmp w9, #10
20
20
; CHECK-NEXT: b.le .LBB0_3
21
21
; CHECK-NEXT: // %bb.1: // %land.lhs.true
22
22
; CHECK-NEXT: adrp x9, :got:c
@@ -29,18 +29,17 @@ define i32 @combine_gt_ge_10() #0 {
29
29
; CHECK-NEXT: mov w0, #1 // =0x1
30
30
; CHECK-NEXT: ret
31
31
; CHECK-NEXT: .LBB0_3: // %lor.lhs.false
32
- ; CHECK-NEXT: b.lt .LBB0_6
32
+ ; CHECK-NEXT: cmp w9, #10
33
+ ; CHECK-NEXT: b.lt .LBB0_5
33
34
; CHECK-NEXT: .LBB0_4: // %land.lhs.true3
34
35
; CHECK-NEXT: adrp x9, :got:d
35
36
; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
36
37
; CHECK-NEXT: ldr w8, [x8]
37
38
; CHECK-NEXT: ldr w9, [x9]
38
39
; CHECK-NEXT: cmp w8, w9
39
- ; CHECK-NEXT: b.ne .LBB0_6
40
- ; CHECK-NEXT: // %bb.5:
41
- ; CHECK-NEXT: mov w0, #1 // =0x1
40
+ ; CHECK-NEXT: cset w0, eq
42
41
; CHECK-NEXT: ret
43
- ; CHECK-NEXT: .LBB0_6: // %if.end
42
+ ; CHECK-NEXT: .LBB0_5:
44
43
; CHECK-NEXT: mov w0, wzr
45
44
; CHECK-NEXT: ret
46
45
entry:
@@ -145,10 +144,10 @@ define i32 @combine_lt_ge_5() #0 {
145
144
; CHECK: // %bb.0: // %entry
146
145
; CHECK-NEXT: adrp x8, :got:a
147
146
; CHECK-NEXT: ldr x8, [x8, :got_lo12:a]
148
- ; CHECK-NEXT: ldr w8, [x8]
149
- ; CHECK-NEXT: cmp w8, #5
147
+ ; CHECK-NEXT: ldr w9, [x8]
150
148
; CHECK-NEXT: adrp x8, :got:b
151
149
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
150
+ ; CHECK-NEXT: cmp w9, #5
152
151
; CHECK-NEXT: b.ge .LBB2_3
153
152
; CHECK-NEXT: // %bb.1: // %land.lhs.true
154
153
; CHECK-NEXT: adrp x9, :got:c
@@ -161,18 +160,17 @@ define i32 @combine_lt_ge_5() #0 {
161
160
; CHECK-NEXT: mov w0, #1 // =0x1
162
161
; CHECK-NEXT: ret
163
162
; CHECK-NEXT: .LBB2_3: // %lor.lhs.false
164
- ; CHECK-NEXT: b.gt .LBB2_6
163
+ ; CHECK-NEXT: cmp w9, #5
164
+ ; CHECK-NEXT: b.gt .LBB2_5
165
165
; CHECK-NEXT: .LBB2_4: // %land.lhs.true3
166
166
; CHECK-NEXT: adrp x9, :got:d
167
167
; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
168
168
; CHECK-NEXT: ldr w8, [x8]
169
169
; CHECK-NEXT: ldr w9, [x9]
170
170
; CHECK-NEXT: cmp w8, w9
171
- ; CHECK-NEXT: b.ne .LBB2_6
172
- ; CHECK-NEXT: // %bb.5:
173
- ; CHECK-NEXT: mov w0, #1 // =0x1
171
+ ; CHECK-NEXT: cset w0, eq
174
172
; CHECK-NEXT: ret
175
- ; CHECK-NEXT: .LBB2_6: // %if.end
173
+ ; CHECK-NEXT: .LBB2_5:
176
174
; CHECK-NEXT: mov w0, wzr
177
175
; CHECK-NEXT: ret
178
176
entry:
@@ -499,24 +497,17 @@ define i32 @do_nothing_if_resultant_opcodes_would_differ() #0 {
499
497
; CHECK-NEXT: // %bb.3: // %while.cond.while.end_crit_edge
500
498
; CHECK-NEXT: ldr w8, [x19]
501
499
; CHECK-NEXT: .LBB7_4: // %while.end
502
- ; CHECK-NEXT: cmp w8, #1
503
- ; CHECK-NEXT: b.gt .LBB7_7
504
- ; CHECK-NEXT: // %bb.5: // %land.lhs.true
505
- ; CHECK-NEXT: adrp x8, :got:b
506
- ; CHECK-NEXT: adrp x9, :got:d
507
- ; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
508
- ; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
509
- ; CHECK-NEXT: ldr w8, [x8]
510
- ; CHECK-NEXT: ldr w9, [x9]
511
- ; CHECK-NEXT: cmp w8, w9
512
- ; CHECK-NEXT: b.ne .LBB7_7
513
- ; CHECK-NEXT: // %bb.6:
514
- ; CHECK-NEXT: mov w0, #123 // =0x7b
515
- ; CHECK-NEXT: b .LBB7_8
516
- ; CHECK-NEXT: .LBB7_7: // %if.end
517
- ; CHECK-NEXT: mov w0, wzr
518
- ; CHECK-NEXT: .LBB7_8: // %return
500
+ ; CHECK-NEXT: adrp x9, :got:b
501
+ ; CHECK-NEXT: adrp x10, :got:d
502
+ ; CHECK-NEXT: ldr x9, [x9, :got_lo12:b]
503
+ ; CHECK-NEXT: ldr x10, [x10, :got_lo12:d]
519
504
; CHECK-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload
505
+ ; CHECK-NEXT: ldr w9, [x9]
506
+ ; CHECK-NEXT: ldr w10, [x10]
507
+ ; CHECK-NEXT: cmp w9, w10
508
+ ; CHECK-NEXT: ccmp w8, #2, #0, eq
509
+ ; CHECK-NEXT: mov w8, #123 // =0x7b
510
+ ; CHECK-NEXT: csel w0, w8, wzr, lt
520
511
; CHECK-NEXT: ldr x30, [sp], #32 // 8-byte Folded Reload
521
512
; CHECK-NEXT: .cfi_def_cfa_offset 0
522
513
; CHECK-NEXT: .cfi_restore w19
@@ -564,52 +555,42 @@ return: ; preds = %if.end, %land.lhs.t
564
555
define i32 @do_nothing_if_compares_can_not_be_adjusted_to_each_other () #0 {
565
556
; CHECK-LABEL: do_nothing_if_compares_can_not_be_adjusted_to_each_other:
566
557
; CHECK: // %bb.0: // %entry
567
- ; CHECK-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill
568
- ; CHECK-NEXT: .cfi_def_cfa_offset 16
569
- ; CHECK-NEXT: .cfi_offset w19, -8
570
- ; CHECK-NEXT: .cfi_offset w30, -16
571
- ; CHECK-NEXT: .cfi_remember_state
572
558
; CHECK-NEXT: adrp x8, :got:a
573
559
; CHECK-NEXT: ldr x8, [x8, :got_lo12:a]
574
560
; CHECK-NEXT: ldr w8, [x8]
575
561
; CHECK-NEXT: cmp w8, #0
576
- ; CHECK-NEXT: b.gt .LBB8_3
562
+ ; CHECK-NEXT: b.gt .LBB8_4
577
563
; CHECK-NEXT: // %bb.1: // %while.body.preheader
564
+ ; CHECK-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill
565
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
566
+ ; CHECK-NEXT: .cfi_offset w19, -8
567
+ ; CHECK-NEXT: .cfi_offset w30, -16
578
568
; CHECK-NEXT: sub w19, w8, #1
579
569
; CHECK-NEXT: .LBB8_2: // %while.body
580
570
; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
581
571
; CHECK-NEXT: bl do_something
582
572
; CHECK-NEXT: adds w19, w19, #1
583
573
; CHECK-NEXT: b.mi .LBB8_2
584
- ; CHECK-NEXT: .LBB8_3: // %while.end
585
- ; CHECK-NEXT: adrp x8, :got:c
586
- ; CHECK-NEXT: ldr x8, [x8, :got_lo12:c]
587
- ; CHECK-NEXT: ldr w8, [x8]
588
- ; CHECK-NEXT: cmn w8, #2
589
- ; CHECK-NEXT: b.lt .LBB8_6
590
- ; CHECK-NEXT: // %bb.4: // %land.lhs.true
574
+ ; CHECK-NEXT: // %bb.3:
575
+ ; CHECK-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload
576
+ ; CHECK-NEXT: .cfi_def_cfa_offset 0
577
+ ; CHECK-NEXT: .cfi_restore w19
578
+ ; CHECK-NEXT: .cfi_restore w30
579
+ ; CHECK-NEXT: .LBB8_4: // %while.end
591
580
; CHECK-NEXT: adrp x8, :got:b
592
581
; CHECK-NEXT: adrp x9, :got:d
582
+ ; CHECK-NEXT: adrp x10, :got:c
593
583
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
594
584
; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
585
+ ; CHECK-NEXT: ldr x10, [x10, :got_lo12:c]
595
586
; CHECK-NEXT: ldr w8, [x8]
596
587
; CHECK-NEXT: ldr w9, [x9]
588
+ ; CHECK-NEXT: ldr w10, [x10]
597
589
; CHECK-NEXT: cmp w8, w9
598
- ; CHECK-NEXT: b.ne .LBB8_6
599
- ; CHECK-NEXT: // %bb.5:
600
- ; CHECK-NEXT: mov w0, #123 // =0x7b
601
- ; CHECK-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload
602
- ; CHECK-NEXT: .cfi_def_cfa_offset 0
603
- ; CHECK-NEXT: .cfi_restore w19
604
- ; CHECK-NEXT: .cfi_restore w30
605
- ; CHECK-NEXT: ret
606
- ; CHECK-NEXT: .LBB8_6: // %if.end
607
- ; CHECK-NEXT: .cfi_restore_state
608
- ; CHECK-NEXT: mov w0, wzr
609
- ; CHECK-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload
610
- ; CHECK-NEXT: .cfi_def_cfa_offset 0
611
- ; CHECK-NEXT: .cfi_restore w19
612
- ; CHECK-NEXT: .cfi_restore w30
590
+ ; CHECK-NEXT: mov w8, #-3 // =0xfffffffd
591
+ ; CHECK-NEXT: ccmp w10, w8, #4, eq
592
+ ; CHECK-NEXT: mov w8, #123 // =0x7b
593
+ ; CHECK-NEXT: csel w0, w8, wzr, gt
613
594
; CHECK-NEXT: ret
614
595
entry:
615
596
%0 = load i32 , ptr @a , align 4
@@ -782,37 +763,34 @@ define i32 @combine_gt_ge_sel(i64 %v, ptr %p) #0 {
782
763
; CHECK-NEXT: cmp w8, #0
783
764
; CHECK-NEXT: csel x9, x0, xzr, gt
784
765
; CHECK-NEXT: str x9, [x1]
785
- ; CHECK-NEXT: b.le .LBB11_2
766
+ ; CHECK-NEXT: b.le .LBB11_3
786
767
; CHECK-NEXT: // %bb.1: // %lor.lhs.false
787
768
; CHECK-NEXT: cmp w8, #2
788
- ; CHECK-NEXT: b.ge .LBB11_4
789
- ; CHECK-NEXT: b .LBB11_6
790
- ; CHECK-NEXT: .LBB11_2: // %land.lhs.true
769
+ ; CHECK-NEXT: b.ge .LBB11_5
770
+ ; CHECK-NEXT: // %bb.2:
771
+ ; CHECK-NEXT: mov w0, wzr
772
+ ; CHECK-NEXT: ret
773
+ ; CHECK-NEXT: .LBB11_3: // %land.lhs.true
791
774
; CHECK-NEXT: adrp x8, :got:b
792
775
; CHECK-NEXT: adrp x9, :got:c
793
776
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
794
777
; CHECK-NEXT: ldr x9, [x9, :got_lo12:c]
795
778
; CHECK-NEXT: ldr w8, [x8]
796
779
; CHECK-NEXT: ldr w9, [x9]
797
780
; CHECK-NEXT: cmp w8, w9
798
- ; CHECK-NEXT: b.ne .LBB11_4
799
- ; CHECK-NEXT: // %bb.3 :
781
+ ; CHECK-NEXT: b.ne .LBB11_5
782
+ ; CHECK-NEXT: // %bb.4 :
800
783
; CHECK-NEXT: mov w0, #1 // =0x1
801
784
; CHECK-NEXT: ret
802
- ; CHECK-NEXT: .LBB11_4 : // %land.lhs.true3
785
+ ; CHECK-NEXT: .LBB11_5 : // %land.lhs.true3
803
786
; CHECK-NEXT: adrp x8, :got:b
804
787
; CHECK-NEXT: adrp x9, :got:d
805
788
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
806
789
; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
807
790
; CHECK-NEXT: ldr w8, [x8]
808
791
; CHECK-NEXT: ldr w9, [x9]
809
792
; CHECK-NEXT: cmp w8, w9
810
- ; CHECK-NEXT: b.ne .LBB11_6
811
- ; CHECK-NEXT: // %bb.5:
812
- ; CHECK-NEXT: mov w0, #1 // =0x1
813
- ; CHECK-NEXT: ret
814
- ; CHECK-NEXT: .LBB11_6: // %if.end
815
- ; CHECK-NEXT: mov w0, wzr
793
+ ; CHECK-NEXT: cset w0, eq
816
794
; CHECK-NEXT: ret
817
795
entry:
818
796
%0 = load i32 , ptr @a , align 4
0 commit comments