brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · 33e5227 Raw
302 lines · plain
1; RUN: opt < %s -disable-output -passes='verify<cycles>,print<cycles>' 2>&1 | FileCheck %s -check-prefix=CHECK2 3define void @empty() {4; CHECK-LABEL: CycleInfo for function: empty5; CHECK-NOT:       depth6 7  ret void8}9 10define void @simple(i1 %arg) {11; CHECK-LABEL: CycleInfo for function: simple12; CHECK:           depth=1: entries(loop)13entry:14  br label %loop15 16loop:17  br i1 %arg, label %loop, label %exit18 19exit:20  ret void21}22 23define void @two_latches(i1 %arg) {24; CHECK-LABEL: CycleInfo for function: two_latches25; CHECK:           depth=1: entries(loop) loop_next26entry:27  br label %loop28 29loop:30  br i1 %arg, label %loop, label %loop_next31 32loop_next:33  br i1 %arg, label %exit, label %loop34 35exit:36  ret void37}38 39define void @nested_simple(i1 %arg) {40; CHECK-LABEL: CycleInfo for function: nested_simple41; CHECK:           depth=1: entries(outer_header) outer_latch inner42; CHECK:               depth=2: entries(inner)43entry:44  br label %outer_header45 46outer_header:47  br label %inner48 49inner:50  br i1 %arg, label %inner, label %outer_latch51 52outer_latch:53  br i1 %arg, label %outer_header, label %exit54 55exit:56  ret void57}58 59define void @nested_outer_latch_in_inner_loop(i1 %arg) {60; CHECK-LABEL: CycleInfo for function: nested_outer_latch_in_inner_loop61; CHECK:           depth=1: entries(outer_header) inner_header inner_latch62; CHECK:               depth=2: entries(inner_header) inner_latch63entry:64  br label %outer_header65 66outer_header:67  br label %inner_header68 69inner_header:70  br i1 %arg, label %inner_latch, label %outer_header71 72inner_latch:73  br i1 %arg, label %exit, label %inner_header74 75exit:76  ret void77}78 79define void @sibling_loops(i1 %arg) {80; CHECK-LABEL: CycleInfo for function: sibling_loops81; CHECK-DAG:       depth=1: entries(left)82; CHECK-DAG:       depth=1: entries(right)83entry:84  br i1 %arg, label %left, label %right85 86left:87  br i1 %arg, label %left, label %exit88 89right:90  br i1 %arg, label %right, label %exit91 92exit:93  ret void94}95 96define void @serial_loops(i1 %arg) {97; CHECK-LABEL: CycleInfo for function: serial_loops98; CHECK-DAG:       depth=1: entries(second)99; CHECK-DAG:       depth=1: entries(first)100entry:101  br label %first102 103first:104  br i1 %arg, label %first, label %second105 106second:107  br i1 %arg, label %second, label %exit108 109exit:110  ret void111}112 113define void @nested_sibling_loops(i1 %arg) {114; CHECK-LABEL: CycleInfo for function: nested_sibling_loops115; CHECK:           depth=1: entries(outer_header) left right116; CHECK-DAG:           depth=2: entries(right)117; CHECK-DAG:           depth=2: entries(left)118entry:119  br label %outer_header120 121outer_header:122  br i1 %arg, label %left, label %right123 124left:125  switch i32 undef, label %exit [ i32 0, label %left126                                  i32 1, label %outer_header ]127 128right:129  switch i32 undef, label %outer_header [ i32 0, label %exit130                                          i32 1, label %right ]131 132exit:133  ret void134}135 136define void @deeper_nest(i1 %arg) {137; CHECK-LABEL: CycleInfo for function: deeper_nest138; CHECK:           depth=1: entries(outer_header) outer_latch middle_header inner_header inner_latch139; CHECK:               depth=2: entries(middle_header) inner_header inner_latch140; CHECK:                   depth=3: entries(inner_header) inner_latch141entry:142  br label %outer_header143 144outer_header:145  br label %middle_header146 147middle_header:148  br label %inner_header149 150inner_header:151  br i1 %arg, label %middle_header, label %inner_latch152 153inner_latch:154  br i1 %arg, label %inner_header, label %outer_latch155 156outer_latch:157  br i1 %arg, label %outer_header, label %exit158 159exit:160  ret void161}162 163define void @irreducible_basic(i1 %arg) {164; CHECK-LABEL: CycleInfo for function: irreducible_basic165; CHECK:           depth=1: entries(right left)166entry:167  br i1 %arg, label %left, label %right168 169left:170  br i1 %arg, label %right, label %exit171 172right:173  br i1 %arg, label %left, label %exit174 175exit:176  ret void177}178 179define void @irreducible_mess(i1 %arg) {180; CHECK-LABEL: CycleInfo for function: irreducible_mess181; CHECK:           depth=1: entries(B A) D C182; CHECK:               depth=2: entries(D C A)183; CHECK:                   depth=3: entries(C A)184entry:185  br i1 %arg, label %A, label %B186 187A:188  br i1 %arg, label %C, label %D189 190B:191  br i1 %arg, label %C, label %D192 193C:194  switch i32 undef, label %A [ i32 0, label %D195                               i32 1, label %exit ]196 197D:198  switch i32 undef, label %B [ i32 0, label %C199                               i32 1, label %exit ]200 201exit:202  ret void203}204 205define void @irreducible_into_simple_cycle(i1 %arg) {206; CHECK-LABEL: CycleInfo for function: irreducible_into_simple_cycle207; CHECK:           depth=1: entries(F C A) E D B208entry:209  switch i32 undef, label %A [ i32 0, label %C210                               i32 1, label %F ]211 212A:213  br label %B214 215B:216  br label %C217 218C:219  br label %D220 221D:222  br i1 %arg, label %E, label %exit223 224E:225  br label %F226 227F:228  br i1 %arg, label %A, label %exit229 230exit:231  ret void232}233 234define void @irreducible_mountain_bug(i1 %arg) {235; CHECK-LABEL: CycleInfo for function: irreducible_mountain_bug236; CHECK:           depth=1: entries(while.cond)237; CHECK:               depth=2: entries(cond.end61 cond.true49) while.body63 while.cond47238; CHECK:                   depth=3: entries(while.body63 cond.true49) while.cond47239entry:240  br i1 %arg, label %if.end, label %if.then241 242if.end:243  br i1 %arg, label %if.then7, label %if.else244 245if.then7:246  br label %if.end16247 248if.else:249  br label %if.end16250 251if.end16:252  br i1 %arg, label %while.cond.preheader, label %if.then39253 254while.cond.preheader:255  br label %while.cond256 257while.cond:258  br i1 %arg, label %cond.true49, label %lor.rhs259 260cond.true49:261  br i1 %arg, label %if.then69, label %while.body63262 263while.body63:264  br i1 %arg, label %exit, label %while.cond47265 266while.cond47:267  br i1 %arg, label %cond.true49, label %cond.end61268 269cond.end61:270  br i1 %arg, label %while.body63, label %while.cond271 272if.then69:273  br i1 %arg, label %exit, label %while.cond274 275lor.rhs:276  br i1 %arg, label %cond.end61, label %while.end76277 278while.end76:279  br label %exit280 281if.then39:282  br i1 %arg, label %exit, label %if.end.i145283 284if.end.i145:285  br i1 %arg, label %exit, label %if.end8.i149286 287if.end8.i149:288  br label %exit289 290if.then:291  br i1 %arg, label %exit, label %if.end.i292 293if.end.i:294  br i1 %arg, label %exit, label %if.end8.i295 296if.end8.i:297  br label %exit298 299exit:300  ret void301}302