xref: /llvm-project/llvm/test/Transforms/LoopSimplifyCFG/live_block_marking.ll (revision a3712e8754578a09436cf745f1036c2355287f6e)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; REQUIRES: asserts
3; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -passes='require<domtree>,loop(indvars,loop-simplifycfg)' -verify-loop-info -verify-dom-info -verify-loop-lcssa 2>&1 < %s | FileCheck %s
4; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -passes=indvars,loop-simplifycfg -verify-memoryssa -verify-loop-info -verify-dom-info -verify-loop-lcssa 2>&1 < %s | FileCheck %s
5
6define void @test(i1 %c) {
7; CHECK-LABEL: @test(
8; CHECK-NEXT:  entry:
9; CHECK-NEXT:    switch i32 0, label [[ENTRY_SPLIT:%.*]] [
10; CHECK-NEXT:    i32 1, label [[DEAD_EXIT:%.*]]
11; CHECK-NEXT:    ]
12; CHECK:       entry.split:
13; CHECK-NEXT:    br label [[OUTER:%.*]]
14; CHECK:       outer:
15; CHECK-NEXT:    br i1 [[C:%.*]], label [[TO_FOLD:%.*]], label [[LATCH:%.*]]
16; CHECK:       to_fold:
17; CHECK-NEXT:    br i1 [[C]], label [[LATCH]], label [[INNER_PREHEADER:%.*]]
18; CHECK:       inner.preheader:
19; CHECK-NEXT:    br label [[INNER:%.*]]
20; CHECK:       inner:
21; CHECK-NEXT:    br i1 false, label [[INNER_LATCH:%.*]], label [[UNDEAD:%.*]]
22; CHECK:       inner_latch:
23; CHECK-NEXT:    br i1 true, label [[INNER]], label [[LATCH_LOOPEXIT:%.*]]
24; CHECK:       undead:
25; CHECK-NEXT:    br label [[LATCH]]
26; CHECK:       latch.loopexit:
27; CHECK-NEXT:    br label [[LATCH]]
28; CHECK:       latch:
29; CHECK-NEXT:    br label [[OUTER]]
30; CHECK:       dead_exit:
31; CHECK-NEXT:    ret void
32;
33
34entry:
35  br label %outer
36
37outer:
38  br i1 %c, label %to_fold, label %latch
39
40to_fold:
41  br i1 %c, label %latch, label %inner
42
43inner:
44  %iv = phi i32 [0, %to_fold], [%iv.next, %inner_latch]
45  %never = icmp sgt i32 %iv, 40
46  br i1 %never, label %inner_latch, label %undead
47
48inner_latch:
49  %iv.next = add i32 %iv, 1
50  %cmp = icmp slt i32 %iv.next, 10
51  br i1 %cmp, label %inner, label %latch
52
53undead:
54  br label %latch
55
56latch:
57  br i1 true, label %outer, label %dead_exit
58
59dead_exit:
60  ret void
61}
62