<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/56146>56146</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [LoopVectorize] Assertion in cast<VPBasicBlock>
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            loopoptim,
            vectorization,
            llvm:crash
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            fhahn
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          danilaml
      </td>
    </tr>
</table>

<pre>
    `opt -passes=loop-vectorize` crashes on the following reduced IR (might need to replace `undef`s with something else for lit test to avoid UB, as per recent discourse discussion):
```llvm
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "aarch64-none-linux-gnu"

define void @foo() {
entry:
  br label %header

header:
  br label %loop

loop:
  %indvars.iv = phi i64 [ %indvars.iv.next, %loop ], [ 2, %header ]
  %.pn = phi i32 [ %0, %loop ], [ undef, %header ]
  %val = sdiv i32 %.pn, undef
  %0 = load i32, i32 addrspace(1)* undef, align 4
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %1 = icmp ugt i64 %indvars.iv, 3
  br i1 %1, label %header, label %loop
}
```
With the following: `decltype(auto) llvm::cast(From*) [with To = llvm::VPBasicBlock; From = llvm::VPBlockBase]: Assertion isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.` at https://github.com/llvm/llvm-project/blob/main/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp#L8947
I've verified that `Region->getSingleSuccessor()` is `VPRegionBlock` here and not `VPBasicBlock`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVUuPozgQ_jXkYoHAJCQ55JBMpqWR5jCa7u09G1wBzxgb2SY92V-_VSadkNnelVYiAVd99X64tvKyS6rcDoGlg_AefFIetbVDeoYmWKf-AmSzxgnfgWfWsNABO1mt7ZsyLXMgxwYk-_KdJXzTq7YLzAASgkXeoEUDDBWMRsIJ3569qdAxb3sIHcmD9qTOMa0CC-ADCYqzVZL9cUj4JyY8G8ChrgZMYFL5xo4OZehr9F5Zk_BtUu6T_JjkezQxPVqf-4kUhGsBJUUQWlzsGBhGiM5ySHuUg1Rt8EW_kqeqqPAj_tGpWuJHtUQyJwD-p6bkE-05nhSR04FHgaueq67I42jowY_g1KDh3QchXNOhMmMNpFqZ8VfamvEmM_1j6pQBFpOSLPOTtZhqjJol68OEwNS4yy0JjNWYT1GDRhOrDoQEN9d3pXwMp9rPwfF8hyJCGXkWzmfqHKMYOsUwUSxZHR65mYFfgUp41YqIYzwikF_pkyuRczeQDeauueTvmvN_0TX11n_oOwsd9XmJLkeF0QaJTLJ3aB6B2gpJQEIQXkjp_ICtjHkvqN34_m5VaNUatvwwQTEFUSWqYGZ8Y8a_Tdmaw0hNMVNQRBHV9AMb2_AxvpwVTxVRisi_l31OmpV2ffxtXqbjnzScDwOOpaf5ldDocBkoAWIMlpovThg2RrlvhMc6b56c7TEzsTFXhzjnL3bK5w36-u0gvGoO2jY_k_LASOafEOIiDqiMaH-Pa8kFnHSmvEjKTy82KT-jwVehozFe4UPTFB1B_mXiExOHbuxpc9gTU6ax_SCCqnEAp2gKGjW-ZiehNMiMVp0IrAth8OQNf8KnxUjGOmsouqfo5_RKB2d_4JLEY61tja9eKDPDKKK9OGE8Lrje4-H1tlP501esxu2cNcOQ8PLrZrtcT6X4gm6dcejBqZOifdqhY-jfd2gxEylGiNvkGSuk4XlsGvDeuilmCkJ5wr5-m9BTupHcgQMmDLaiDRNgVo4qzxZyV8ptuRWLoIKGHdbxwU0syLwahl0z_ljWz4vR6d3_TqLyfgTK0qoqltWi29V1Xp5WheRFJat6uV6vYbvebOptneOkopOxsz15iWWk7sZrTPWxpLQN-PsVJkK8Jt7J116LdxpRV8eF2vGc87ziRbFaFkWRVbzmzYrLsoRNXm5q3LuA5dUZCWfWtQu3i_7XY-uRqZUP_s7EmxS3AsDVt1MnOnM1hfPTWbeTwigter2IYe9izH8DOk9BFg">