1e6da78a3SSameer Sahasrabuddhe; RUN: opt < %s -disable-output -passes='verify<cycles>,print<cycles>' 2>&1 | FileCheck %s -check-prefix=CHECK 21d0244aeSSameer Sahasrabuddhe 31d0244aeSSameer Sahasrabuddhedefine void @empty() { 41d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: empty 51d0244aeSSameer Sahasrabuddhe; CHECK-NOT: depth 61d0244aeSSameer Sahasrabuddhe 71d0244aeSSameer Sahasrabuddhe ret void 81d0244aeSSameer Sahasrabuddhe} 91d0244aeSSameer Sahasrabuddhe 10*1469d82eSLee Weidefine void @simple(i1 %arg) { 111d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: simple 121d0244aeSSameer Sahasrabuddhe; CHECK: depth=1: entries(loop) 131d0244aeSSameer Sahasrabuddheentry: 141d0244aeSSameer Sahasrabuddhe br label %loop 151d0244aeSSameer Sahasrabuddhe 161d0244aeSSameer Sahasrabuddheloop: 17*1469d82eSLee Wei br i1 %arg, label %loop, label %exit 181d0244aeSSameer Sahasrabuddhe 191d0244aeSSameer Sahasrabuddheexit: 201d0244aeSSameer Sahasrabuddhe ret void 211d0244aeSSameer Sahasrabuddhe} 221d0244aeSSameer Sahasrabuddhe 23*1469d82eSLee Weidefine void @two_latches(i1 %arg) { 241d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: two_latches 251d0244aeSSameer Sahasrabuddhe; CHECK: depth=1: entries(loop) loop_next 261d0244aeSSameer Sahasrabuddheentry: 271d0244aeSSameer Sahasrabuddhe br label %loop 281d0244aeSSameer Sahasrabuddhe 291d0244aeSSameer Sahasrabuddheloop: 30*1469d82eSLee Wei br i1 %arg, label %loop, label %loop_next 311d0244aeSSameer Sahasrabuddhe 321d0244aeSSameer Sahasrabuddheloop_next: 33*1469d82eSLee Wei br i1 %arg, label %exit, label %loop 341d0244aeSSameer Sahasrabuddhe 351d0244aeSSameer Sahasrabuddheexit: 361d0244aeSSameer Sahasrabuddhe ret void 371d0244aeSSameer Sahasrabuddhe} 381d0244aeSSameer Sahasrabuddhe 39*1469d82eSLee Weidefine void @nested_simple(i1 %arg) { 401d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: nested_simple 411d0244aeSSameer Sahasrabuddhe; CHECK: depth=1: entries(outer_header) outer_latch inner 421d0244aeSSameer Sahasrabuddhe; CHECK: depth=2: entries(inner) 431d0244aeSSameer Sahasrabuddheentry: 441d0244aeSSameer Sahasrabuddhe br label %outer_header 451d0244aeSSameer Sahasrabuddhe 461d0244aeSSameer Sahasrabuddheouter_header: 471d0244aeSSameer Sahasrabuddhe br label %inner 481d0244aeSSameer Sahasrabuddhe 491d0244aeSSameer Sahasrabuddheinner: 50*1469d82eSLee Wei br i1 %arg, label %inner, label %outer_latch 511d0244aeSSameer Sahasrabuddhe 521d0244aeSSameer Sahasrabuddheouter_latch: 53*1469d82eSLee Wei br i1 %arg, label %outer_header, label %exit 541d0244aeSSameer Sahasrabuddhe 551d0244aeSSameer Sahasrabuddheexit: 561d0244aeSSameer Sahasrabuddhe ret void 571d0244aeSSameer Sahasrabuddhe} 581d0244aeSSameer Sahasrabuddhe 59*1469d82eSLee Weidefine void @nested_outer_latch_in_inner_loop(i1 %arg) { 601d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: nested_outer_latch_in_inner_loop 611d0244aeSSameer Sahasrabuddhe; CHECK: depth=1: entries(outer_header) inner_header inner_latch 621d0244aeSSameer Sahasrabuddhe; CHECK: depth=2: entries(inner_header) inner_latch 631d0244aeSSameer Sahasrabuddheentry: 641d0244aeSSameer Sahasrabuddhe br label %outer_header 651d0244aeSSameer Sahasrabuddhe 661d0244aeSSameer Sahasrabuddheouter_header: 671d0244aeSSameer Sahasrabuddhe br label %inner_header 681d0244aeSSameer Sahasrabuddhe 691d0244aeSSameer Sahasrabuddheinner_header: 70*1469d82eSLee Wei br i1 %arg, label %inner_latch, label %outer_header 711d0244aeSSameer Sahasrabuddhe 721d0244aeSSameer Sahasrabuddheinner_latch: 73*1469d82eSLee Wei br i1 %arg, label %exit, label %inner_header 741d0244aeSSameer Sahasrabuddhe 751d0244aeSSameer Sahasrabuddheexit: 761d0244aeSSameer Sahasrabuddhe ret void 771d0244aeSSameer Sahasrabuddhe} 781d0244aeSSameer Sahasrabuddhe 79*1469d82eSLee Weidefine void @sibling_loops(i1 %arg) { 801d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: sibling_loops 811d0244aeSSameer Sahasrabuddhe; CHECK-DAG: depth=1: entries(left) 821d0244aeSSameer Sahasrabuddhe; CHECK-DAG: depth=1: entries(right) 831d0244aeSSameer Sahasrabuddheentry: 84*1469d82eSLee Wei br i1 %arg, label %left, label %right 851d0244aeSSameer Sahasrabuddhe 861d0244aeSSameer Sahasrabuddheleft: 87*1469d82eSLee Wei br i1 %arg, label %left, label %exit 881d0244aeSSameer Sahasrabuddhe 891d0244aeSSameer Sahasrabuddheright: 90*1469d82eSLee Wei br i1 %arg, label %right, label %exit 911d0244aeSSameer Sahasrabuddhe 921d0244aeSSameer Sahasrabuddheexit: 931d0244aeSSameer Sahasrabuddhe ret void 941d0244aeSSameer Sahasrabuddhe} 951d0244aeSSameer Sahasrabuddhe 96*1469d82eSLee Weidefine void @serial_loops(i1 %arg) { 971d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: serial_loops 981d0244aeSSameer Sahasrabuddhe; CHECK-DAG: depth=1: entries(second) 991d0244aeSSameer Sahasrabuddhe; CHECK-DAG: depth=1: entries(first) 1001d0244aeSSameer Sahasrabuddheentry: 1011d0244aeSSameer Sahasrabuddhe br label %first 1021d0244aeSSameer Sahasrabuddhe 1031d0244aeSSameer Sahasrabuddhefirst: 104*1469d82eSLee Wei br i1 %arg, label %first, label %second 1051d0244aeSSameer Sahasrabuddhe 1061d0244aeSSameer Sahasrabuddhesecond: 107*1469d82eSLee Wei br i1 %arg, label %second, label %exit 1081d0244aeSSameer Sahasrabuddhe 1091d0244aeSSameer Sahasrabuddheexit: 1101d0244aeSSameer Sahasrabuddhe ret void 1111d0244aeSSameer Sahasrabuddhe} 1121d0244aeSSameer Sahasrabuddhe 113*1469d82eSLee Weidefine void @nested_sibling_loops(i1 %arg) { 1141d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: nested_sibling_loops 1151d0244aeSSameer Sahasrabuddhe; CHECK: depth=1: entries(outer_header) left right 1161d0244aeSSameer Sahasrabuddhe; CHECK-DAG: depth=2: entries(right) 1171d0244aeSSameer Sahasrabuddhe; CHECK-DAG: depth=2: entries(left) 1181d0244aeSSameer Sahasrabuddheentry: 1191d0244aeSSameer Sahasrabuddhe br label %outer_header 1201d0244aeSSameer Sahasrabuddhe 1211d0244aeSSameer Sahasrabuddheouter_header: 122*1469d82eSLee Wei br i1 %arg, label %left, label %right 1231d0244aeSSameer Sahasrabuddhe 1241d0244aeSSameer Sahasrabuddheleft: 1251d0244aeSSameer Sahasrabuddhe switch i32 undef, label %exit [ i32 0, label %left 1261d0244aeSSameer Sahasrabuddhe i32 1, label %outer_header ] 1271d0244aeSSameer Sahasrabuddhe 1281d0244aeSSameer Sahasrabuddheright: 1291d0244aeSSameer Sahasrabuddhe switch i32 undef, label %outer_header [ i32 0, label %exit 1301d0244aeSSameer Sahasrabuddhe i32 1, label %right ] 1311d0244aeSSameer Sahasrabuddhe 1321d0244aeSSameer Sahasrabuddheexit: 1331d0244aeSSameer Sahasrabuddhe ret void 1341d0244aeSSameer Sahasrabuddhe} 1351d0244aeSSameer Sahasrabuddhe 136*1469d82eSLee Weidefine void @deeper_nest(i1 %arg) { 1371d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: deeper_nest 1381d0244aeSSameer Sahasrabuddhe; CHECK: depth=1: entries(outer_header) outer_latch middle_header inner_header inner_latch 1391d0244aeSSameer Sahasrabuddhe; CHECK: depth=2: entries(middle_header) inner_header inner_latch 1401d0244aeSSameer Sahasrabuddhe; CHECK: depth=3: entries(inner_header) inner_latch 1411d0244aeSSameer Sahasrabuddheentry: 1421d0244aeSSameer Sahasrabuddhe br label %outer_header 1431d0244aeSSameer Sahasrabuddhe 1441d0244aeSSameer Sahasrabuddheouter_header: 1451d0244aeSSameer Sahasrabuddhe br label %middle_header 1461d0244aeSSameer Sahasrabuddhe 1471d0244aeSSameer Sahasrabuddhemiddle_header: 1481d0244aeSSameer Sahasrabuddhe br label %inner_header 1491d0244aeSSameer Sahasrabuddhe 1501d0244aeSSameer Sahasrabuddheinner_header: 151*1469d82eSLee Wei br i1 %arg, label %middle_header, label %inner_latch 1521d0244aeSSameer Sahasrabuddhe 1531d0244aeSSameer Sahasrabuddheinner_latch: 154*1469d82eSLee Wei br i1 %arg, label %inner_header, label %outer_latch 1551d0244aeSSameer Sahasrabuddhe 1561d0244aeSSameer Sahasrabuddheouter_latch: 157*1469d82eSLee Wei br i1 %arg, label %outer_header, label %exit 1581d0244aeSSameer Sahasrabuddhe 1591d0244aeSSameer Sahasrabuddheexit: 1601d0244aeSSameer Sahasrabuddhe ret void 1611d0244aeSSameer Sahasrabuddhe} 1621d0244aeSSameer Sahasrabuddhe 163*1469d82eSLee Weidefine void @irreducible_basic(i1 %arg) { 1641d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: irreducible_basic 1651d0244aeSSameer Sahasrabuddhe; CHECK: depth=1: entries(right left) 1661d0244aeSSameer Sahasrabuddheentry: 167*1469d82eSLee Wei br i1 %arg, label %left, label %right 1681d0244aeSSameer Sahasrabuddhe 1691d0244aeSSameer Sahasrabuddheleft: 170*1469d82eSLee Wei br i1 %arg, label %right, label %exit 1711d0244aeSSameer Sahasrabuddhe 1721d0244aeSSameer Sahasrabuddheright: 173*1469d82eSLee Wei br i1 %arg, label %left, label %exit 1741d0244aeSSameer Sahasrabuddhe 1751d0244aeSSameer Sahasrabuddheexit: 1761d0244aeSSameer Sahasrabuddhe ret void 1771d0244aeSSameer Sahasrabuddhe} 1781d0244aeSSameer Sahasrabuddhe 179*1469d82eSLee Weidefine void @irreducible_mess(i1 %arg) { 1801d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: irreducible_mess 1811d0244aeSSameer Sahasrabuddhe; CHECK: depth=1: entries(B A) D C 1821d0244aeSSameer Sahasrabuddhe; CHECK: depth=2: entries(D C A) 1831d0244aeSSameer Sahasrabuddhe; CHECK: depth=3: entries(C A) 1841d0244aeSSameer Sahasrabuddheentry: 185*1469d82eSLee Wei br i1 %arg, label %A, label %B 1861d0244aeSSameer Sahasrabuddhe 1871d0244aeSSameer SahasrabuddheA: 188*1469d82eSLee Wei br i1 %arg, label %C, label %D 1891d0244aeSSameer Sahasrabuddhe 1901d0244aeSSameer SahasrabuddheB: 191*1469d82eSLee Wei br i1 %arg, label %C, label %D 1921d0244aeSSameer Sahasrabuddhe 1931d0244aeSSameer SahasrabuddheC: 1941d0244aeSSameer Sahasrabuddhe switch i32 undef, label %A [ i32 0, label %D 1951d0244aeSSameer Sahasrabuddhe i32 1, label %exit ] 1961d0244aeSSameer Sahasrabuddhe 1971d0244aeSSameer SahasrabuddheD: 1981d0244aeSSameer Sahasrabuddhe switch i32 undef, label %B [ i32 0, label %C 1991d0244aeSSameer Sahasrabuddhe i32 1, label %exit ] 2001d0244aeSSameer Sahasrabuddhe 2011d0244aeSSameer Sahasrabuddheexit: 2021d0244aeSSameer Sahasrabuddhe ret void 2031d0244aeSSameer Sahasrabuddhe} 2041d0244aeSSameer Sahasrabuddhe 205*1469d82eSLee Weidefine void @irreducible_into_simple_cycle(i1 %arg) { 2061d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: irreducible_into_simple_cycle 2071d0244aeSSameer Sahasrabuddhe; CHECK: depth=1: entries(F C A) E D B 2081d0244aeSSameer Sahasrabuddheentry: 2091d0244aeSSameer Sahasrabuddhe switch i32 undef, label %A [ i32 0, label %C 2101d0244aeSSameer Sahasrabuddhe i32 1, label %F ] 2111d0244aeSSameer Sahasrabuddhe 2121d0244aeSSameer SahasrabuddheA: 2131d0244aeSSameer Sahasrabuddhe br label %B 2141d0244aeSSameer Sahasrabuddhe 2151d0244aeSSameer SahasrabuddheB: 2161d0244aeSSameer Sahasrabuddhe br label %C 2171d0244aeSSameer Sahasrabuddhe 2181d0244aeSSameer SahasrabuddheC: 2191d0244aeSSameer Sahasrabuddhe br label %D 2201d0244aeSSameer Sahasrabuddhe 2211d0244aeSSameer SahasrabuddheD: 222*1469d82eSLee Wei br i1 %arg, label %E, label %exit 2231d0244aeSSameer Sahasrabuddhe 2241d0244aeSSameer SahasrabuddheE: 2251d0244aeSSameer Sahasrabuddhe br label %F 2261d0244aeSSameer Sahasrabuddhe 2271d0244aeSSameer SahasrabuddheF: 228*1469d82eSLee Wei br i1 %arg, label %A, label %exit 2291d0244aeSSameer Sahasrabuddhe 2301d0244aeSSameer Sahasrabuddheexit: 2311d0244aeSSameer Sahasrabuddhe ret void 2321d0244aeSSameer Sahasrabuddhe} 2331d0244aeSSameer Sahasrabuddhe 234*1469d82eSLee Weidefine void @irreducible_mountain_bug(i1 %arg) { 2351d0244aeSSameer Sahasrabuddhe; CHECK-LABEL: CycleInfo for function: irreducible_mountain_bug 2361d0244aeSSameer Sahasrabuddhe; CHECK: depth=1: entries(while.cond) 2371d0244aeSSameer Sahasrabuddhe; CHECK: depth=2: entries(cond.end61 cond.true49) while.body63 while.cond47 2381d0244aeSSameer Sahasrabuddhe; CHECK: depth=3: entries(while.body63 cond.true49) while.cond47 2391d0244aeSSameer Sahasrabuddheentry: 240*1469d82eSLee Wei br i1 %arg, label %if.end, label %if.then 2411d0244aeSSameer Sahasrabuddhe 2421d0244aeSSameer Sahasrabuddheif.end: 243*1469d82eSLee Wei br i1 %arg, label %if.then7, label %if.else 2441d0244aeSSameer Sahasrabuddhe 2451d0244aeSSameer Sahasrabuddheif.then7: 2461d0244aeSSameer Sahasrabuddhe br label %if.end16 2471d0244aeSSameer Sahasrabuddhe 2481d0244aeSSameer Sahasrabuddheif.else: 2491d0244aeSSameer Sahasrabuddhe br label %if.end16 2501d0244aeSSameer Sahasrabuddhe 2511d0244aeSSameer Sahasrabuddheif.end16: 252*1469d82eSLee Wei br i1 %arg, label %while.cond.preheader, label %if.then39 2531d0244aeSSameer Sahasrabuddhe 2541d0244aeSSameer Sahasrabuddhewhile.cond.preheader: 2551d0244aeSSameer Sahasrabuddhe br label %while.cond 2561d0244aeSSameer Sahasrabuddhe 2571d0244aeSSameer Sahasrabuddhewhile.cond: 258*1469d82eSLee Wei br i1 %arg, label %cond.true49, label %lor.rhs 2591d0244aeSSameer Sahasrabuddhe 2601d0244aeSSameer Sahasrabuddhecond.true49: 261*1469d82eSLee Wei br i1 %arg, label %if.then69, label %while.body63 2621d0244aeSSameer Sahasrabuddhe 2631d0244aeSSameer Sahasrabuddhewhile.body63: 264*1469d82eSLee Wei br i1 %arg, label %exit, label %while.cond47 2651d0244aeSSameer Sahasrabuddhe 2661d0244aeSSameer Sahasrabuddhewhile.cond47: 267*1469d82eSLee Wei br i1 %arg, label %cond.true49, label %cond.end61 2681d0244aeSSameer Sahasrabuddhe 2691d0244aeSSameer Sahasrabuddhecond.end61: 270*1469d82eSLee Wei br i1 %arg, label %while.body63, label %while.cond 2711d0244aeSSameer Sahasrabuddhe 2721d0244aeSSameer Sahasrabuddheif.then69: 273*1469d82eSLee Wei br i1 %arg, label %exit, label %while.cond 2741d0244aeSSameer Sahasrabuddhe 2751d0244aeSSameer Sahasrabuddhelor.rhs: 276*1469d82eSLee Wei br i1 %arg, label %cond.end61, label %while.end76 2771d0244aeSSameer Sahasrabuddhe 2781d0244aeSSameer Sahasrabuddhewhile.end76: 2791d0244aeSSameer Sahasrabuddhe br label %exit 2801d0244aeSSameer Sahasrabuddhe 2811d0244aeSSameer Sahasrabuddheif.then39: 282*1469d82eSLee Wei br i1 %arg, label %exit, label %if.end.i145 2831d0244aeSSameer Sahasrabuddhe 2841d0244aeSSameer Sahasrabuddheif.end.i145: 285*1469d82eSLee Wei br i1 %arg, label %exit, label %if.end8.i149 2861d0244aeSSameer Sahasrabuddhe 2871d0244aeSSameer Sahasrabuddheif.end8.i149: 2881d0244aeSSameer Sahasrabuddhe br label %exit 2891d0244aeSSameer Sahasrabuddhe 2901d0244aeSSameer Sahasrabuddheif.then: 291*1469d82eSLee Wei br i1 %arg, label %exit, label %if.end.i 2921d0244aeSSameer Sahasrabuddhe 2931d0244aeSSameer Sahasrabuddheif.end.i: 294*1469d82eSLee Wei br i1 %arg, label %exit, label %if.end8.i 2951d0244aeSSameer Sahasrabuddhe 2961d0244aeSSameer Sahasrabuddheif.end8.i: 2971d0244aeSSameer Sahasrabuddhe br label %exit 2981d0244aeSSameer Sahasrabuddhe 2991d0244aeSSameer Sahasrabuddheexit: 3001d0244aeSSameer Sahasrabuddhe ret void 3011d0244aeSSameer Sahasrabuddhe} 302