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