11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22; RUN: opt -passes=newgvn -S %s | FileCheck %s
33
4- define void @d (i1 %arg ) {
4+ define void @d (i1 %arg , i1 %arg2 ) {
55; CHECK-LABEL: @d(
66; CHECK-NEXT: entry:
77; CHECK-NEXT: br label [[FOR_COND:%.*]]
88; CHECK: for.cond:
99; CHECK-NEXT: br label [[FOR_COND1:%.*]]
1010; CHECK: for.cond1:
11- ; CHECK-NEXT: br i1 true, label [[FOR_BODY:%.*]], label [[FOR_END19:%.*]]
11+ ; CHECK-NEXT: [[TMP0:%.*]] = phi i32 [ [[INC18:%.*]], [[FOR_INC17:%.*]] ], [ 0, [[FOR_COND]] ]
12+ ; CHECK-NEXT: [[ARG:%.*]] = icmp sle i32 [[TMP0]], 1
13+ ; CHECK-NEXT: br i1 [[ARG]], label [[FOR_BODY3:%.*]], label [[FOR_BODY_FOR_COND4_CRIT_EDGE:%.*]]
1214; CHECK: for.body:
13- ; CHECK-NEXT: br i1 [[ARG :%.*]], label [[FOR_BODY3 :%.*]], label [[FOR_BODY_FOR_COND4_CRIT_EDGE :%.*]]
15+ ; CHECK-NEXT: br i1 [[ARG1 :%.*]], label [[FOR_BODY4 :%.*]], label [[FOR_BODY_FOR_COND4_CRIT_EDGE1 :%.*]]
1416; CHECK: for.body.for.cond4_crit_edge:
1517; CHECK-NEXT: br label [[FOR_COND4:%.*]]
1618; CHECK: for.body3:
1719; CHECK-NEXT: br label [[CLEANUP14:%.*]]
1820; CHECK: for.cond4:
19- ; CHECK-NEXT: br i1 false , label [[IF_THEN:%.*]], label [[IF_END:%.*]]
21+ ; CHECK-NEXT: br i1 [[ARG2:%.*]] , label [[IF_THEN:%.*]], label [[IF_END:%.*]]
2022; CHECK: if.then:
21- ; CHECK-NEXT: store i8 poison, ptr null, align 1
2223; CHECK-NEXT: br label [[CLEANUP:%.*]]
2324; CHECK: if.end:
2425; CHECK-NEXT: br label [[FOR_COND6:%.*]]
@@ -37,23 +38,26 @@ define void @d(i1 %arg) {
3738; CHECK-NEXT: store i8 poison, ptr null, align 1
3839; CHECK-NEXT: br label [[CLEANUP]]
3940; CHECK: cleanup:
40- ; CHECK-NEXT: switch i32 1, label [[CLEANUP14]] [
41+ ; CHECK-NEXT: [[CLEANUP_DEST:%.*]] = phi i32 [ poison, [[IF_END12]] ], [ 1, [[IF_THEN11]] ], [ 9, [[IF_THEN]] ]
42+ ; CHECK-NEXT: switch i32 [[CLEANUP_DEST]], label [[CLEANUP14]] [
4143; CHECK-NEXT: i32 0, label [[FOR_COND4]]
4244; CHECK-NEXT: i32 9, label [[FOR_END13:%.*]]
4345; CHECK-NEXT: ]
4446; CHECK: for.end13:
45- ; CHECK-NEXT: store i8 poison, ptr null, align 1
4647; CHECK-NEXT: br label [[CLEANUP14]]
4748; CHECK: cleanup14:
48- ; CHECK-NEXT: br i1 false, label [[FOR_INC17:%.*]], label [[CLEANUP20:%.*]]
49+ ; CHECK-NEXT: [[CLEANUP_DEST15:%.*]] = phi i32 [ 0, [[FOR_END13]] ], [ [[CLEANUP_DEST]], [[CLEANUP]] ], [ 1, [[FOR_BODY4]] ]
50+ ; CHECK-NEXT: [[COND1:%.*]] = icmp eq i32 [[CLEANUP_DEST15]], 0
51+ ; CHECK-NEXT: br i1 [[COND1]], label [[FOR_INC17]], label [[CLEANUP20:%.*]]
4952; CHECK: for.inc17:
50- ; CHECK-NEXT: store i8 poison, ptr null, align 1
53+ ; CHECK-NEXT: [[INC18]] = add nsw i32 [[TMP0]], 1
5154; CHECK-NEXT: br label [[FOR_COND1]]
5255; CHECK: for.end19:
53- ; CHECK-NEXT: store i8 poison, ptr null, align 1
5456; CHECK-NEXT: br label [[CLEANUP20]]
5557; CHECK: cleanup20:
56- ; CHECK-NEXT: br i1 false, label [[FOR_COND]], label [[CLEANUP23:%.*]]
58+ ; CHECK-NEXT: [[PHIOFOPS:%.*]] = phi i1 [ true, [[FOR_BODY_FOR_COND4_CRIT_EDGE]] ], [ [[COND1]], [[CLEANUP14]] ]
59+ ; CHECK-NEXT: [[CLEANUP_DEST21:%.*]] = phi i32 [ [[CLEANUP_DEST15]], [[CLEANUP14]] ], [ 0, [[FOR_BODY_FOR_COND4_CRIT_EDGE]] ]
60+ ; CHECK-NEXT: br i1 [[PHIOFOPS]], label [[FOR_COND]], label [[CLEANUP23:%.*]]
5761; CHECK: cleanup23:
5862; CHECK-NEXT: ret void
5963;
@@ -78,7 +82,7 @@ for.body3: ; preds = %for.body
7882 br label %cleanup14
7983
8084for.cond4: ; preds = %cleanup, %for.body.for.cond4_crit_edge
81- br i1 %arg , label %if.then , label %if.end
85+ br i1 %arg2 , label %if.then , label %if.end
8286
8387if.then: ; preds = %for.cond4
8488 br label %cleanup
0 commit comments