<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - SLP vectorizer crashes, regression after rL346970"
   href="https://bugs.llvm.org/show_bug.cgi?id=39774">39774</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>SLP vectorizer crashes, regression after rL346970
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Loop Optimizer
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>fedor.v.sergeev@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=21150" name="attach_21150" title="IR that demonstrates crash">attachment 21150</a> <a href="attachment.cgi?id=21150&action=edit" title="IR that demonstrates crash">[details]</a></span>
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> >
<span class="quote">>(llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Instruction,</span >
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>
<span class="quote">>::insert(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction,</span >
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 <<a href="mailto:llvm-dev@redking.me.uk">llvm-dev@redking.me.uk</a>>
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: <a href="https://reviews.llvm.org/D54585">https://reviews.llvm.org/D54585</a>

    git-svn-id: <a href="https://llvm.org/svn/llvm-project/llvm/trunk@346970">https://llvm.org/svn/llvm-project/llvm/trunk@346970</a>
91177308-0d34-0410-b5e6-96231b3b80d8</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>