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

Reply via email to