@@ -13,10 +13,10 @@ define i32 @combine_gt_ge_10() #0 {
1313; CHECK: // %bb.0: // %entry
1414; CHECK-NEXT: adrp x8, :got:a
1515; 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
1718; CHECK-NEXT: adrp x8, :got:b
1819; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
19- ; CHECK-NEXT: cmp w9, #10
2020; CHECK-NEXT: b.le .LBB0_3
2121; CHECK-NEXT: // %bb.1: // %land.lhs.true
2222; CHECK-NEXT: adrp x9, :got:c
@@ -29,17 +29,18 @@ define i32 @combine_gt_ge_10() #0 {
2929; CHECK-NEXT: mov w0, #1 // =0x1
3030; CHECK-NEXT: ret
3131; 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
3433; CHECK-NEXT: .LBB0_4: // %land.lhs.true3
3534; CHECK-NEXT: adrp x9, :got:d
3635; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
3736; CHECK-NEXT: ldr w8, [x8]
3837; CHECK-NEXT: ldr w9, [x9]
3938; 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
4142; CHECK-NEXT: ret
42- ; CHECK-NEXT: .LBB0_5:
43+ ; CHECK-NEXT: .LBB0_6: // %if.end
4344; CHECK-NEXT: mov w0, wzr
4445; CHECK-NEXT: ret
4546entry:
@@ -144,10 +145,10 @@ define i32 @combine_lt_ge_5() #0 {
144145; CHECK: // %bb.0: // %entry
145146; CHECK-NEXT: adrp x8, :got:a
146147; 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
148150; CHECK-NEXT: adrp x8, :got:b
149151; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
150- ; CHECK-NEXT: cmp w9, #5
151152; CHECK-NEXT: b.ge .LBB2_3
152153; CHECK-NEXT: // %bb.1: // %land.lhs.true
153154; CHECK-NEXT: adrp x9, :got:c
@@ -160,17 +161,18 @@ define i32 @combine_lt_ge_5() #0 {
160161; CHECK-NEXT: mov w0, #1 // =0x1
161162; CHECK-NEXT: ret
162163; 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
165165; CHECK-NEXT: .LBB2_4: // %land.lhs.true3
166166; CHECK-NEXT: adrp x9, :got:d
167167; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
168168; CHECK-NEXT: ldr w8, [x8]
169169; CHECK-NEXT: ldr w9, [x9]
170170; 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
172174; CHECK-NEXT: ret
173- ; CHECK-NEXT: .LBB2_5:
175+ ; CHECK-NEXT: .LBB2_6: // %if.end
174176; CHECK-NEXT: mov w0, wzr
175177; CHECK-NEXT: ret
176178entry:
@@ -497,17 +499,24 @@ define i32 @do_nothing_if_resultant_opcodes_would_differ() #0 {
497499; CHECK-NEXT: // %bb.3: // %while.cond.while.end_crit_edge
498500; CHECK-NEXT: ldr w8, [x19]
499501; 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]
505510; 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
511520; CHECK-NEXT: ldr x30, [sp], #32 // 8-byte Folded Reload
512521; CHECK-NEXT: .cfi_def_cfa_offset 0
513522; CHECK-NEXT: .cfi_restore w19
@@ -555,42 +564,52 @@ return: ; preds = %if.end, %land.lhs.t
555564define i32 @do_nothing_if_compares_can_not_be_adjusted_to_each_other () #0 {
556565; CHECK-LABEL: do_nothing_if_compares_can_not_be_adjusted_to_each_other:
557566; 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
558572; CHECK-NEXT: adrp x8, :got:a
559573; CHECK-NEXT: ldr x8, [x8, :got_lo12:a]
560574; CHECK-NEXT: ldr w8, [x8]
561575; CHECK-NEXT: cmp w8, #0
562- ; CHECK-NEXT: b.gt .LBB8_4
576+ ; CHECK-NEXT: b.gt .LBB8_3
563577; 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
568578; CHECK-NEXT: sub w19, w8, #1
569579; CHECK-NEXT: .LBB8_2: // %while.body
570580; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
571581; CHECK-NEXT: bl do_something
572582; CHECK-NEXT: adds w19, w19, #1
573583; 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
580591; CHECK-NEXT: adrp x8, :got:b
581592; CHECK-NEXT: adrp x9, :got:d
582- ; CHECK-NEXT: adrp x10, :got:c
583593; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
584594; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
585- ; CHECK-NEXT: ldr x10, [x10, :got_lo12:c]
586595; CHECK-NEXT: ldr w8, [x8]
587596; CHECK-NEXT: ldr w9, [x9]
588- ; CHECK-NEXT: ldr w10, [x10]
589597; 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
594613; CHECK-NEXT: ret
595614entry:
596615 %0 = load i32 , ptr @a , align 4
@@ -763,34 +782,37 @@ define i32 @combine_gt_ge_sel(i64 %v, ptr %p) #0 {
763782; CHECK-NEXT: cmp w8, #0
764783; CHECK-NEXT: csel x9, x0, xzr, gt
765784; CHECK-NEXT: str x9, [x1]
766- ; CHECK-NEXT: b.le .LBB11_3
785+ ; CHECK-NEXT: b.le .LBB11_2
767786; CHECK-NEXT: // %bb.1: // %lor.lhs.false
768787; 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
774791; CHECK-NEXT: adrp x8, :got:b
775792; CHECK-NEXT: adrp x9, :got:c
776793; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
777794; CHECK-NEXT: ldr x9, [x9, :got_lo12:c]
778795; CHECK-NEXT: ldr w8, [x8]
779796; CHECK-NEXT: ldr w9, [x9]
780797; 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 :
783800; CHECK-NEXT: mov w0, #1 // =0x1
784801; CHECK-NEXT: ret
785- ; CHECK-NEXT: .LBB11_5 : // %land.lhs.true3
802+ ; CHECK-NEXT: .LBB11_4 : // %land.lhs.true3
786803; CHECK-NEXT: adrp x8, :got:b
787804; CHECK-NEXT: adrp x9, :got:d
788805; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
789806; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
790807; CHECK-NEXT: ldr w8, [x8]
791808; CHECK-NEXT: ldr w9, [x9]
792809; 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
794816; CHECK-NEXT: ret
795817entry:
796818 %0 = load i32 , ptr @a , align 4
0 commit comments