@@ -780,19 +780,22 @@ define i32 @compare_bytes_extra_cmp(ptr %a, ptr %b, i32 %len, i32 %n, i32 %x) {
780
780
; CHECK-NEXT: [[LEN_ADDR:%.*]] = phi i32 [ [[LEN]], [[MISMATCH_END]] ], [ [[MISMATCH_RESULT]], [[WHILE_BODY:%.*]] ]
781
781
; CHECK-NEXT: [[INC:%.*]] = add i32 [[LEN_ADDR]], 1
782
782
; 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]]
784
784
; CHECK: while.body:
785
785
; CHECK-NEXT: [[IDXPROM:%.*]] = zext i32 [[MISMATCH_RESULT]] to i64
786
786
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[IDXPROM]]
787
787
; CHECK-NEXT: [[TMP45:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
788
788
; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[IDXPROM]]
789
789
; CHECK-NEXT: [[TMP46:%.*]] = load i8, ptr [[ARRAYIDX2]], align 1
790
790
; 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 ]]
792
792
; 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]] ]
793
796
; CHECK-NEXT: br label [[WHILE_END]]
794
797
; 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 ]] ]
796
799
; CHECK-NEXT: ret i32 [[INC_LCSSA]]
797
800
;
798
801
; 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) {
884
887
; NO-TRANSFORM-NEXT: [[LEN_ADDR:%.*]] = phi i32 [ [[LEN]], [[PH]] ], [ [[INC:%.*]], [[WHILE_BODY:%.*]] ]
885
888
; NO-TRANSFORM-NEXT: [[INC]] = add i32 [[LEN_ADDR]], 1
886
889
; 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]]
888
891
; NO-TRANSFORM: while.body:
889
892
; NO-TRANSFORM-NEXT: [[IDXPROM:%.*]] = zext i32 [[INC]] to i64
890
893
; NO-TRANSFORM-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 [[IDXPROM]]
891
894
; NO-TRANSFORM-NEXT: [[TMP0:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
892
895
; NO-TRANSFORM-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[IDXPROM]]
893
896
; NO-TRANSFORM-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX2]], align 1
894
897
; 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]]
896
902
; 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 ]] ]
898
904
; NO-TRANSFORM-NEXT: ret i32 [[INC_LCSSA]]
899
905
;
900
906
entry:
@@ -908,7 +914,7 @@ while.cond:
908
914
%len.addr = phi i32 [ %len , %ph ], [ %inc , %while.body ]
909
915
%inc = add i32 %len.addr , 1
910
916
%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
912
918
913
919
while.body:
914
920
%idxprom = zext i32 %inc to i64
@@ -917,10 +923,14 @@ while.body:
917
923
%arrayidx2 = getelementptr inbounds i8 , ptr %b , i64 %idxprom
918
924
%1 = load i8 , ptr %arrayidx2
919
925
%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
921
931
922
932
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 ]
924
934
ret i32 %inc.lcssa
925
935
}
926
936
0 commit comments