Issue |
140334
|
Summary |
[SLP][AMD] Assertion `IsVectorized && "Expected to be vectorized"' failed on Zen1
|
Labels |
regression,
llvm:SLPVectorizer
|
Assignees |
|
Reporter |
mcinally
|
This was a regression from around Thurs/Fri of last week (5/8-5/9). It appears to only affect Zen1:
```
[scrubbed@scrubbed repro]$ cat test.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
@mbc_dbl = common global [16 x i8] zeroinitializer, align 8
@foo_int = common global [16 x i8] zeroinitializer, align 8
@foo_ptr = common local_unnamed_addr global [640 x i8] zeroinitializer, align 8
define void @foo() {
%165 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 64), align 8
%166 = getelementptr i64, ptr @foo_int, i64 %165
%168 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 80), align 8
%169 = getelementptr i64, ptr @foo_int, i64 %168
%171 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 192), align 8
%172 = getelementptr double, ptr @mbc_dbl, i64 %171
%174 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 128), align 8
%175 = getelementptr double, ptr @mbc_dbl, i64 %174
%177 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 144), align 8
%178 = getelementptr double, ptr @mbc_dbl, i64 %177
%180 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 208), align 8
%181 = getelementptr double, ptr @mbc_dbl, i64 %180
ret void
}
[scrubbed@scrubbed repro]$ opt -mcpu=znver1 -passes=slp-vectorizer -S test.ll
opt: /scrubbed/src/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13633: auto llvm::slpvectorizer::BoUpSLP::getEntryCost(const TreeEntry *, ArrayRef<Value *>, SmallPtrSetImpl<Value *> &)::(anonymous class)::operator()(InstructionCost) const: Assertion `IsVectorized && "Expected to be vectorized"' 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 -mcpu=znver1 -passes=slp-vectorizer -S test.ll
1. Running pass "function(slp-vectorizer)" on module "test.ll"
2. Running pass "slp-vectorizer" on function "foo"
#0 0x00000000019e4738 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /scrubbed/llvm/bin/opt+0x19e4738)
#1 0x00000000019e21ae llvm::sys::RunSignalHandlers() /scrubbed/llvm/bin/opt+0x19e21ae)
#2 0x00000000019e4fa6 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x0000148ce39d3d10 __restore_rt (/lib64/libpthread.so.0+0x12d10)
#4 0x0000148ce29ef52f raise (/lib64/libc.so.6+0x4e52f)
#5 0x0000148ce29c2e65 abort (/lib64/libc.so.6+0x21e65)
#6 0x0000148ce29c2d39 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d39)
#7 0x0000148ce29e7e86 (/lib64/libc.so.6+0x46e86)
#8 0x0000000003692f50 std::pair<llvm::DenseMapIterator<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, std::tuple<llvm::SmallVector<int, 12u>, llvm::VectorType*, unsigned int, bool>, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, void>, llvm::detail::DenseMapPair<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, std::tuple<llvm::SmallVector<int, 12u>, llvm::VectorType*, unsigned int, bool>>, false>, bool> llvm::DenseMapBase<llvm::SmallDenseMap<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, std::tuple<llvm::SmallVector<int, 12u>, llvm::VectorType*, unsigned int, bool>, 4u, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, void>, llvm::detail::DenseMapPair<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, std::tuple<llvm::SmallVector<int, 12u>, llvm::VectorType*, unsigned int, bool>>>, llvm::slpvectorizer::BoUpSLP::TreeEntry const*, std::tuple<llvm::SmallVector<int, 12u>, llvm::VectorType*, unsigned int, bool>, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, void>, llvm::detail::DenseMapPair<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, std::tuple<llvm::SmallVector<int, 12u>, llvm::VectorType*, unsigned int, bool>>>::try_emplace<llvm::SmallVector<int, 12u>&, llvm::VectorType*&, unsigned int&, bool&>(llvm::slpvectorizer::BoUpSLP::TreeEntry const* const&, llvm::SmallVector<int, 12u>&, llvm::VectorType*&, unsigned int&, bool&) SLPVectorizer.cpp:0:0
#9 0x00000000035f017c llvm::slpvectorizer::BoUpSLP::getEntryCost(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::ArrayRef<llvm::Value*>, llvm::SmallPtrSetImpl<llvm::Value*>&)::$_2::operator()(llvm::function_ref<llvm::InstructionCost (unsigned int)>, llvm::function_ref<llvm::InstructionCost (llvm::InstructionCost)>) const SLPVectorizer.cpp:0:0
#10 0x00000000035eb2e7 llvm::slpvectorizer::BoUpSLP::getEntryCost(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::ArrayRef<llvm::Value*>, llvm::SmallPtrSetImpl<llvm::Value*>&) /scrubbed/llvm/bin/opt+0x35eb2e7)
#11 0x00000000035f68d7 llvm::slpvectorizer::BoUpSLP::getTreeCost(llvm::ArrayRef<llvm::Value*>, llvm::InstructionCost) /scrubbed/llvm/bin/opt+0x35f68d7)
#12 0x000000000362f317 llvm::SLPVectorizerPass::tryToVectorizeList(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, bool) /scrubbed/llvm/bin/opt+0x362f317)
#13 0x000000000362a04f llvm::SLPVectorizerPass::vectorizeGEPIndices(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) /scrubbed/llvm/bin/opt+0x362a04f)
#14 0x000000000362545c llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) /scrubbed/llvm/bin/opt+0x362545c)
#15 0x0000000003624948 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /scrubbed/llvm/bin/opt+0x3624948)
#16 0x0000000003011b1d llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#17 0x0000000001c0bdba llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /scrubbed/llvm/bin/opt+0x1c0bdba)
#18 0x0000000001cf321d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) NVPTXTargetMachine.cpp:0:0
#19 0x0000000001c107b7 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /scrubbed/llvm/bin/opt+0x1c107b7)
#20 0x0000000001cf30ed llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) NVPTXTargetMachine.cpp:0:0
#21 0x0000000001c0aafa llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /scrubbed/llvm/bin/opt+0x1c0aafa)
#22 0x0000000002fb29e3 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) /scrubbed/llvm/bin/opt+0x2fb29e3)
#23 0x00000000019ab11f optMain /scrubbed/llvm/bin/opt+0x19ab11f)
#24 0x0000148ce29db7e5 __libc_start_main (/lib64/libc.so.6+0x3a7e5)
#25 0x00000000019a4fae _start /scrubbed/llvm/bin/opt+0x19a4fae)
Aborted (core dumped)
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs