xref: /llvm-project/llvm/test/Transforms/LoopUnroll/verify-dominators.ll (revision f92b35392ed8e46311eeb9c4546246fe809a0aa6)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes=loop-unroll -unroll-verify-domtree -verify-dom-info -S %s | FileCheck %s
3
4define void @test() {
5; CHECK-LABEL: @test(
6; CHECK-NEXT:  entry:
7; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]
8; CHECK:       loop.header:
9; CHECK-NEXT:    br label [[LOOP_LATCH:%.*]]
10; CHECK:       loop.latch:
11; CHECK-NEXT:    br i1 true, label [[LOOP_HEADER_1:%.*]], label [[LOOP_EXIT:%.*]]
12; CHECK:       loop.header.1:
13; CHECK-NEXT:    br i1 true, label [[EXIT_LOOPEXIT:%.*]], label [[LOOP_LATCH_1:%.*]]
14; CHECK:       loop.latch.1:
15; CHECK-NEXT:    br label [[LOOP_EXIT]]
16; CHECK:       loop.exit:
17; CHECK-NEXT:    br label [[EXIT:%.*]]
18; CHECK:       exit.loopexit:
19; CHECK-NEXT:    br label [[EXIT]]
20; CHECK:       exit:
21; CHECK-NEXT:    ret void
22;
23entry:
24  br label %loop.header
25
26loop.header:
27  %exitcond = phi i1 [ true, %loop.latch ], [ false, %entry ]
28  br i1 %exitcond, label %exit, label %loop.latch
29
30loop.latch:
31  br i1 true, label %loop.header, label %loop.exit
32
33loop.exit:
34  br label %exit
35
36exit:
37  ret void
38}
39
40define void @exiting_terminator_is_switch() {
41; CHECK-LABEL: @exiting_terminator_is_switch(
42; CHECK-NEXT:  bb:
43; CHECK-NEXT:    br label [[LOOP:%.*]]
44; CHECK:       loop:
45; CHECK-NEXT:    switch i1 true, label [[LOOP_BACKEDGE:%.*]] [
46; CHECK-NEXT:    i1 true, label [[EXIT:%.*]]
47; CHECK-NEXT:    i1 false, label [[LOOP_BACKEDGE]]
48; CHECK-NEXT:    ]
49; CHECK:       loop.backedge:
50; CHECK-NEXT:    unreachable
51; CHECK:       exit:
52; CHECK-NEXT:    ret void
53;
54bb:
55  br label %loop
56
57loop:
58  switch i1 true, label %loop [
59  i1 true, label %exit
60  i1 false, label %loop
61  ]
62
63exit:
64  ret void
65}
66