-
Notifications
You must be signed in to change notification settings - Fork 15.6k
Closed
Labels
crashPrefer [crash-on-valid] or [crash-on-invalid]Prefer [crash-on-valid] or [crash-on-invalid]vectorizers
Description
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 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.llDump 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
AbortedMetadata
Metadata
Assignees
Labels
crashPrefer [crash-on-valid] or [crash-on-invalid]Prefer [crash-on-valid] or [crash-on-invalid]vectorizers