| Issue |
163922
|
| Summary |
[BasicBlockUtils] SplitLandingPadPredecessors() breaks LoopInfo
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
yrouban
|
SplitLandingPadPredecessors() results in an irreducible loop and makes LoopInfo invalid. Verification results in a crash with the following error:
Assertion `CB != OutsideLoopPreds[i] && "Loop has multiple entry points!"' failed.
Here is the reproduction test where the bad loop has 2 blocks: catch_dest.split-lp ,catch_dest
Before:
```
declare void @foo()
define void @split-lp-predecessors-test() personality ptr null {
entry:
invoke void @foo()
to label %loop unwind label %catch_dest
loop:
invoke void @foo()
to label %latch unwind label %catch_dest
latch:
br label %loop
catch_dest:
%lp = landingpad i32
cleanup
invoke void @foo()
to label %exit unwind label %catch_dest
exit:
ret void
}
```
After SplitBlockPredecessors(catch_dest, { loop }, "", DT, LI):
```
declare void @foo()
define void @split-lp-predecessors-test() personality ptr null {
entry:
invoke void @foo()
to label %loop unwind label %catch_dest.split-lp
loop: ; preds = %latch, %entry
invoke void @foo()
to label %latch unwind label %catch_dest1
latch: ; preds = %loop
br label %loop
catch_dest1: ; preds = %loop
%lpad = landingpad i32
cleanup
br label %catch_dest
catch_dest.split-lp: ; preds = %entry, %catch_dest
%lpad.split-lp = landingpad i32
cleanup
br label %catch_dest
catch_dest: ; preds = %catch_dest.split-lp, %catch_dest1
invoke void @foo()
to label %exit unwind label %catch_dest.split-lp
exit: ; preds = %catch_dest
ret void
}
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs