xref: /llvm-project/llvm/test/Transforms/FixIrreducible/basic.ll (revision fa4cc9ddd58eb9fef2497e678873ff3b495340a3)
18c11bc0cSSameer Sahasrabuddhe; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
25f6172f0SSameer Sahasrabuddhe; RUN: opt < %s -fix-irreducible --verify-loop-info -S | FileCheck %s
3*fa4cc9ddSSameer Sahasrabuddhe; RUN: opt < %s -passes='fix-irreducible,verify<loops>' -S | FileCheck %s
4*fa4cc9ddSSameer Sahasrabuddhe; RUN: opt < %s -passes='verify<loops>,fix-irreducible,verify<loops>' -S | FileCheck %s
58c11bc0cSSameer Sahasrabuddhe
68c11bc0cSSameer Sahasrabuddhedefine i32 @basic(i1 %PredEntry, i1 %PredLeft, i1 %PredRight, i32 %X, i32 %Y) {
78c11bc0cSSameer Sahasrabuddhe; CHECK-LABEL: @basic(
88c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:  entry:
9*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[PREDENTRY_INV:%.*]] = xor i1 [[PREDENTRY:%.*]], true
108c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]
118c11bc0cSSameer Sahasrabuddhe; CHECK:       left:
12*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[L_PHI:%.*]] = phi i32 [ [[R_PHI_MOVED:%.*]], [[RIGHT:%.*]] ], [ [[L_PHI_MOVED:%.*]], [[IRR_GUARD]] ]
13*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[L:%.*]] = add i32 [[L_PHI]], 1
148c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDLEFT:%.*]], label [[IRR_GUARD]], label [[EXIT:%.*]]
158c11bc0cSSameer Sahasrabuddhe; CHECK:       right:
16*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDRIGHT:%.*]], label [[LEFT:%.*]], label [[EXIT]]
178c11bc0cSSameer Sahasrabuddhe; CHECK:       exit:
18*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[Z:%.*]] = phi i32 [ [[L]], [[LEFT]] ], [ [[R_PHI_MOVED]], [[RIGHT]] ]
198c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    ret i32 [[Z]]
208c11bc0cSSameer Sahasrabuddhe; CHECK:       irr.guard:
21*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[L_PHI_MOVED]] = phi i32 [ [[L_PHI_MOVED]], [[LEFT]] ], [ [[X:%.*]], [[ENTRY:%.*]] ]
22*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[R_PHI_MOVED]] = phi i32 [ [[L]], [[LEFT]] ], [ [[Y:%.*]], [[ENTRY]] ]
23*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_RIGHT:%.*]] = phi i1 [ true, [[LEFT]] ], [ [[PREDENTRY_INV]], [[ENTRY]] ]
24*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_RIGHT]], label [[RIGHT]], label [[LEFT]]
258c11bc0cSSameer Sahasrabuddhe;
268c11bc0cSSameer Sahasrabuddheentry:
278c11bc0cSSameer Sahasrabuddhe  br i1 %PredEntry, label %left, label %right
288c11bc0cSSameer Sahasrabuddhe
298c11bc0cSSameer Sahasrabuddheleft:
308c11bc0cSSameer Sahasrabuddhe  %L.phi = phi i32 [%X, %entry], [%R.phi, %right]
318c11bc0cSSameer Sahasrabuddhe  %L = add i32 %L.phi, 1
328c11bc0cSSameer Sahasrabuddhe  br i1 %PredLeft, label %right, label %exit
338c11bc0cSSameer Sahasrabuddhe
348c11bc0cSSameer Sahasrabuddheright:
358c11bc0cSSameer Sahasrabuddhe  %R.phi = phi i32 [%Y, %entry], [%L, %left]
368c11bc0cSSameer Sahasrabuddhe  br i1 %PredRight, label %left, label %exit
378c11bc0cSSameer Sahasrabuddhe
388c11bc0cSSameer Sahasrabuddheexit:
398c11bc0cSSameer Sahasrabuddhe  %Z = phi i32 [%L, %left], [%R.phi, %right]
408c11bc0cSSameer Sahasrabuddhe  ret i32 %Z
418c11bc0cSSameer Sahasrabuddhe}
428c11bc0cSSameer Sahasrabuddhe
438c11bc0cSSameer Sahasrabuddhedefine i32 @feedback_loop(i1 %PredEntry, i1 %PredLeft, i1 %PredRight, i32 %X, i32 %Y) {
448c11bc0cSSameer Sahasrabuddhe; CHECK-LABEL: @feedback_loop(
458c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:  entry:
46*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[PREDENTRY_INV:%.*]] = xor i1 [[PREDENTRY:%.*]], true
478c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]
488c11bc0cSSameer Sahasrabuddhe; CHECK:       left:
49*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[L_PHI:%.*]] = phi i32 [ [[R_PHI_MOVED:%.*]], [[RIGHT:%.*]] ], [ [[L_PHI_MOVED:%.*]], [[IRR_GUARD]] ]
508c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDLEFT:%.*]], label [[IRR_GUARD]], label [[EXIT:%.*]]
518c11bc0cSSameer Sahasrabuddhe; CHECK:       right:
52*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDRIGHT:%.*]], label [[LEFT:%.*]], label [[EXIT]]
538c11bc0cSSameer Sahasrabuddhe; CHECK:       exit:
54*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[Z:%.*]] = phi i32 [ [[L_PHI]], [[LEFT]] ], [ [[R_PHI_MOVED]], [[RIGHT]] ]
558c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    ret i32 [[Z]]
568c11bc0cSSameer Sahasrabuddhe; CHECK:       irr.guard:
57*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[L_PHI_MOVED]] = phi i32 [ [[L_PHI_MOVED]], [[LEFT]] ], [ [[X:%.*]], [[ENTRY:%.*]] ]
58*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[R_PHI_MOVED]] = phi i32 [ [[L_PHI]], [[LEFT]] ], [ [[Y:%.*]], [[ENTRY]] ]
59*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_RIGHT:%.*]] = phi i1 [ true, [[LEFT]] ], [ [[PREDENTRY_INV]], [[ENTRY]] ]
60*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_RIGHT]], label [[RIGHT]], label [[LEFT]]
618c11bc0cSSameer Sahasrabuddhe;
628c11bc0cSSameer Sahasrabuddheentry:
638c11bc0cSSameer Sahasrabuddhe  br i1 %PredEntry, label %left, label %right
648c11bc0cSSameer Sahasrabuddhe
658c11bc0cSSameer Sahasrabuddheleft:
668c11bc0cSSameer Sahasrabuddhe  %L.phi = phi i32 [%X, %entry], [%R.phi, %right]
678c11bc0cSSameer Sahasrabuddhe  br i1 %PredLeft, label %right, label %exit
688c11bc0cSSameer Sahasrabuddhe
698c11bc0cSSameer Sahasrabuddheright:
708c11bc0cSSameer Sahasrabuddhe  %R.phi = phi i32 [%Y, %entry], [%L.phi, %left]
718c11bc0cSSameer Sahasrabuddhe  br i1 %PredRight, label %left, label %exit
728c11bc0cSSameer Sahasrabuddhe
738c11bc0cSSameer Sahasrabuddheexit:
748c11bc0cSSameer Sahasrabuddhe  %Z = phi i32 [%L.phi, %left], [%R.phi, %right]
758c11bc0cSSameer Sahasrabuddhe  ret i32 %Z
768c11bc0cSSameer Sahasrabuddhe}
778c11bc0cSSameer Sahasrabuddhe
788c11bc0cSSameer Sahasrabuddhedefine i32 @multiple_predecessors(i1 %PredEntry, i1 %PredA, i1 %PredB, i1 %PredC, i1 %PredD, i32 %X, i32 %Y) {
798c11bc0cSSameer Sahasrabuddhe; CHECK-LABEL: @multiple_predecessors(
808c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:  entry:
818c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    [[PREDB_INV:%.*]] = xor i1 [[PREDB:%.*]], true
828c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDENTRY:%.*]], label [[A:%.*]], label [[B:%.*]]
838c11bc0cSSameer Sahasrabuddhe; CHECK:       A:
848c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    [[A_INC:%.*]] = add i32 [[X:%.*]], 1
858c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]
868c11bc0cSSameer Sahasrabuddhe; CHECK:       B:
878c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD]]
888c11bc0cSSameer Sahasrabuddhe; CHECK:       C:
89*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDC:%.*]], label [[D:%.*]], label [[EXIT:%.*]]
908c11bc0cSSameer Sahasrabuddhe; CHECK:       D:
91*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[D_PHI:%.*]] = phi i32 [ [[C_PHI_MOVED:%.*]], [[C:%.*]] ], [ [[D_PHI_MOVED:%.*]], [[IRR_GUARD]] ]
92*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[D_INC:%.*]] = add i32 [[D_PHI]], 1
938c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDD:%.*]], label [[EXIT]], label [[IRR_GUARD]]
948c11bc0cSSameer Sahasrabuddhe; CHECK:       exit:
95*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[RET:%.*]] = phi i32 [ [[C_PHI_MOVED]], [[C]] ], [ [[D_INC]], [[D]] ]
968c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    ret i32 [[RET]]
978c11bc0cSSameer Sahasrabuddhe; CHECK:       irr.guard:
98*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[D_PHI_MOVED]] = phi i32 [ [[D_PHI_MOVED]], [[D]] ], [ [[Y:%.*]], [[B]] ], [ [[A_INC]], [[A]] ]
99*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[C_PHI_MOVED]] = phi i32 [ [[D_INC]], [[D]] ], [ [[Y]], [[B]] ], [ [[X]], [[A]] ]
100*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_C:%.*]] = phi i1 [ true, [[D]] ], [ [[PREDB_INV]], [[B]] ], [ [[PREDA:%.*]], [[A]] ]
1018c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_C]], label [[C]], label [[D]]
1028c11bc0cSSameer Sahasrabuddhe;
1038c11bc0cSSameer Sahasrabuddheentry:
1048c11bc0cSSameer Sahasrabuddhe  br i1 %PredEntry, label %A, label %B
1058c11bc0cSSameer Sahasrabuddhe
1068c11bc0cSSameer SahasrabuddheA:
1078c11bc0cSSameer Sahasrabuddhe  %A.inc = add i32 %X, 1
1088c11bc0cSSameer Sahasrabuddhe  br i1 %PredA, label %C, label %D
1098c11bc0cSSameer Sahasrabuddhe
1108c11bc0cSSameer SahasrabuddheB:
1118c11bc0cSSameer Sahasrabuddhe  br i1 %PredB, label %D, label %C
1128c11bc0cSSameer Sahasrabuddhe
1138c11bc0cSSameer SahasrabuddheC:
1148c11bc0cSSameer Sahasrabuddhe  %C.phi = phi i32 [%X, %A], [%Y, %B], [%D.inc, %D]
1158c11bc0cSSameer Sahasrabuddhe  br i1 %PredC, label %D, label %exit
1168c11bc0cSSameer Sahasrabuddhe
1178c11bc0cSSameer SahasrabuddheD:
1188c11bc0cSSameer Sahasrabuddhe  %D.phi = phi i32 [%A.inc, %A], [%Y, %B], [%C.phi, %C]
1198c11bc0cSSameer Sahasrabuddhe  %D.inc = add i32 %D.phi, 1
1208c11bc0cSSameer Sahasrabuddhe  br i1 %PredD, label %exit, label %C
1218c11bc0cSSameer Sahasrabuddhe
1228c11bc0cSSameer Sahasrabuddheexit:
1238c11bc0cSSameer Sahasrabuddhe  %ret = phi i32 [%C.phi, %C], [%D.inc, %D]
1248c11bc0cSSameer Sahasrabuddhe  ret i32 %ret
1258c11bc0cSSameer Sahasrabuddhe}
1268c11bc0cSSameer Sahasrabuddhe
1278c11bc0cSSameer Sahasrabuddhedefine i32 @separate_predecessors(i1 %PredEntry, i1 %PredA, i1 %PredB, i1 %PredC, i1 %PredD, i32 %X, i32 %Y) {
1288c11bc0cSSameer Sahasrabuddhe; CHECK-LABEL: @separate_predecessors(
1298c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:  entry:
1308c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDENTRY:%.*]], label [[A:%.*]], label [[B:%.*]]
1318c11bc0cSSameer Sahasrabuddhe; CHECK:       A:
1328c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    [[A_INC:%.*]] = add i32 [[X:%.*]], 1
1338c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]
1348c11bc0cSSameer Sahasrabuddhe; CHECK:       B:
1358c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD]]
1368c11bc0cSSameer Sahasrabuddhe; CHECK:       C:
137*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[C_PHI:%.*]] = phi i32 [ [[D_INC:%.*]], [[D:%.*]] ], [ [[C_PHI_MOVED:%.*]], [[IRR_GUARD]] ]
1388c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDC:%.*]], label [[EXIT:%.*]], label [[IRR_GUARD]]
1398c11bc0cSSameer Sahasrabuddhe; CHECK:       D:
140*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[D_INC]] = add i32 [[D_PHI_MOVED:%.*]], 1
141*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDD:%.*]], label [[EXIT]], label [[C:%.*]]
1428c11bc0cSSameer Sahasrabuddhe; CHECK:       exit:
143*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[RET:%.*]] = phi i32 [ [[C_PHI]], [[C]] ], [ [[D_INC]], [[D]] ]
1448c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    ret i32 [[RET]]
1458c11bc0cSSameer Sahasrabuddhe; CHECK:       irr.guard:
146*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[C_PHI_MOVED]] = phi i32 [ [[C_PHI_MOVED]], [[C]] ], [ poison, [[B]] ], [ [[X]], [[A]] ]
147*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[D_PHI_MOVED]] = phi i32 [ [[C_PHI]], [[C]] ], [ [[Y:%.*]], [[B]] ], [ poison, [[A]] ]
148*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_D:%.*]] = phi i1 [ true, [[C]] ], [ true, [[B]] ], [ false, [[A]] ]
149*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_D]], label [[D]], label [[C]]
1508c11bc0cSSameer Sahasrabuddhe;
1518c11bc0cSSameer Sahasrabuddheentry:
1528c11bc0cSSameer Sahasrabuddhe  br i1 %PredEntry, label %A, label %B
1538c11bc0cSSameer Sahasrabuddhe
1548c11bc0cSSameer SahasrabuddheA:
1558c11bc0cSSameer Sahasrabuddhe  %A.inc = add i32 %X, 1
1568c11bc0cSSameer Sahasrabuddhe  br label %C
1578c11bc0cSSameer Sahasrabuddhe
1588c11bc0cSSameer SahasrabuddheB:
1598c11bc0cSSameer Sahasrabuddhe  br label %D
1608c11bc0cSSameer Sahasrabuddhe
1618c11bc0cSSameer SahasrabuddheC:
1628c11bc0cSSameer Sahasrabuddhe  %C.phi = phi i32 [%X, %A], [%D.inc, %D]
1638c11bc0cSSameer Sahasrabuddhe  br i1 %PredC, label %exit, label %D
1648c11bc0cSSameer Sahasrabuddhe
1658c11bc0cSSameer SahasrabuddheD:
1668c11bc0cSSameer Sahasrabuddhe  %D.phi = phi i32 [%Y, %B], [%C.phi, %C]
1678c11bc0cSSameer Sahasrabuddhe  %D.inc = add i32 %D.phi, 1
1688c11bc0cSSameer Sahasrabuddhe  br i1 %PredD, label %exit, label %C
1698c11bc0cSSameer Sahasrabuddhe
1708c11bc0cSSameer Sahasrabuddheexit:
1718c11bc0cSSameer Sahasrabuddhe  %ret = phi i32 [%C.phi, %C], [%D.inc, %D]
1728c11bc0cSSameer Sahasrabuddhe  ret i32 %ret
1738c11bc0cSSameer Sahasrabuddhe}
1748c11bc0cSSameer Sahasrabuddhe
1758c11bc0cSSameer Sahasrabuddhedefine void @four_headers(i1 %PredEntry, i1 %PredX, i1  %PredY, i1 %PredD) {
1768c11bc0cSSameer Sahasrabuddhe; CHECK-LABEL: @four_headers(
1778c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:  entry:
178*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[PREDY_INV:%.*]] = xor i1 [[PREDY:%.*]], true
1798c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDENTRY:%.*]], label [[X:%.*]], label [[Y:%.*]]
1808c11bc0cSSameer Sahasrabuddhe; CHECK:       X:
1818c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]
1828c11bc0cSSameer Sahasrabuddhe; CHECK:       Y:
1838c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD]]
1848c11bc0cSSameer Sahasrabuddhe; CHECK:       A:
185*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[B:%.*]]
1868c11bc0cSSameer Sahasrabuddhe; CHECK:       B:
187*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[C:%.*]]
1888c11bc0cSSameer Sahasrabuddhe; CHECK:       C:
1898c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD]]
1908c11bc0cSSameer Sahasrabuddhe; CHECK:       D:
191*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDD:%.*]], label [[EXIT:%.*]], label [[A:%.*]]
1928c11bc0cSSameer Sahasrabuddhe; CHECK:       exit:
1938c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    ret void
1948c11bc0cSSameer Sahasrabuddhe; CHECK:       irr.guard:
195*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_D:%.*]] = phi i1 [ true, [[C]] ], [ [[PREDY_INV]], [[Y]] ], [ false, [[X]] ]
196*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_C:%.*]] = phi i1 [ false, [[C]] ], [ true, [[Y]] ], [ false, [[X]] ]
197*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_A:%.*]] = phi i1 [ false, [[C]] ], [ false, [[Y]] ], [ [[PREDX:%.*]], [[X]] ]
198*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_D]], label [[D:%.*]], label [[IRR_GUARD1:%.*]]
1998c11bc0cSSameer Sahasrabuddhe; CHECK:       irr.guard1:
200*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_C]], label [[C]], label [[IRR_GUARD2:%.*]]
2018c11bc0cSSameer Sahasrabuddhe; CHECK:       irr.guard2:
202*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_A]], label [[A]], label [[B]]
2038c11bc0cSSameer Sahasrabuddhe;
2048c11bc0cSSameer Sahasrabuddheentry:
2058c11bc0cSSameer Sahasrabuddhe  br i1 %PredEntry, label %X, label %Y
2068c11bc0cSSameer Sahasrabuddhe
2078c11bc0cSSameer SahasrabuddheX:
2088c11bc0cSSameer Sahasrabuddhe  br i1 %PredX, label %A, label %B
2098c11bc0cSSameer Sahasrabuddhe
2108c11bc0cSSameer SahasrabuddheY:
2118c11bc0cSSameer Sahasrabuddhe  br i1 %PredY, label %C, label %D
2128c11bc0cSSameer Sahasrabuddhe
2138c11bc0cSSameer SahasrabuddheA:
2148c11bc0cSSameer Sahasrabuddhe  br label %B
2158c11bc0cSSameer Sahasrabuddhe
2168c11bc0cSSameer SahasrabuddheB:
2178c11bc0cSSameer Sahasrabuddhe  br label %C
2188c11bc0cSSameer Sahasrabuddhe
2198c11bc0cSSameer SahasrabuddheC:
2208c11bc0cSSameer Sahasrabuddhe  br label %D
2218c11bc0cSSameer Sahasrabuddhe
2228c11bc0cSSameer SahasrabuddheD:
2238c11bc0cSSameer Sahasrabuddhe  br i1 %PredD, label %exit, label %A
2248c11bc0cSSameer Sahasrabuddhe
2258c11bc0cSSameer Sahasrabuddheexit:
2268c11bc0cSSameer Sahasrabuddhe  ret void
2278c11bc0cSSameer Sahasrabuddhe}
2288c11bc0cSSameer Sahasrabuddhe
2298c11bc0cSSameer Sahasrabuddhedefine i32 @hidden_nodes(i1 %PredEntry, i1 %PredA, i1 %PredB, i1 %PredC, i1 %PredD, i32 %X, i32 %Y) {
2308c11bc0cSSameer Sahasrabuddhe; CHECK-LABEL: @hidden_nodes(
2318c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:  entry:
232*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[PREDENTRY_INV:%.*]] = xor i1 [[PREDENTRY:%.*]], true
2338c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]
2348c11bc0cSSameer Sahasrabuddhe; CHECK:       A:
235*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[A_PHI:%.*]] = phi i32 [ [[C_INC:%.*]], [[E:%.*]] ], [ [[A_PHI_MOVED:%.*]], [[IRR_GUARD]] ]
236*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[A_INC:%.*]] = add i32 [[A_PHI]], 1
2378c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[IRR_GUARD]]
2388c11bc0cSSameer Sahasrabuddhe; CHECK:       B:
2398c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[C:%.*]]
2408c11bc0cSSameer Sahasrabuddhe; CHECK:       C:
241*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[C_INC]] = add i32 [[B_PHI_MOVED:%.*]], 1
2428c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[D:%.*]]
2438c11bc0cSSameer Sahasrabuddhe; CHECK:       D:
244*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[PREDD:%.*]], label [[EXIT:%.*]], label [[E]]
2458c11bc0cSSameer Sahasrabuddhe; CHECK:       E:
246*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br label [[A:%.*]]
2478c11bc0cSSameer Sahasrabuddhe; CHECK:       exit:
2488c11bc0cSSameer Sahasrabuddhe; CHECK-NEXT:    ret i32 [[B_PHI_MOVED]]
2498c11bc0cSSameer Sahasrabuddhe; CHECK:       irr.guard:
250*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[A_PHI_MOVED]] = phi i32 [ [[A_PHI_MOVED]], [[A]] ], [ [[X:%.*]], [[ENTRY:%.*]] ]
251*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[B_PHI_MOVED]] = phi i32 [ [[A_INC]], [[A]] ], [ [[Y:%.*]], [[ENTRY]] ]
252*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    [[GUARD_B:%.*]] = phi i1 [ true, [[A]] ], [ [[PREDENTRY_INV]], [[ENTRY]] ]
253*fa4cc9ddSSameer Sahasrabuddhe; CHECK-NEXT:    br i1 [[GUARD_B]], label [[B:%.*]], label [[A]]
2548c11bc0cSSameer Sahasrabuddhe;
2558c11bc0cSSameer Sahasrabuddheentry:
2568c11bc0cSSameer Sahasrabuddhe  br i1 %PredEntry, label %A, label %B
2578c11bc0cSSameer Sahasrabuddhe
2588c11bc0cSSameer SahasrabuddheA:
2598c11bc0cSSameer Sahasrabuddhe  %A.phi = phi i32 [%X, %entry], [%C.inc, %E]
2608c11bc0cSSameer Sahasrabuddhe  %A.inc = add i32 %A.phi, 1
2618c11bc0cSSameer Sahasrabuddhe  br label %B
2628c11bc0cSSameer Sahasrabuddhe
2638c11bc0cSSameer SahasrabuddheB:
2648c11bc0cSSameer Sahasrabuddhe  %B.phi = phi i32 [%A.inc, %A], [%Y, %entry]
2658c11bc0cSSameer Sahasrabuddhe  br label %C
2668c11bc0cSSameer Sahasrabuddhe
2678c11bc0cSSameer SahasrabuddheC:
2688c11bc0cSSameer Sahasrabuddhe  %C.inc = add i32 %B.phi, 1
2698c11bc0cSSameer Sahasrabuddhe  br label %D
2708c11bc0cSSameer Sahasrabuddhe
2718c11bc0cSSameer SahasrabuddheD:
2728c11bc0cSSameer Sahasrabuddhe  br i1 %PredD, label %exit, label %E
2738c11bc0cSSameer Sahasrabuddhe
2748c11bc0cSSameer SahasrabuddheE:
2758c11bc0cSSameer Sahasrabuddhe  br label %A
2768c11bc0cSSameer Sahasrabuddhe
2778c11bc0cSSameer Sahasrabuddheexit:
2788c11bc0cSSameer Sahasrabuddhe  ret i32 %B.phi
2798c11bc0cSSameer Sahasrabuddhe}
280