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