[PATCH] D140580: [SLP]Do not emit many extractelements, reuse the single one emitted.
Daniil Suchkov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 24 15:37:35 PST 2023
DaniilSuchkov added a comment.
This patch is causing a crash even after the 26fec4e845a833214d2b0036ea90f1b1c2418d50 <https://reviews.llvm.org/rG26fec4e845a833214d2b0036ea90f1b1c2418d50>
IR:
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"
define void @foo() #0 {
bb:
br label %bb1
bb1: ; preds = %bb1, %bb
%inst = phi i32 [ poison, %bb ], [ %inst58, %bb1 ]
%inst2 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
%inst3 = load i32, ptr addrspace(1) %inst2, align 4
%inst4 = add i32 %inst3, -1
store i32 %inst4, ptr addrspace(1) %inst2, align 4
%inst5 = add i32 poison, -1
%inst6 = mul i32 %inst4, %inst
%inst7 = mul i32 %inst6, %inst5
%inst8 = add nuw nsw i64 poison, 1
%inst9 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst8
%inst10 = load i32, ptr addrspace(1) %inst9, align 4
%inst11 = add i32 %inst10, -1
store i32 %inst11, ptr addrspace(1) %inst9, align 4
%inst12 = add i32 poison, -1
%inst13 = mul i32 %inst11, %inst7
%inst14 = mul i32 %inst13, %inst12
%inst15 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
%inst16 = load i32, ptr addrspace(1) %inst15, align 4
%inst17 = add i32 %inst16, -1
store i32 %inst17, ptr addrspace(1) %inst15, align 4
%inst18 = add i32 poison, -1
%inst19 = mul i32 %inst17, %inst14
%inst20 = mul i32 %inst19, %inst18
%inst21 = add nuw nsw i64 poison, 1
%inst22 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst21
%inst23 = load i32, ptr addrspace(1) %inst22, align 4
%inst24 = add i32 %inst23, -1
store i32 %inst24, ptr addrspace(1) %inst22, align 4
%inst25 = add i32 poison, -1
%inst26 = mul i32 %inst24, %inst20
%inst27 = mul i32 %inst26, %inst25
%inst28 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 poison
%inst29 = load i32, ptr addrspace(1) %inst28, align 4
%inst30 = add i32 %inst29, -1
store i32 %inst30, ptr addrspace(1) %inst28, align 4
%inst31 = mul i32 %inst30, 47961
%inst32 = add i32 %inst31, -1
%inst33 = mul i32 %inst30, %inst27
%inst34 = mul i32 %inst33, %inst32
%inst35 = add nuw nsw i64 poison, 1
%inst36 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst35
%inst37 = load i32, ptr addrspace(1) %inst36, align 4
%inst38 = add i32 %inst37, -1
store i32 %inst38, ptr addrspace(1) %inst36, align 4
%inst39 = mul i32 %inst38, 47961
%inst40 = add i32 %inst39, -1
%inst41 = mul i32 %inst38, %inst34
%inst42 = mul i32 %inst41, %inst40
%inst43 = add nuw nsw i64 %inst35, 1
%inst44 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst43
%inst45 = load i32, ptr addrspace(1) %inst44, align 4
%inst46 = add i32 %inst45, -1
store i32 %inst46, ptr addrspace(1) %inst44, align 4
%inst47 = mul i32 %inst46, 47961
%inst48 = add i32 %inst47, -1
%inst49 = mul i32 %inst46, %inst42
%inst50 = mul i32 %inst49, %inst48
%inst51 = add nuw nsw i64 %inst43, 1
%inst52 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %inst51
%inst53 = load i32, ptr addrspace(1) %inst52, align 4
%inst54 = add i32 %inst53, -1
store i32 %inst54, ptr addrspace(1) %inst52, align 4
%inst55 = mul i32 %inst54, 47961
%inst56 = add i32 %inst55, -1
%inst57 = mul i32 %inst54, %inst50
%inst58 = mul i32 %inst57, %inst56
br label %bb1
}
attributes #0 = { "target-features"="+avx" }
Command:
opt -passes=slp-vectorizer -disable-output ir.ll
Result:
opt: llvm-project/llvm/include/llvm/ADT/DenseMap.h:1251: llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::value_type* llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::operator->() const [with KeyT = llvm::Value*; ValueT = llvm::SmallVector<llvm::Instruction*>; KeyInfoT = llvm::DenseMapInfo<llvm::Value*, void>; Bucket = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >; bool IsConst = false; llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::pointer = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >*; llvm::DenseMapIterator<KeyT, ValueT, KeyInfoT, Bucket, IsConst>::value_type = llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*> >]: Assertion `Ptr != End && "dereferencing end() iterator"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: bin/opt -passes=slp-vectorizer -disable-output bugpoint-reduced-simplified-minimized.ll
#0 0x0000000003ab5864 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm-project/llvm/lib/Support/Unix/Signals.inc:565:0
#1 0x0000000003ab5c53 PrintStackTraceSignalHandler(void*) llvm-project/llvm/lib/Support/Unix/Signals.inc:639:0
#2 0x0000000003ab3783 llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:104:0
#3 0x0000000003ab529f SignalHandler(int) llvm-project/llvm/lib/Support/Unix/Signals.inc:410:0
#4 0x00007f1bd34035e0 __restore_rt sigaction.c:0:0
#5 0x00007f1bd1f691f7 raise (/lib64/libc.so.6+0x351f7)
#6 0x00007f1bd1f6a8e8 abort (/lib64/libc.so.6+0x368e8)
#7 0x00007f1bd1f62266 __assert_fail_base (/lib64/libc.so.6+0x2e266)
#8 0x00007f1bd1f62312 (/lib64/libc.so.6+0x2e312)
#9 0x0000000003dd059a llvm::DenseMapIterator<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 6u>, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 6u>>, false>::operator->() const llvm-project/llvm/include/llvm/ADT/DenseMap.h:1252:0
#10 0x0000000003d87336 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13046:0
#11 0x0000000003d8a956 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&)::'lambda'(llvm::Instruction*, llvm::Value*&, llvm::Value*&)::operator()(llvm::Instruction*, llvm::Value*&, llvm::Value*&) const llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13745:0
#12 0x0000000003d8abcb llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13760:0
#13 0x0000000003d8af43 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Value*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13812:0
#14 0x0000000003d8d040 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:14254:0
#15 0x0000000003d7ef19 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:11703:0
#16 0x0000000003d7ea2f llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:11634:0
#17 0x0000000003f47c92 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#18 0x000000000312d1bc llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm-project/llvm/include/llvm/IR/PassManager.h:521:0
#19 0x0000000003f506ce 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>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#20 0x000000000312cb92 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/lib/IR/PassManager.cpp:125:0
#21 0x0000000003f50632 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#22 0x000000000312cecc llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm-project/llvm/include/llvm/IR/PassManager.h:521:0
#23 0x0000000001bf4eeb 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) llvm-project/llvm/tools/opt/NewPMDriver.cpp:522:0
#24 0x0000000001c1f4f2 main llvm-project/llvm/tools/opt/opt.cpp:719:0
#25 0x00007f1bd1f55c05 __libc_start_main (/lib64/libc.so.6+0x21c05)
#26 0x0000000001bed2a9 _start (llvm-project/buildDA/bin/opt+0x1bed2a9)
It doesn't crash if I revert 26fec4e845a833214d2b0036ea90f1b1c2418d50 <https://reviews.llvm.org/rG26fec4e845a833214d2b0036ea90f1b1c2418d50> and 5dccea5a68fb5181ab88ce6faac4668934f35cd7 <https://reviews.llvm.org/rG5dccea5a68fb5181ab88ce6faac4668934f35cd7>.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D140580/new/
https://reviews.llvm.org/D140580
More information about the llvm-commits
mailing list