Skip to content

Commit 5ae4a17

Browse files
committed
[InstCombine] Add tests for freeze of recurrence with invoke start (NFC)
1 parent 3fd9aeb commit 5ae4a17

File tree

1 file changed

+76
-2
lines changed

1 file changed

+76
-2
lines changed

llvm/test/Transforms/InstCombine/freeze.ll

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -740,8 +740,8 @@ exit: ; preds = %loop
740740
ret void
741741
}
742742

743-
define void @fold_phi_neg_flags(i32 %init, i32 %n) {
744-
; CHECK-LABEL: @fold_phi_neg_flags(
743+
define void @fold_phi_drop_flags(i32 %init, i32 %n) {
744+
; CHECK-LABEL: @fold_phi_drop_flags(
745745
; CHECK-NEXT: entry:
746746
; CHECK-NEXT: br label [[LOOP:%.*]]
747747
; CHECK: loop:
@@ -917,6 +917,80 @@ exit:
917917
ret void
918918
}
919919

920+
define void @fold_phi_invoke_start_value(i32 %n) personality i8* undef {
921+
; CHECK-LABEL: @fold_phi_invoke_start_value(
922+
; CHECK-NEXT: entry:
923+
; CHECK-NEXT: [[INIT:%.*]] = invoke i32 @get_i32()
924+
; CHECK-NEXT: to label [[LOOP:%.*]] unwind label [[UNWIND:%.*]]
925+
; CHECK: loop:
926+
; CHECK-NEXT: [[I:%.*]] = phi i32 [ [[INIT]], [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
927+
; CHECK-NEXT: [[I_FR:%.*]] = freeze i32 [[I]]
928+
; CHECK-NEXT: [[I_NEXT]] = add nuw nsw i32 [[I_FR]], 1
929+
; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[I_NEXT]], [[N:%.*]]
930+
; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]
931+
; CHECK: unwind:
932+
; CHECK-NEXT: [[TMP0:%.*]] = landingpad i8
933+
; CHECK-NEXT: cleanup
934+
; CHECK-NEXT: unreachable
935+
; CHECK: exit:
936+
; CHECK-NEXT: ret void
937+
;
938+
entry:
939+
%init = invoke i32 @get_i32()
940+
to label %loop unwind label %unwind
941+
942+
loop:
943+
%i = phi i32 [ %init, %entry ], [ %i.next, %loop ]
944+
%i.fr = freeze i32 %i
945+
%i.next = add nsw nuw i32 %i.fr, 1
946+
%cond = icmp eq i32 %i.next, %n
947+
br i1 %cond, label %loop, label %exit
948+
949+
unwind:
950+
landingpad i8 cleanup
951+
unreachable
952+
953+
exit:
954+
ret void
955+
}
956+
957+
define void @fold_phi_invoke_noundef_start_value(i32 %n) personality i8* undef {
958+
; CHECK-LABEL: @fold_phi_invoke_noundef_start_value(
959+
; CHECK-NEXT: entry:
960+
; CHECK-NEXT: [[INIT:%.*]] = invoke noundef i32 @get_i32()
961+
; CHECK-NEXT: to label [[LOOP:%.*]] unwind label [[UNWIND:%.*]]
962+
; CHECK: loop:
963+
; CHECK-NEXT: [[I:%.*]] = phi i32 [ [[INIT]], [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
964+
; CHECK-NEXT: [[I_FR:%.*]] = freeze i32 [[I]]
965+
; CHECK-NEXT: [[I_NEXT]] = add nuw nsw i32 [[I_FR]], 1
966+
; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[I_NEXT]], [[N:%.*]]
967+
; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]
968+
; CHECK: unwind:
969+
; CHECK-NEXT: [[TMP0:%.*]] = landingpad i8
970+
; CHECK-NEXT: cleanup
971+
; CHECK-NEXT: unreachable
972+
; CHECK: exit:
973+
; CHECK-NEXT: ret void
974+
;
975+
entry:
976+
%init = invoke noundef i32 @get_i32()
977+
to label %loop unwind label %unwind
978+
979+
loop:
980+
%i = phi i32 [ %init, %entry ], [ %i.next, %loop ]
981+
%i.fr = freeze i32 %i
982+
%i.next = add nsw nuw i32 %i.fr, 1
983+
%cond = icmp eq i32 %i.next, %n
984+
br i1 %cond, label %loop, label %exit
985+
986+
unwind:
987+
landingpad i8 cleanup
988+
unreachable
989+
990+
exit:
991+
ret void
992+
}
993+
920994
define i8* @freeze_load_noundef(i8** %ptr) {
921995
; CHECK-LABEL: @freeze_load_noundef(
922996
; CHECK-NEXT: [[P:%.*]] = load i8*, i8** [[PTR:%.*]], align 8, !noundef !0

0 commit comments

Comments
 (0)