| Issue |
203664
|
| Summary |
[LoopInterchange] Assertion failure when `indirectbr` is used
|
| Labels |
loopoptim
|
| Assignees |
kasuga-fj
|
| Reporter |
kasuga-fj
|
```llvm
; opt --passes=loop-interchange
@A = global [65536 x i32] zeroinitializer
define void @f() {
entry:
br label %outer.header
outer.header:
%i = phi i64 [ 0, %entry ], [ %i.next, %outer.latch ]
indirectbr ptr blockaddress(@f, %inner.header), [ label %inner.header ]
inner.header:
%j = phi i64 [ 0, %outer.header ], [ %j.next, %inner.latch ]
br label %inner.body
inner.body:
%idx0 = mul i64 %j, 256
%idx = add i64 %idx0, %i
%gep = getelementptr inbounds i32, ptr @A, i64 %idx
store i32 1, ptr %gep
%j.next = add nuw nsw i64 %j, 1
br label %inner.latch
inner.latch:
%cond.j = icmp slt i64 %j.next, 256
br i1 %cond.j, label %inner.header, label %inner.exit
inner.exit:
br label %outer.latch
outer.latch:
%i.next = add nuw nsw i64 %i, 1
%cond.i = icmp slt i64 %i.next, 256
br i1 %cond.i, label %outer.header, label %exit
exit:
ret void
}
```
```
opt: /home/ryotaro/llvm/llvm-project/llvm/lib/Transforms/Scalar/LoopInterchange.cpp:2239: void updateSuccessor(llvm::Instruction*, llvm::BasicBlock*, llvm::BasicBlock*, std::vector<llvm::cfg::Update<llvm::BasicBlock*>, std::allocator<llvm::cfg::Update<llvm::BasicBlock*> > >&, bool): Assertion `Changed && "Expected a successor to be updated"' failed.
```
Disclosure: The test case is AI generated.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs