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

    <tr>
        <th>Summary</th>
        <td>
            [ARM][VPlan] Assertion on reduction with -mcpu=neoverse-n1 - Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"'
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            vectorization
      </td>
    </tr>

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

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

<pre>
    VPlan is tripping an assert on a reduction loop for Neoverse-N1 (and SVE targets with -scalable-vectorization=off). 

Here is a bugpoint reduced test case:

```
[<scrubbed> ~]$ cat test.ll
target triple = "arm64-linux"

define dso_local void @foo() {
L.entry:
  %.pre = load i32, ptr null
  br label %L.B0

L.B0: ; preds = %L.B3, %L.entry
  %0 = phi i32 [ %.pre, %L.entry ], [ %5, %L.B3 ]
  %.xxx.addr.0 = phi float [ undef, %L.entry ], [ %.lcssa, %L.B3 ]
  %1 = and i32 %0, 15
  br label %L.B2

L.B2: ; preds = %L.B3385, %L.B0
 %.xxx.addr.1 = phi float [ %.xxx.addr.0, %L.B0 ], [ %2, %L.B2 ]
 %.yyy.addr.0 = phi i32 [ 0, %L.B0 ], [ %3, %L.B2 ]
  %2 = fadd contract float %.xxx.addr.1, 0.000000e+00
  %3 = add nuw nsw i32 %.yyy.addr.0, 1
  %4 = icmp ult i32 %3, %1
  br i1 %4, label %L.B2, label %L.B3, !llvm.loop !0

L.B3:                                          ; preds = %L.B2
  %.lcssa = phi float [ %2, %L.B2 ]
  %5 = bitcast float %.lcssa to i32
  br label %L.B0
}

!0 = distinct !{!0, !1}
!1 = !{!"llvm.loop.interleave.count", i32 2}
[<scrubbed> ~]$ opt -passes=loop-vectorize test.ll -mcpu=neoverse-n1 -S
opt: <scrubbed>/clang/llvm-project/llvm/include/llvm/Support/Casting.h:578: decltype(auto) llvm::cast(From*) [with To = llvm::VectorType; From = llvm::Type]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: <scrubbed>opt -passes=loop-vectorize test.ll -mcpu=neoverse-n1 -S
 #0 0x0000000005303072 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) <scrubbed>/clang/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:22
 #1 0x00000000053034a7 PrintStackTraceSignalHandler(void*) <scrubbed>/clang/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x0000000005300d9a llvm::sys::RunSignalHandlers() <scrubbed>/clang/llvm-project/llvm/lib/Support/Signals.cpp:105:20
 #3 0x0000000005302a5d SignalHandler(int) <scrubbed>/clang/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x000014ba383cbc20 __restore_rt sigaction.c:0:0
 #5 0x000014ba373e237f raise (/lib64/libc.so.6+0x3737f)
 #6 0x000014ba373ccdb5 abort (/lib64/libc.so.6+0x21db5)
 #7 0x000014ba373ccc89 _nl_load_domain.cold.0 loadmsgcat.c:0:0
 #8 0x000014ba373daa76 .annobin___GI___assert_fail.end assert.c:0:0
 #9 0x0000000001ecd371 decltype(auto) llvm::cast<llvm::VectorType, llvm::Type>(llvm::Type*) <scrubbed>/clang/llvm-project/llvm/include/llvm/Support/Casting.h:578:3
#10 0x0000000005895a10 llvm::VPReductionRecipe::execute(llvm::VPTransformState&) <scrubbed>/clang/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:9401:43
#11 0x00000000059f9f84 llvm::VPBasicBlock::execute(llvm::VPTransformState*) <scrubbed>/clang/llvm-project/llvm/lib/Transforms/Vectorize/VPlan.cpp:494:31
#12 0x00000000059fac8f llvm::VPRegionBlock::execute(llvm::VPTransformState*) <scrubbed>/clang/llvm-project/llvm/lib/Transforms/Vectorize/VPlan.cpp:643:31
#13 0x00000000059fbafd llvm::VPlan::execute(llvm::VPTransformState*) <scrubbed>/clang/llvm-project/llvm/lib/Transforms/Vectorize/VPlan.cpp:774:57
#14 0x000000000588cf45 llvm::LoopVectorizationPlanner::executePlan(llvm::ElementCount, unsigned int, llvm::VPlan&, llvm::InnerLoopVectorizer&, llvm::DominatorTree*, bool, llvm::DenseMap<llvm::SCEV const*, llvm::Value*, llvm::DenseMapInfo<llvm::SCEV const*, void>, llvm::detail::DenseMapPair<llvm::SCEV const*, llvm::Value*>> const*) <scrubbed>/clang/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:7733:24
#15 0x000000000589a099 llvm::LoopVectorizePass::processLoop(llvm::Loop*) <scrubbed>/clang/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10195:22```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWN9v46gW_mvIC6qFwY7thzzkR3t3pNlVNe3ta4QBp9whYAHutPfh_u1X4DixPWm1M6sdbTQ_EuB8nO8c-DhAnZMHLcQK5BuQ7xa088_Gro5MaqrU26I2_G31dK-ohtJBb2XbSn2AVEPqnLAeGg0ptIJ3zEujoTKmhY2x8A9hXoR14uaPFAJcUs3hw9Mt9NQehHfwm_TP8MYxqmitxM2LYN5Y-V8aQADZmaYBuEogQDuA1v2_vwkrghMU1t2hNVL7fl7BoRfOQ0adAGQ9NgFLdPrT_8w3gGwds11dCw7ILfwfyHcAZ5BRH0ESpfqhvZ-RsBIQkB0EGFN7XGY3SuruFWA8noiLRmoBuTN7ZRhV8MVIDkGGGmMALgGuICg2_djPidDevp1dhRDgPGltP40ylENJMMBb2HoLdTe4BGFtoaK1UMHgc7JBYw_ib7KGgGxgawV3J6fDQBLA4td-5su0KI5qn2WYEoJ8M_gytYAxTNthQH7u3ZDYNeLx-vqaUM5tcoFulKE-2naai-ZD6EQx5-j7-GlEDaspOoxzFMam-TshwrMQ4XdDRMoRq1Nkp4TSK4SmjEcAM1r40oVHjIL529vbPGBDLj4AJNcB41wRp6GcQ2a0t5T5weMJnYCAEhQ_AuANQiMQ0seZc6i7b1C7b0O8R_7GyI9ssmgj2bGFnfKDweBpOkqRTOP40DPN1qzhZJsq9XJMorQAnM6XPQk5_dOfa8nH4wUcF-D1VL-TxbglokUtPaNuHO4ezZu4pT_exsVuIl047RcEl85LzQJcGjQkBKCPSnoxwWl64nMaAzA-By2R2gurBH0RCTOd9kG88DYmCF8w3hVH03p40wa9d4DsAuJZr8WgmvDmyNoOkJ0edF-n8Oahhzat7_fdGB7gO6aoPgB8Fzy9aa35j2D-9BPgO6mZ6ri4NDx0bWtsGLGlISaH5BmQdV6UAZwLpvxbK8JZ03kTFDeakTUg65AUgMs7a44Ar6Ma55t4BD2aXnXPQ58is8eARDYwWMwGxK58F-ZcxyMwHHtgiaSjgGwfTaRWPlEVp8FLgJfh7IgukO3jW98fOqk9dEehPTQNlJqZY0u9rJWAPY80pqmADZVK8KQP5f3n2_XDLXRdfZS-PwqhFSEsYZE9e9-64Ca-A_juIP1zVycskB5iOAu1dK4TDuC7XlL7iEP_LCCz1D3DmrKvQUHEafoHT9lXyLtjez6-UAJQdW_NwdLjmZL7Pt9_eRVBgAmC6BUNn5wgggo8yo17c_2Xeyu1j84-Bu8BLi-DLP22N85bQY8xPVsow5aofnR9KllPFuW_tXwNDfKgqXKJ1AyQdYGDPA3FQqCQzilktIAzf3uM36jmSliAy1BNDAv373CyClsovfiIZz4iXtFrYf7S6Ymrbqh1_pqTg3esDcssRXkI4eVMJmTmHqY5h_OY_Y1JzVIyjVd2cijNakpKwmqGEdzvrXDeWLG3Hjp5oLFCTgIAin_P5vnYvCACk6KBlkonYAxo8GqZ9f-zxJlkGY7rV1KQIpTJF6DlFIgxXueQ1kEdPgLCKa_zCVAxB2JlBfda7UN5uufmSKVOmFE8QbFiPboDo_4at3KKxCktljChWpta6v1-_69P-_2-v0vsg9IlQvPT3eIaXDVOfSoYJ0X6J7SfbK8qfCg3psIexXnW9lMb74dOLzIc4ySdKlxZ5TRF4-Pp_stw1_oimGxF3yxeBev8VOee7h8t1a4x9vjgaehc_vSGOCOFs-JpkG2A7z4b055_nzZslaE07JIRq6noVU3VlNmE1YY6yTbKsK8_QujnFfFdQvGueyKSVVlITnrhgWc8KCubWXYO0uh_GpFlRmZEyIxITRs-IaKo_gcRKIosbpYLgWy6T0rWZPmIwHhdxkeFAKaFnXCKJMe8bpUI1cu2L5K3sNPxdYT3FcL2uwD15cOl9VOYYrIl7HdjduYoNQ0KZEUfuC2sjVGzUUI78TttJ8r1sL19Cne6UMyuZ_5Q1YnvWgeUT7oxHyPFCiPkbGzOhadSTaHuqbQ_7BS5DfeJy6BfoUJFQWLplV3WTD7TVoqq6p01I-6pOxU5rTVMOBd6J4ulb_hFbFKUVnlfSQ5vWgu-IrwiFV2IVbqsyrLIclQunlcZFU0mmMjTsk5FVTLUVHSZi5qk-bLky4VcYRREGaU4JTkqE0bRckkKxutyiQuUgwyJYziM4x3S2MMiXhRWBarKchEvry6-GGI8fbnDGOS7hV1F3nV3cCBDSjrvLkheehWfG9dffg_3qHzT76V8N7pPGT16U-zfCq_dDH7NDWzRWbX6-atVDNr_AwAA__-Qq05r">