|  | ; RUN: opt -S -loop-simplify -disable-output -verify-loop-info -verify-dom-info < %s | 
|  | ; PR5235 | 
|  |  | 
|  | ; When loopsimplify inserts a preheader for this loop, it should add the new | 
|  | ; block to the enclosing loop and not get confused by the unreachable | 
|  | ; bogus loop entry. | 
|  |  | 
|  | define void @is_extract_cab() nounwind { | 
|  | entry: | 
|  | br label %header | 
|  |  | 
|  | header:                                       ; preds = %if.end206, %cond.end66, %if.end23 | 
|  | br label %while.body115 | 
|  |  | 
|  | while.body115:                                    ; preds = %9, %if.end192, %if.end101 | 
|  | br i1 undef, label %header, label %while.body115 | 
|  |  | 
|  | foo: | 
|  | br label %while.body115 | 
|  | } | 
|  |  | 
|  | ; When loopsimplify generates dedicated exit block for blocks that are landing | 
|  | ; pads (i.e. innerLoopExit in this test), we should not get confused with the | 
|  | ; unreachable pred (unreachableB) to innerLoopExit. | 
|  | define align 8 void @baz(i32 %trip) personality i32* ()* @wobble { | 
|  | entry: | 
|  | br label %outerHeader | 
|  |  | 
|  | outerHeader: | 
|  | invoke void @foo() | 
|  | to label %innerPreheader unwind label %innerLoopExit | 
|  |  | 
|  | innerPreheader: | 
|  | br label %innerH | 
|  |  | 
|  | innerH: | 
|  | %tmp50 = invoke i8 * undef() | 
|  | to label %innerLatch unwind label %innerLoopExit | 
|  |  | 
|  | innerLatch: | 
|  | %cmp = icmp slt i32 %trip, 42 | 
|  | br i1 %cmp, label %innerH, label %retblock | 
|  |  | 
|  | unreachableB:                                             ; No predecessors! | 
|  | %tmp62 = invoke i8 * undef() | 
|  | to label %retblock unwind label %innerLoopExit | 
|  |  | 
|  | ; undedicated exit block (preds from inner and outer loop) | 
|  | ; Also has unreachableB as pred. | 
|  | innerLoopExit: | 
|  | %tmp65 = landingpad { i8*, i32 } | 
|  | cleanup | 
|  | invoke void @foo() | 
|  | to label %outerHeader unwind label %unwindblock | 
|  |  | 
|  | unwindblock: | 
|  | %tmp67 = landingpad { i8*, i32 } | 
|  | cleanup | 
|  | ret void | 
|  |  | 
|  | retblock: | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nounwind | 
|  | declare i32* @wobble() | 
|  |  | 
|  | ; Function Attrs: uwtable | 
|  | declare void @foo() |