<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60831>60831</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Loop Vectorizer crashes with assertion failure :: Assertion `!State.VF.isScalable() && "Can't scalarize a scalable vector" on hitting a store instruction.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
kartcq
</td>
</tr>
</table>
<pre>
Loop vectorizer aborts with assertion failure on hitting store instruction in a loop
```virtual void llvm::VPReplicateRecipe::execute(llvm::VPTransformState &): Assertion `!State.VF.isScalable() && "Can't scalarize a scalable vector"' failed.```
I have reduced the IR to simple loop containing a store instruction.
The issue started to appear after the commit [D134460](https://reviews.llvm.org/D134460) where tail masking condition is added for legalizing scalarization.
@fhahn
Find the IR and the command to reproduce the failure below.
**IR**
**test_loop.ll**
```
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-unknown-linux-gnu"
define dso_local fastcc void @_test_loop(i64 %n, i8* %store_dest) unnamed_addr #0 {
br label %1
.critedge5: ; preds = %1
ret void
1: ; preds = %1, %0
%2 = phi i64 [ %5, %1 ], [ 0, %0 ]
%3 = trunc i64 %2 to i8
%4 = getelementptr i8, i8* %store_dest, i64 0
store i8 %3, i8* %4, align 1
%5 = add nsw i64 %2, 1
%6 = icmp sle i64 %5, %n
br i1 %6, label %1, label %.critedge5
}
attributes #0 = { "target-features"="+crc,+crypto,+fp-armv8,+neon,+sve,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8a" }
```
Can be reproduced by **command**
`opt -passes=loop-vectorize test_loop.ll`
**Dump of crash**
```
virtual void llvm::VPReplicateRecipe::execute(llvm::VPTransformState &): Assertion `!State.VF.isScalable() && "Can't scalarize a scalable vector"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments:opt -passes=loop-vectorize test-loop.ll
#0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
#1 llvm::sys::RunSignalHandlers()
#2 SignalHandler(int) Signals.cpp:0:0
#3 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)
#4 raise /build/glibc-S7Ft5T/glibc-2.23/signal/../sysdeps/unix/sysv/linux/raise.c:54:0
#5 abort /build/glibc-S7Ft5T/glibc-2.23/stdlib/abort.c:91:0
#6 __assert_fail_base /build/glibc-S7Ft5T/glibc-2.23/assert/assert.c:92:0
#7 (/lib/x86_64-linux-gnu/libc.so.6+0x2dc92)
#8 llvm::VPReplicateRecipe::execute(llvm::VPTransformState&)
#9 llvm::VPBasicBlock::execute(llvm::VPTransformState*)
#10 llvm::VPRegionBlock::execute(llvm::VPTransformState*)
#11 llvm::VPlan::execute(llvm::VPTransformState*)
#12 llvm::LoopVectorizationPlanner::executePlan(llvm::ElementCount, unsigned int, llvm::VPlan&, llvm::InnerLoopVectorizer&, llvm::DominatorTree*, bool)
#13 llvm::LoopVectorizePass::processLoop(llvm::Loop*)
#14 llvm::LoopVectorizePass::runImpl(llvm::Function&, llvm::ScalarEvolution&, llvm::LoopInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::BlockFrequencyInfo&, llvm::TargetLibraryInfo*, llvm::DemandedBits&, llvm::AssumptionCache&, llvm::LoopAccessInfoManager&, llvm::OptimizationRemarkEmitter&, llvm::ProfileSummaryInfo*)
#15 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)
#16 llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)
#17 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)
#18 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)
#19 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&)
#20 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&)
#21 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&)
#22 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool)
#23 main
#24 __libc_start_main /build/glibc-S7Ft5T/glibc-2.23/csu/../csu/libc-start.c:325:0
#25 _start
Aborted
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWUtv4zgS_jXMhbAhUfLrkIPjxNhguzFBEvTVKIllmxuK1PDhdObXL0j6ISVOd3q6ZzE7gWNTZPGrqq-KT4G1YqMQL8noioyuL8C7rTaXT2Bc_ftFpfnL5SetW7rD2mkj_kBDodLGWfos3JaCtWic0IquQUhvkGpFt8I5oTbUOm2QCmWd8XUUEooClVq3JLsm2ZyMs_TZCeM8SLrTglMpdw0p5qSYf7m7x1aKGhzeYy1aTNX4FWvvkLBpV_TRgLJrbZoHBw4pYWPCZqSY0_nRxqCM5bF9-GU5FPahBgmVDFCEzVKfMSWMLUARNnHUBoHgNoVUriTuuSCMETaJfiMfHl1Jnt3SLeyQGuS-Rk7dFuntPXWaWtG0EiMHtNbKgVCBKnhL1nDPUfx-3CIV1nqk1oFxAVJTaFsEQ2Ht0EQVtW4a4SgZXV3nRVmOMzK6Jmy6da61gSa2JGxpcCfw2Q4Dd0NtNoQtD9JsRp-3aJA6EJI2YJ-CbbVWXKTwWQqcI6drbajEDUjxRwz0niXo2l1m6y1sFe26sRTqSAbsi8HoWNbUYGt0YCw2HDKqQqmfe2wQFj639-m3W-fQulUgdyhlr7Wfb-nRgdmgoxwcSHjR3lFSXIfo4yBkFQ7ElBTz8F-wgcjHpJjHr_A0LkkxH5cDkbMgkLPpQBUs1T2EOsZ6SpwRIe57BQCm3o7LgVdPSj-rgRTKfx1slD92S98c10Ih5VavpK5B0jVYV9dpnJAyWx39JWwqxiUlbKQIW1AxJWwenmJarThaF6LrlYIG-Qo4N5SwIqNkcpVUUVoZKqFCGbrlXSuGtREO-QZHYTh97I8UV7Q1yO3e5QMiNeii-V0F-cdxv6WALcJvdvCHsBGLje1W0EjO6CpUjvaCOY3DYxHrs0PvWHlCKCKCM17VdE8wC6kqph2hMgpt0KHEBpVrnYkReCcOi4h0tHM_8qdRXa9TGZ5Aio2ieUfdKKoDzqmyz0ergmxXahylRN201Eo8iB2cV52oizzKh5ZOAnSfOhmQwja57sYPnDOi8g7tPqlCRCaBbJbSf7BGcN6gDfldXMep86o2NWGLWHhpnU7ldTsA0-ym6UmhVqlkd5gKu-kwh2ORnYrFqVgei0AYoydr--M_fS9A0QpPcw-n1QtNc8d-ajo7kejW0UEb1j9LiuswBAfHNZL2pqG-ugR27ZuW6jWtDdhtD79v4j9gYYx-3H26mT_cUOursEABrfwmMK6NC4Opv0BthNv6aljrhrBldCT9DFqj_4O1I2wZl0JL2DKuIkLV0vO0aERCaQX1kzNQ4179g4P6iXLftEFLrMqGaR65M3pjoKFgNj6M3WDHd2M7OMQ2DaKY9CfK7YtNhTsjlIu6H4MxvbgYeF5p6wxCE9ldUKHiHH3CzM9h3nv1IDYK5L9AcYnGHkJ07MZoTyCsDAk5Vdth3QYasvh_7FXQ1cpgmqaMoxF1KUVF2PLrdLwal91FKjS0bmsQ-NDqYUbYVfY1z4tZ2EOcMEtqQNiQcsvKC8lDcKWo6sHDZOlGj8dHNmQFYUsb7SNsORyGpxfLsQ1B9kp8TRW7qFr58BihhzUp5qOy78oobVE_rNbx5GfsFRFneR9xTFertNVdhbReVfBxr1K_YyHhsz7-5AN814HpcWSa8XrGekxPf83kkOaGTi7NerhXYEV9JXX99COQ8xNkSOrslakbodXPYuY9TAnqJ7BYByscfb7sR37c3AZshaYHH_V1VdykXcBCexVXe6_iGYunEb54Y2sa_qfa26CiqzoM4lcy17oRCpw2jwaTDwtaaS37vhTv-IJ3YPfzSWt0jdZ-SnvIvvgbbsrv4xmvbptW9rCWXsUjzRsv4jJjbnZa-rPtQcetWus3DY9xW3GM5FmZVxS9ao0ptzT4u0dVv3xDySdRGTB7ifkrFRj2B8ivhLNvus-t9U0b_FpAvX1rQXBuXgfyA_ZnULA5E-jfWieaffbdYwPm6aYRzp2RvDN6LSQ--Kbp2tuN3-hD8ftY7OYK5IsV9mB4sTjTqbjpTSnBhnEHg2M4ae7NB2s_a47yPNIb6vq2v2ICLZod8mQj2j9nefj8TyiZdG0PNHyr_9_blekviO5fRsH_dZJ0l-LPmnuJj_ogHxibc2jD7vusNanDD9my7_LWEpb9UIwPqhcftP9XBelk_3sh-qWk5B9I4HNU_I1c6O58jI9BuRMtSqH6W6gHZ4Ta3OP6XFDfWUU_Q72NOPPvrLFp8_BaSmv5m3etd0shz4D8VPM77syNgZdQ2yUvciL9Rqg384lu3cqFHVhatqO-fwvFvyX1BY1YCzQHubSD--hvN3YFbUCoTkVJV6twaljFC-NVav3YiaW2_nAIS8XYGHHi6aVgo9PxJega0aRlr34ezlHIX11oXPDLgs-KGVzgZT6ejMdsVJSTi-1lXkFZMF6OZtO8WpclZDlwlk1GMGV5ydiFuGQZKzKWT7JZPionw3JcQDWd8HLKp7N1OSVlhg0IebzTvogXBJfjbFrkF_EWyx5ecJjLeJdQ-Y0lZSaFdaer8AsnnMT0wuO09053CvjuG48Uyr_wNqX7TuXci4ILb-Tln79DiSz9NwAA__8bB9_e">