@@ -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 w9, [x8]
16
+ ; CHECK-NEXT: ldr w8, [x8]
17
+ ; CHECK-NEXT: cmp w8, #10
17
18
; CHECK-NEXT: adrp x8, :got:b
18
19
; 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,17 +29,18 @@ 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: cmp w9, #10
33
- ; CHECK-NEXT: b.lt .LBB0_5
32
+ ; CHECK-NEXT: b.lt .LBB0_6
34
33
; CHECK-NEXT: .LBB0_4: // %land.lhs.true3
35
34
; CHECK-NEXT: adrp x9, :got:d
36
35
; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
37
36
; CHECK-NEXT: ldr w8, [x8]
38
37
; CHECK-NEXT: ldr w9, [x9]
39
38
; CHECK-NEXT: cmp w8, w9
40
- ; CHECK-NEXT: cset w0, eq
39
+ ; CHECK-NEXT: b.ne .LBB0_6
40
+ ; CHECK-NEXT: // %bb.5:
41
+ ; CHECK-NEXT: mov w0, #1 // =0x1
41
42
; CHECK-NEXT: ret
42
- ; CHECK-NEXT: .LBB0_5:
43
+ ; CHECK-NEXT: .LBB0_6: // %if.end
43
44
; CHECK-NEXT: mov w0, wzr
44
45
; CHECK-NEXT: ret
45
46
entry:
@@ -144,10 +145,10 @@ define i32 @combine_lt_ge_5() #0 {
144
145
; CHECK: // %bb.0: // %entry
145
146
; CHECK-NEXT: adrp x8, :got:a
146
147
; CHECK-NEXT: ldr x8, [x8, :got_lo12:a]
147
- ; CHECK-NEXT: ldr w9, [x8]
148
+ ; CHECK-NEXT: ldr w8, [x8]
149
+ ; CHECK-NEXT: cmp w8, #5
148
150
; CHECK-NEXT: adrp x8, :got:b
149
151
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
150
- ; CHECK-NEXT: cmp w9, #5
151
152
; CHECK-NEXT: b.ge .LBB2_3
152
153
; CHECK-NEXT: // %bb.1: // %land.lhs.true
153
154
; CHECK-NEXT: adrp x9, :got:c
@@ -160,17 +161,18 @@ define i32 @combine_lt_ge_5() #0 {
160
161
; CHECK-NEXT: mov w0, #1 // =0x1
161
162
; CHECK-NEXT: ret
162
163
; CHECK-NEXT: .LBB2_3: // %lor.lhs.false
163
- ; CHECK-NEXT: cmp w9, #5
164
- ; CHECK-NEXT: b.gt .LBB2_5
164
+ ; CHECK-NEXT: b.gt .LBB2_6
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: cset w0, eq
171
+ ; CHECK-NEXT: b.ne .LBB2_6
172
+ ; CHECK-NEXT: // %bb.5:
173
+ ; CHECK-NEXT: mov w0, #1 // =0x1
172
174
; CHECK-NEXT: ret
173
- ; CHECK-NEXT: .LBB2_5:
175
+ ; CHECK-NEXT: .LBB2_6: // %if.end
174
176
; CHECK-NEXT: mov w0, wzr
175
177
; CHECK-NEXT: ret
176
178
entry:
@@ -497,17 +499,24 @@ define i32 @do_nothing_if_resultant_opcodes_would_differ() #0 {
497
499
; CHECK-NEXT: // %bb.3: // %while.cond.while.end_crit_edge
498
500
; CHECK-NEXT: ldr w8, [x19]
499
501
; CHECK-NEXT: .LBB7_4: // %while.end
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]
504
- ; CHECK-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload
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]
505
510
; 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
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
519
+ ; CHECK-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload
511
520
; CHECK-NEXT: ldr x30, [sp], #32 // 8-byte Folded Reload
512
521
; CHECK-NEXT: .cfi_def_cfa_offset 0
513
522
; CHECK-NEXT: .cfi_restore w19
@@ -555,42 +564,52 @@ return: ; preds = %if.end, %land.lhs.t
555
564
define i32 @do_nothing_if_compares_can_not_be_adjusted_to_each_other () #0 {
556
565
; CHECK-LABEL: do_nothing_if_compares_can_not_be_adjusted_to_each_other:
557
566
; 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
558
572
; CHECK-NEXT: adrp x8, :got:a
559
573
; CHECK-NEXT: ldr x8, [x8, :got_lo12:a]
560
574
; CHECK-NEXT: ldr w8, [x8]
561
575
; CHECK-NEXT: cmp w8, #0
562
- ; CHECK-NEXT: b.gt .LBB8_4
576
+ ; CHECK-NEXT: b.gt .LBB8_3
563
577
; 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
568
578
; CHECK-NEXT: sub w19, w8, #1
569
579
; CHECK-NEXT: .LBB8_2: // %while.body
570
580
; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
571
581
; CHECK-NEXT: bl do_something
572
582
; CHECK-NEXT: adds w19, w19, #1
573
583
; CHECK-NEXT: b.mi .LBB8_2
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
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
580
591
; CHECK-NEXT: adrp x8, :got:b
581
592
; CHECK-NEXT: adrp x9, :got:d
582
- ; CHECK-NEXT: adrp x10, :got:c
583
593
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
584
594
; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
585
- ; CHECK-NEXT: ldr x10, [x10, :got_lo12:c]
586
595
; CHECK-NEXT: ldr w8, [x8]
587
596
; CHECK-NEXT: ldr w9, [x9]
588
- ; CHECK-NEXT: ldr w10, [x10]
589
597
; CHECK-NEXT: cmp w8, w9
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
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
594
613
; CHECK-NEXT: ret
595
614
entry:
596
615
%0 = load i32 , ptr @a , align 4
@@ -763,34 +782,37 @@ define i32 @combine_gt_ge_sel(i64 %v, ptr %p) #0 {
763
782
; CHECK-NEXT: cmp w8, #0
764
783
; CHECK-NEXT: csel x9, x0, xzr, gt
765
784
; CHECK-NEXT: str x9, [x1]
766
- ; CHECK-NEXT: b.le .LBB11_3
785
+ ; CHECK-NEXT: b.le .LBB11_2
767
786
; CHECK-NEXT: // %bb.1: // %lor.lhs.false
768
787
; CHECK-NEXT: cmp w8, #2
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
788
+ ; CHECK-NEXT: b.ge .LBB11_4
789
+ ; CHECK-NEXT: b .LBB11_6
790
+ ; CHECK-NEXT: .LBB11_2: // %land.lhs.true
774
791
; CHECK-NEXT: adrp x8, :got:b
775
792
; CHECK-NEXT: adrp x9, :got:c
776
793
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
777
794
; CHECK-NEXT: ldr x9, [x9, :got_lo12:c]
778
795
; CHECK-NEXT: ldr w8, [x8]
779
796
; CHECK-NEXT: ldr w9, [x9]
780
797
; CHECK-NEXT: cmp w8, w9
781
- ; CHECK-NEXT: b.ne .LBB11_5
782
- ; CHECK-NEXT: // %bb.4 :
798
+ ; CHECK-NEXT: b.ne .LBB11_4
799
+ ; CHECK-NEXT: // %bb.3 :
783
800
; CHECK-NEXT: mov w0, #1 // =0x1
784
801
; CHECK-NEXT: ret
785
- ; CHECK-NEXT: .LBB11_5 : // %land.lhs.true3
802
+ ; CHECK-NEXT: .LBB11_4 : // %land.lhs.true3
786
803
; CHECK-NEXT: adrp x8, :got:b
787
804
; CHECK-NEXT: adrp x9, :got:d
788
805
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
789
806
; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
790
807
; CHECK-NEXT: ldr w8, [x8]
791
808
; CHECK-NEXT: ldr w9, [x9]
792
809
; CHECK-NEXT: cmp w8, w9
793
- ; CHECK-NEXT: cset w0, eq
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
794
816
; CHECK-NEXT: ret
795
817
entry:
796
818
%0 = load i32 , ptr @a , align 4
0 commit comments