[llvm-bugs] [Bug 39774] New: SLP vectorizer crashes, regression after rL346970

via llvm-bugs llvm-bugs at lists.llvm.org
Sun Nov 25 02:10:05 PST 2018


https://bugs.llvm.org/show_bug.cgi?id=39774

            Bug ID: 39774
           Summary: SLP vectorizer crashes, regression after rL346970
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Loop Optimizer
          Assignee: unassignedbugs at nondot.org
          Reporter: fedor.v.sergeev at gmail.com
                CC: llvm-bugs at lists.llvm.org

Created attachment 21150
  --> https://bugs.llvm.org/attachment.cgi?id=21150&action=edit
IR that demonstrates crash

SLP vectorizer crashes on a relatively simple testcase:

] linux-release-asserts/bin/opt vectorize-reduced.ll -slp-vectorizer
Stack dump:
0.      Program arguments: /builds/linux-release-asserts/bin/opt
vectorize-reduced.ll -slp-vectorizer 
1.      Running pass 'Function Pass Manager' on module 'vectorize-reduced.ll'.
2.      Running pass 'SLP Vectorizer' on function '@Test'
#0 0x00007f4a47e0e71a llvm::sys::PrintStackTrace(llvm::raw_ostream&)
/llvm/lib/Support/Unix/Signals.inc:499:3
#1 0x00007f4a47e0cba4 llvm::sys::RunSignalHandlers()
/llvm/lib/Support/Signals.cpp:67:5
#2 0x00007f4a47e0cd25 SignalHandler(int)
/llvm/lib/Support/Unix/Signals.inc:348:31
#3 0x00007f4a46e304b0 (/lib/x86_64-linux-gnu/libc.so.6+0x354b0)
#4 0x00007f4a4878de85
llvm::ilist_node_base<true>::setNext(llvm::ilist_node_base<true>*)
/llvm/include/llvm/ADT/ilist_node_base.h:42:52
#5 0x00007f4a4878de85
llvm::ilist_base<true>::insertBeforeImpl(llvm::ilist_node_base<true>&,
llvm::ilist_node_base<true>&) /llvm/include/llvm/ADT/ilist_base.h:27:5
#6 0x00007f4a4878de85 void
llvm::ilist_base<true>::insertBefore<llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Instruction,
true, false, void> >
>(llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Instruction,
true, false, void> >&,
llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Instruction, true,
false, void> >&) /llvm/include/llvm/ADT/ilist_base.h:78:21
#7 0x00007f4a4878de85
llvm::simple_ilist<llvm::Instruction>::insert(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction,
true, false, void>, false, false>, llvm::Instruction&)
/llvm/include/llvm/ADT/simple_ilist.h:161:33
#8 0x00007f4a4878de85 llvm::iplist_impl<llvm::simple_ilist<llvm::Instruction>,
llvm::SymbolTableListTraits<llvm::Instruction>
>::insert(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction,
true, false, void>, false, false>, llvm::Instruction*)
/llvm/include/llvm/ADT/ilist.h:230:34
#9 0x00007f4a4878de85
llvm::IRBuilderDefaultInserter::InsertHelper(llvm::Instruction*, llvm::Twine
const&, llvm::BasicBlock*,
llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true,
false, void>, false, false>) const /llvm/include/llvm/IR/IRBuilder.h:66:49
#10 0x00007f4a4878de85 llvm::ShuffleVectorInst*
llvm::IRBuilder<llvm::ConstantFolder,
llvm::IRBuilderDefaultInserter>::Insert<llvm::ShuffleVectorInst>(llvm::ShuffleVectorInst*,
llvm::Twine const&) const /llvm/include/llvm/IR/IRBuilder.h:795:5
#11 0x00007f4a4878de85 llvm::IRBuilder<llvm::ConstantFolder,
llvm::IRBuilderDefaultInserter>::CreateShuffleVector(llvm::Value*,
llvm::Value*, llvm::Value*, llvm::Twine const&)
/llvm/include/llvm/IR/IRBuilder.h:1966:60
#12 0x00007f4a4878de85
llvm::getShuffleReduction(llvm::IRBuilder<llvm::ConstantFolder,
llvm::IRBuilderDefaultInserter>&, llvm::Value*, unsigned int,
llvm::RecurrenceDescriptor::MinMaxRecurrenceKind, llvm::ArrayRef<llvm::Value*>)
/llvm/lib/Transforms/Utils/LoopUtils.cpp:555:46
#13 0x00007f4a4878ea32
llvm::createSimpleTargetReduction(llvm::IRBuilder<llvm::ConstantFolder,
llvm::IRBuilderDefaultInserter>&, llvm::TargetTransformInfo const*, unsigned
int, llvm::Value*, llvm::TargetTransformInfo::ReductionFlags,
llvm::ArrayRef<llvm::Value*>) /llvm/lib/Transforms/Utils/LoopUtils.cpp:649:29
#14 0x00007f4a48ca6d4c emitReduction
/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:5927:41
#15 0x00007f4a48ca6d4c tryToReduce
/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:5804:24
#16 0x00007f4a48ca6d4c tryToVectorizeHorReductionOrInstOperands(llvm::PHINode*,
llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&,
llvm::TargetTransformInfo*, llvm::function_ref<bool (llvm::Instruction*,
llvm::slpvectorizer::BoUpSLP&)>) (.constprop.1485)
/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6110:31
#17 0x00007f4a48ca7938
llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Value*,
llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*)
/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6166:50
#18 0x00007f4a48ca84ff
llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*,
llvm::slpvectorizer::BoUpSLP&)
/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6318:7
#19 0x00007f4a48ca92db llvm::SLPVectorizerPass::runImpl(llvm::Function&,
llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*,
llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*,
llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*)
(.part.1478) /llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:4645:13
#20 0x00007f4a48caa63c (anonymous
namespace)::SLPVectorizer::runOnFunction(llvm::Function&)
/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:4550:65
#21 0x00007f4a47f2de08 llvm::FPPassManager::runOnFunction(llvm::Function&)
/llvm/lib/IR/LegacyPassManager.cpp:1644:40
#22 0x00007f4a47f2deb9
llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Function, true,
false, void> >::getNext() /llvm/include/llvm/ADT/ilist_node.h:67:66
#23 0x00007f4a47f2deb9
llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Function, true,
false, void>, false, false>::operator++()
/llvm/include/llvm/ADT/ilist_iterator.h:159:25
#24 0x00007f4a47f2deb9 llvm::FPPassManager::runOnModule(llvm::Module&)
/llvm/lib/IR/LegacyPassManager.cpp:1678:22
#25 0x00007f4a47f2d2e8 runOnModule /llvm/lib/IR/LegacyPassManager.cpp:1745:7
#26 0x00007f4a47f2d2e8 llvm::legacy::PassManagerImpl::run(llvm::Module&)
/llvm/lib/IR/LegacyPassManager.cpp:1857:55
#27 0x000000000041a25b main /llvm/tools/opt/opt.cpp:827:15
#28 0x00007f4a46e1b830 __libc_start_main
/build/glibc-Cl5G7W/glibc-2.23/csu/../csu/libc-start.c:325:0
#29 0x000000000041aa09 _start (/builds/linux-release-asserts/bin/opt+0x41aa09)


Bisect points to the following commit:
commit 49953bea6524e88e5637526219b2a153a6d30029 (HEAD, refs/bisect/bad)
Author: Simon Pilgrim <llvm-dev at redking.me.uk>
Date:   Thu Nov 15 17:42:53 2018 +0000

    [TTI] Reduction costs only need to include a single extract element cost

    We were adding the entire scalarization extraction cost for reductions,
which returns the total cost of extracting every element of a vector type.

    For reductions we don't need to do this - we just need to extract the 0'th
element after the reduction pattern has completed.

    Fixes PR37731

    Differential Revision: https://reviews.llvm.org/D54585

    git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346970
91177308-0d34-0410-b5e6-96231b3b80d8

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20181125/5f1c04f4/attachment-0001.html>


More information about the llvm-bugs mailing list