xref: /llvm-project/llvm/test/Analysis/CycleInfo/basic.ll (revision 1469d82e1cb3edc939d6b93089046edfef0cf36c)
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