Skip to content

Commit 44a81af

Browse files
authored
[AArch64] Run LoopSimplifyPass in byte-compare-index.ll (#86053)
Make this test case work on both new and legacy pass manager. See also #85215
1 parent 35a66f9 commit 44a81af

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

llvm/test/Transforms/LoopIdiom/AArch64/byte-compare-index.ll

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -780,19 +780,22 @@ define i32 @compare_bytes_extra_cmp(ptr %a, ptr %b, i32 %len, i32 %n, i32 %x) {
780780
; CHECK-NEXT: [[LEN_ADDR:%.*]] = phi i32 [ [[LEN]], [[MISMATCH_END]] ], [ [[MISMATCH_RESULT]], [[WHILE_BODY:%.*]] ]
781781
; CHECK-NEXT: [[INC:%.*]] = add i32 [[LEN_ADDR]], 1
782782
; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq i32 [[MISMATCH_RESULT]], [[N]]
783-
; CHECK-NEXT: br i1 [[CMP_NOT]], label [[WHILE_END]], label [[WHILE_BODY]]
783+
; CHECK-NEXT: br i1 [[CMP_NOT]], label [[WHILE_END_LOOPEXIT:%.*]], label [[WHILE_BODY]]
784784
; CHECK: while.body:
785785
; CHECK-NEXT: [[IDXPROM:%.*]] = zext i32 [[MISMATCH_RESULT]] to i64
786786
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[IDXPROM]]
787787
; CHECK-NEXT: [[TMP45:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
788788
; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[IDXPROM]]
789789
; CHECK-NEXT: [[TMP46:%.*]] = load i8, ptr [[ARRAYIDX2]], align 1
790790
; CHECK-NEXT: [[CMP_NOT2:%.*]] = icmp eq i8 [[TMP45]], [[TMP46]]
791-
; CHECK-NEXT: br i1 [[CMP_NOT2]], label [[WHILE_COND]], label [[WHILE_END]]
791+
; CHECK-NEXT: br i1 [[CMP_NOT2]], label [[WHILE_COND]], label [[WHILE_END_LOOPEXIT]]
792792
; CHECK: byte.compare:
793+
; CHECK-NEXT: br label [[WHILE_END_LOOPEXIT]]
794+
; CHECK: while.end.loopexit:
795+
; CHECK-NEXT: [[INC_LCSSA1:%.*]] = phi i32 [ [[MISMATCH_RESULT]], [[WHILE_COND]] ], [ [[MISMATCH_RESULT]], [[WHILE_BODY]] ], [ [[MISMATCH_RESULT]], [[BYTE_COMPARE]] ]
793796
; CHECK-NEXT: br label [[WHILE_END]]
794797
; CHECK: while.end:
795-
; CHECK-NEXT: [[INC_LCSSA:%.*]] = phi i32 [ [[MISMATCH_RESULT]], [[WHILE_BODY]] ], [ [[MISMATCH_RESULT]], [[WHILE_COND]] ], [ [[X]], [[ENTRY:%.*]] ], [ [[MISMATCH_RESULT]], [[BYTE_COMPARE]] ]
798+
; CHECK-NEXT: [[INC_LCSSA:%.*]] = phi i32 [ [[X]], [[ENTRY:%.*]] ], [ [[INC_LCSSA1]], [[WHILE_END_LOOPEXIT]] ]
796799
; CHECK-NEXT: ret i32 [[INC_LCSSA]]
797800
;
798801
; LOOP-DEL-LABEL: define i32 @compare_bytes_extra_cmp(
@@ -884,17 +887,20 @@ define i32 @compare_bytes_extra_cmp(ptr %a, ptr %b, i32 %len, i32 %n, i32 %x) {
884887
; NO-TRANSFORM-NEXT: [[LEN_ADDR:%.*]] = phi i32 [ [[LEN]], [[PH]] ], [ [[INC:%.*]], [[WHILE_BODY:%.*]] ]
885888
; NO-TRANSFORM-NEXT: [[INC]] = add i32 [[LEN_ADDR]], 1
886889
; NO-TRANSFORM-NEXT: [[CMP_NOT:%.*]] = icmp eq i32 [[INC]], [[N]]
887-
; NO-TRANSFORM-NEXT: br i1 [[CMP_NOT]], label [[WHILE_END]], label [[WHILE_BODY]]
890+
; NO-TRANSFORM-NEXT: br i1 [[CMP_NOT]], label [[WHILE_END_LOOPEXIT:%.*]], label [[WHILE_BODY]]
888891
; NO-TRANSFORM: while.body:
889892
; NO-TRANSFORM-NEXT: [[IDXPROM:%.*]] = zext i32 [[INC]] to i64
890893
; NO-TRANSFORM-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[IDXPROM]]
891894
; NO-TRANSFORM-NEXT: [[TMP0:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
892895
; NO-TRANSFORM-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[IDXPROM]]
893896
; NO-TRANSFORM-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX2]], align 1
894897
; NO-TRANSFORM-NEXT: [[CMP_NOT2:%.*]] = icmp eq i8 [[TMP0]], [[TMP1]]
895-
; NO-TRANSFORM-NEXT: br i1 [[CMP_NOT2]], label [[WHILE_COND]], label [[WHILE_END]]
898+
; NO-TRANSFORM-NEXT: br i1 [[CMP_NOT2]], label [[WHILE_COND]], label [[WHILE_END_LOOPEXIT]]
899+
; NO-TRANSFORM: while.end.loopexit:
900+
; NO-TRANSFORM-NEXT: [[INC_LCSSA1:%.*]] = phi i32 [ [[INC]], [[WHILE_COND]] ], [ [[INC]], [[WHILE_BODY]] ]
901+
; NO-TRANSFORM-NEXT: br label [[WHILE_END]]
896902
; NO-TRANSFORM: while.end:
897-
; NO-TRANSFORM-NEXT: [[INC_LCSSA:%.*]] = phi i32 [ [[INC]], [[WHILE_BODY]] ], [ [[INC]], [[WHILE_COND]] ], [ [[X]], [[ENTRY:%.*]] ]
903+
; NO-TRANSFORM-NEXT: [[INC_LCSSA:%.*]] = phi i32 [ [[X]], [[ENTRY:%.*]] ], [ [[INC_LCSSA1]], [[WHILE_END_LOOPEXIT]] ]
898904
; NO-TRANSFORM-NEXT: ret i32 [[INC_LCSSA]]
899905
;
900906
entry:
@@ -908,7 +914,7 @@ while.cond:
908914
%len.addr = phi i32 [ %len, %ph ], [ %inc, %while.body ]
909915
%inc = add i32 %len.addr, 1
910916
%cmp.not = icmp eq i32 %inc, %n
911-
br i1 %cmp.not, label %while.end, label %while.body
917+
br i1 %cmp.not, label %while.end.loopexit, label %while.body
912918

913919
while.body:
914920
%idxprom = zext i32 %inc to i64
@@ -917,10 +923,14 @@ while.body:
917923
%arrayidx2 = getelementptr inbounds i8, ptr %b, i64 %idxprom
918924
%1 = load i8, ptr %arrayidx2
919925
%cmp.not2 = icmp eq i8 %0, %1
920-
br i1 %cmp.not2, label %while.cond, label %while.end
926+
br i1 %cmp.not2, label %while.cond, label %while.end.loopexit
927+
928+
while.end.loopexit:
929+
%inc.lcssa1 = phi i32 [ %inc, %while.cond ], [ %inc, %while.body ]
930+
br label %while.end
921931

922932
while.end:
923-
%inc.lcssa = phi i32 [ %inc, %while.body ], [ %inc, %while.cond ], [ %x, %entry ]
933+
%inc.lcssa = phi i32 [ %x, %entry ], [ %inc.lcssa1, %while.end.loopexit ]
924934
ret i32 %inc.lcssa
925935
}
926936

0 commit comments

Comments
 (0)