xref: /llvm-project/llvm/test/Transforms/CodeExtractor/LoopExtractor_crash.ll (revision 217e85761cd1978931e29546e15716614e3b2fcc)
1; RUN: opt < %s -passes='cgscc(inline,loop-simplify),loop-extract' -S | FileCheck %s
2; RUN: opt < %s -passes='cgscc(argpromotion,loop-simplify),loop-extract' -S | FileCheck %s
3
4; This test used to trigger an assert (PR8929).
5
6define void @test() {
7; CHECK-LABEL: define void @test()
8; CHECK-NEXT:  entry:
9; CHECK-NEXT:    br label %codeRepl
10; CHECK:       codeRepl:
11; CHECK-NEXT:    call void @test.loopentry()
12; CHECK-NEXT:    br label %loopexit
13; CHECK:       loopexit:
14; CHECK-NEXT:    br label %exit
15; CHECK:       exit:
16; CHECK-NEXT:    ret void
17
18entry:
19  br label %loopentry
20
21loopentry:                                        ; preds = %loopbody, %entry
22  br i1 undef, label %loopbody, label %loopexit
23
24loopbody:                                         ; preds = %codeRepl1
25  call void @foo()
26  br label %loopentry
27
28loopexit:                                         ; preds = %codeRepl
29  br label %exit
30
31exit:                                             ; preds = %loopexit
32  ret void
33}
34
35declare void @foo()
36
37; CHECK-LABEL: define internal void @test.loopentry()
38; CHECK-NEXT:  newFuncRoot:
39; CHECK-NEXT:    br label %loopentry
40; CHECK:       loopentry:
41; CHECK-NEXT:    br i1 false, label %loopbody, label %loopexit.exitStub
42; CHECK:       loopbody:
43; CHECK-NEXT:    call void @foo()
44; CHECK-NEXT:    br label %loopentry
45; CHECK:       loopexit.exitStub:
46; CHECK-NEXT:    ret void
47