Skip to content

Commit 1d62eef

Browse files
committed
Pre-commit test
1 parent bcfbba1 commit 1d62eef

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

llvm/test/CodeGen/AArch64/combine-comparisons-by-cse.ll

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,130 @@ return: ; preds = %if.end, %land.lhs.t
845845
ret i32 %retval.0
846846
}
847847

848+
; (a < 0 && b == c) || (a < -1 && b == d)
849+
define i32 @combine_gt_lt_n0() #0 {
850+
; CHECK-LABEL: combine_gt_lt_n0:
851+
; CHECK: // %bb.0: // %entry
852+
; CHECK-NEXT: adrp x8, :got:a
853+
; CHECK-NEXT: ldr x8, [x8, :got_lo12:a]
854+
; CHECK-NEXT: ldr w8, [x8]
855+
; CHECK-NEXT: tbz w8, #31, .LBB12_3
856+
; CHECK-NEXT: // %bb.1: // %land.lhs.true
857+
; CHECK-NEXT: adrp x8, :got:b
858+
; CHECK-NEXT: adrp x9, :got:c
859+
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
860+
; CHECK-NEXT: ldr x9, [x9, :got_lo12:c]
861+
; CHECK-NEXT: ldr w8, [x8]
862+
; CHECK-NEXT: ldr w9, [x9]
863+
; CHECK-NEXT: cmp w8, w9
864+
; CHECK-NEXT: b.ne .LBB12_3
865+
; CHECK-NEXT: // %bb.2:
866+
; CHECK-NEXT: mov w0, #1 // =0x1
867+
; CHECK-NEXT: ret
868+
; CHECK-NEXT: .LBB12_3: // %if.end
869+
; CHECK-NEXT: mov w0, wzr
870+
; CHECK-NEXT: ret
871+
entry:
872+
%0 = load i32, ptr @a, align 4
873+
%cmp = icmp slt i32 %0, 0
874+
br i1 %cmp, label %land.lhs.true, label %lor.lhs.false
875+
876+
land.lhs.true: ; preds = %entry
877+
%1 = load i32, ptr @b, align 4
878+
%2 = load i32, ptr @c, align 4
879+
%cmp1 = icmp eq i32 %1, %2
880+
br i1 %cmp1, label %return, label %if.end
881+
882+
lor.lhs.false: ; preds = %entry
883+
%cmp2 = icmp slt i32 %0, -1
884+
br i1 %cmp2, label %land.lhs.true3, label %if.end
885+
886+
land.lhs.true3: ; preds = %lor.lhs.false
887+
%3 = load i32, ptr @b, align 4
888+
%4 = load i32, ptr @d, align 4
889+
%cmp4 = icmp eq i32 %3, %4
890+
br i1 %cmp4, label %return, label %if.end
891+
892+
if.end: ; preds = %land.lhs.true3, %lor.lhs.false, %land.lhs.true
893+
br label %return
894+
895+
return: ; preds = %if.end, %land.lhs.true3, %land.lhs.true
896+
%retval.0 = phi i32 [ 0, %if.end ], [ 1, %land.lhs.true3 ], [ 1, %land.lhs.true ]
897+
ret i32 %retval.0
898+
}
899+
900+
define i32 @combine_gt_ge_sel_2(i64 %v, ptr %p) #0 {
901+
; CHECK-LABEL: combine_gt_ge_sel_2:
902+
; CHECK: // %bb.0: // %entry
903+
; CHECK-NEXT: adrp x8, :got:a
904+
; CHECK-NEXT: ldr x8, [x8, :got_lo12:a]
905+
; CHECK-NEXT: ldr w8, [x8]
906+
; CHECK-NEXT: cmn w8, #1
907+
; CHECK-NEXT: csel x9, x0, xzr, gt
908+
; CHECK-NEXT: str x9, [x1]
909+
; CHECK-NEXT: tbnz w8, #31, .LBB13_2
910+
; CHECK-NEXT: // %bb.1: // %lor.lhs.false
911+
; CHECK-NEXT: cmp w8, #1
912+
; CHECK-NEXT: b.ge .LBB13_4
913+
; CHECK-NEXT: b .LBB13_6
914+
; CHECK-NEXT: .LBB13_2: // %land.lhs.true
915+
; CHECK-NEXT: adrp x8, :got:b
916+
; CHECK-NEXT: adrp x9, :got:c
917+
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
918+
; CHECK-NEXT: ldr x9, [x9, :got_lo12:c]
919+
; CHECK-NEXT: ldr w8, [x8]
920+
; CHECK-NEXT: ldr w9, [x9]
921+
; CHECK-NEXT: cmp w8, w9
922+
; CHECK-NEXT: b.ne .LBB13_4
923+
; CHECK-NEXT: // %bb.3:
924+
; CHECK-NEXT: mov w0, #1 // =0x1
925+
; CHECK-NEXT: ret
926+
; CHECK-NEXT: .LBB13_4: // %land.lhs.true3
927+
; CHECK-NEXT: adrp x8, :got:b
928+
; CHECK-NEXT: adrp x9, :got:d
929+
; CHECK-NEXT: ldr x8, [x8, :got_lo12:b]
930+
; CHECK-NEXT: ldr x9, [x9, :got_lo12:d]
931+
; CHECK-NEXT: ldr w8, [x8]
932+
; CHECK-NEXT: ldr w9, [x9]
933+
; CHECK-NEXT: cmp w8, w9
934+
; CHECK-NEXT: b.ne .LBB13_6
935+
; CHECK-NEXT: // %bb.5:
936+
; CHECK-NEXT: mov w0, #1 // =0x1
937+
; CHECK-NEXT: ret
938+
; CHECK-NEXT: .LBB13_6: // %if.end
939+
; CHECK-NEXT: mov w0, wzr
940+
; CHECK-NEXT: ret
941+
entry:
942+
%0 = load i32, ptr @a, align 4
943+
%cmp = icmp sgt i32 %0, -1
944+
%m = select i1 %cmp, i64 %v, i64 0
945+
store i64 %m, ptr %p
946+
br i1 %cmp, label %lor.lhs.false, label %land.lhs.true
947+
948+
land.lhs.true: ; preds = %entry
949+
%1 = load i32, ptr @b, align 4
950+
%2 = load i32, ptr @c, align 4
951+
%cmp1 = icmp eq i32 %1, %2
952+
br i1 %cmp1, label %return, label %land.lhs.true3
953+
954+
lor.lhs.false: ; preds = %entry
955+
%cmp2 = icmp sgt i32 %0, 0
956+
br i1 %cmp2, label %land.lhs.true3, label %if.end
957+
958+
land.lhs.true3: ; preds = %lor.lhs.false, %land.lhs.true
959+
%3 = load i32, ptr @b, align 4
960+
%4 = load i32, ptr @d, align 4
961+
%cmp4 = icmp eq i32 %3, %4
962+
br i1 %cmp4, label %return, label %if.end
963+
964+
if.end: ; preds = %land.lhs.true3, %lor.lhs.false
965+
br label %return
966+
967+
return: ; preds = %if.end, %land.lhs.true3, %land.lhs.true
968+
%retval.0 = phi i32 [ 0, %if.end ], [ 1, %land.lhs.true3 ], [ 1, %land.lhs.true ]
969+
ret i32 %retval.0
970+
}
971+
848972
declare i32 @zoo(i32)
849973

850974
declare double @yoo(i32)

0 commit comments

Comments
 (0)