14b6e3ad9SArthur Eubanks; RUN: opt < %s -mergereturn -loop-extract -enable-new-pm=0 -S | FileCheck %s
23b70ee27SEhud Katz
33b70ee27SEhud Katz; This test used to enter an infinite loop, until out of memory (PR3082).
43b70ee27SEhud Katz
53b70ee27SEhud Katzdefine void @test() {
63b70ee27SEhud Katz; CHECK-LABEL: define void @test()
73b70ee27SEhud Katz; CHECK-NEXT:  entry:
83b70ee27SEhud Katz; CHECK-NEXT:    br label %codeRepl
93b70ee27SEhud Katz; CHECK:       codeRepl:
103b70ee27SEhud Katz; CHECK-NEXT:    %targetBlock = call i1 @test.loopentry()
113b70ee27SEhud Katz; CHECK-NEXT:    br i1 %targetBlock, label %exit.1, label %exit.0
123b70ee27SEhud Katz; CHECK:       exit.0:
133b70ee27SEhud Katz; CHECK-NEXT:    br label %UnifiedReturnBlock
143b70ee27SEhud Katz; CHECK:       exit.1:
153b70ee27SEhud Katz; CHECK-NEXT:    br label %UnifiedReturnBlock
163b70ee27SEhud Katz; CHECK:       UnifiedReturnBlock:
173b70ee27SEhud Katz; CHECK-NEXT:    ret void
183b70ee27SEhud Katz
193b70ee27SEhud Katzentry:
203b70ee27SEhud Katz  br label %loopentry
213b70ee27SEhud Katz
223b70ee27SEhud Katzloopentry:                                        ; preds = %loopexit, %entry
233b70ee27SEhud Katz  br i1 undef, label %exit.1, label %loopexit
243b70ee27SEhud Katz
253b70ee27SEhud Katzloopexit:                                         ; preds = %loopentry
263b70ee27SEhud Katz  br i1 undef, label %loopentry, label %exit.0
273b70ee27SEhud Katz
283b70ee27SEhud Katzexit.0:                                           ; preds = %loopexit
293b70ee27SEhud Katz  ret void
303b70ee27SEhud Katz
313b70ee27SEhud Katzexit.1:                                           ; preds = %loopentry
323b70ee27SEhud Katz  ret void
333b70ee27SEhud Katz}
343b70ee27SEhud Katz
353b70ee27SEhud Katz; CHECK-LABEL: define internal i1 @test.loopentry()
363b70ee27SEhud Katz; CHECK-NEXT:  newFuncRoot:
373b70ee27SEhud Katz; CHECK-NEXT:    br label %loopentry
383b70ee27SEhud Katz; CHECK:       loopentry:
393b70ee27SEhud Katz; CHECK-NEXT:    br i1 true, label %exit.1.exitStub, label %loopexit
403b70ee27SEhud Katz; CHECK:       loopexit:
413b70ee27SEhud Katz; CHECK-NEXT:    br i1 false, label %loopexit.loopentry_crit_edge, label %exit.0.exitStub
423b70ee27SEhud Katz; CHECK:       loopexit.loopentry_crit_edge:
433b70ee27SEhud Katz; CHECK-NEXT:    br label %loopentry
44*2e192ab1SVyacheslav Zakharin; CHECK:       exit.1.exitStub:
45*2e192ab1SVyacheslav Zakharin; CHECK-NEXT:    ret i1 true
46*2e192ab1SVyacheslav Zakharin; CHECK:       exit.0.exitStub:
47*2e192ab1SVyacheslav Zakharin; CHECK-NEXT:    ret i1 false
48