<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">