<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><span class="vcard"><a class="email" href="mailto:max.kazantsev@azul.com" title="Max Kazantsev <max.kazantsev@azul.com>"> <span class="fn">Max Kazantsev</span></a>
</span> changed
          <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED DUPLICATE - Loop Vectorizer dom tree update broken - fires SCEV assertion"
   href="https://bugs.llvm.org/show_bug.cgi?id=37221">bug 37221</a>
          <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">Status</td>
           <td>NEW
           </td>
           <td>RESOLVED
           </td>
         </tr>

         <tr>
           <td style="text-align:right;">Resolution</td>
           <td>---
           </td>
           <td>DUPLICATE
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED DUPLICATE - Loop Vectorizer dom tree update broken - fires SCEV assertion"
   href="https://bugs.llvm.org/show_bug.cgi?id=37221#c10">Comment # 10</a>
              on <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED DUPLICATE - Loop Vectorizer dom tree update broken - fires SCEV assertion"
   href="https://bugs.llvm.org/show_bug.cgi?id=37221">bug 37221</a>
              from <span class="vcard"><a class="email" href="mailto:max.kazantsev@azul.com" title="Max Kazantsev <max.kazantsev@azul.com>"> <span class="fn">Max Kazantsev</span></a>
</span></b>
        <pre>My current failure stack looks like:

opt: /home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:9479: bool
llvm::ScalarEvolution::isLoopEntryGuardedByCond(const llvm::Loop*,
llvm::CmpInst::Predicate, const llvm::SCEV*, const llvm::SCEV*): Assertion
`isAvailableAtLoopEntry(LHS, L) && "LHS is not available at Loop Entry"'
failed.
Stack dump:
0.      Program arguments: /home/mkazantsev/work/llvm/build/buildRA/bin/opt
-loop-vectorize -S ./test.ll
1.      Running pass 'Function Pass Manager' on module './test.ll'.
2.      Running pass 'Loop Vectorization' on function '@test'
#0 0x00007ff127e988aa llvm::sys::PrintStackTrace(llvm::raw_ostream&)
/home/mkazantsev/work/llvm/lib/Support/Unix/Signals.inc:494:0
#1 0x00007ff127e96e6a llvm::sys::RunSignalHandlers()
/home/mkazantsev/work/llvm/lib/Support/Signals.cpp:67:0
#2 0x00007ff127e96f9d SignalHandler(int)
/home/mkazantsev/work/llvm/lib/Support/Unix/Signals.inc:353:0
#3 0x00007ff1271b1390 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)
#4 0x00007ff12656a428 gsignal
/build/glibc-Cl5G7W/glibc-2.23/signal/../sysdeps/unix/sysv/linux/raise.c:54:0
#5 0x00007ff12656c02a abort /build/glibc-Cl5G7W/glibc-2.23/stdlib/abort.c:91:0
#6 0x00007ff126562bd7 __assert_fail_base
/build/glibc-Cl5G7W/glibc-2.23/assert/assert.c:92:0
#7 0x00007ff126562c82 (/lib/x86_64-linux-gnu/libc.so.6+0x2dc82)
#8 0x00007ff128dd7ab0
llvm::ScalarEvolution::isLoopEntryGuardedByCond(llvm::Loop const*,
llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:9480:0
#9 0x00007ff128dd7afc
llvm::ScalarEvolution::isKnownOnEveryIteration(llvm::CmpInst::Predicate,
llvm::SCEVAddRecExpr const*, llvm::SCEV const*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:9104:0
#10 0x00007ff128dbf843 llvm::ScalarEvolution::getZeroExtendExpr(llvm::SCEV
const*, llvm::Type*, unsigned int)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:1746:0
#11 0x00007ff128dc1848 llvm::ScalarEvolution::createSCEV(llvm::Value*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:6425:0
#12 0x00007ff128dc2f30 llvm::ScalarEvolution::getSCEV(llvm::Value*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:3911:0
#13 0x00007ff128dd6ce4
llvm::ScalarEvolution::isImpliedCond(llvm::CmpInst::Predicate, llvm::SCEV
const*, llvm::SCEV const*, llvm::Value*, bool)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:9613:0
#14 0x00007ff128dd7475
llvm::ScalarEvolution::isLoopBackedgeGuardedByCond(llvm::Loop const*,
llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:9460:0
#15 0x00007ff128dbf827 llvm::ScalarEvolution::getZeroExtendExpr(llvm::SCEV
const*, llvm::Type*, unsigned int)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:1746:0
#16 0x00007ff128dd671f
llvm::ScalarEvolution::isImpliedCond(llvm::CmpInst::Predicate, llvm::SCEV
const*, llvm::SCEV const*, llvm::CmpInst::Predicate, llvm::SCEV const*,
llvm::SCEV const*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:9629:0
#17 0x00007ff128dd6d02
llvm::ScalarEvolution::isImpliedCond(llvm::CmpInst::Predicate, llvm::SCEV
const*, llvm::SCEV const*, llvm::Value*, bool)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:9613:0
#18 0x00007ff128dd7238
llvm::ScalarEvolution::isLoopBackedgeGuardedByCond(llvm::Loop const*,
llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:9381:0
#19 0x00007ff128dbf827 llvm::ScalarEvolution::getZeroExtendExpr(llvm::SCEV
const*, llvm::Type*, unsigned int)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:1746:0
#20 0x00007ff128dc1b9f llvm::ScalarEvolution::createSCEV(llvm::Value*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:6213:0
#21 0x00007ff128dc2f30 llvm::ScalarEvolution::getSCEV(llvm::Value*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:3911:0
#22 0x00007ff128dc1ee9 getPointer
/home/mkazantsev/work/llvm/include/llvm/ADT/Optional.h:176:0
#23 0x00007ff128dc1ee9 operator->
/home/mkazantsev/work/llvm/include/llvm/ADT/Optional.h:185:0
#24 0x00007ff128dc1ee9 llvm::ScalarEvolution::createSCEV(llvm::Value*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:6218:0
#25 0x00007ff128dc2f30 llvm::ScalarEvolution::getSCEV(llvm::Value*)
/home/mkazantsev/work/llvm/lib/Analysis/ScalarEvolution.cpp:3911:0
#26 0x00007ff128b8aef5 SmallVectorBase
/home/mkazantsev/work/llvm/include/llvm/ADT/SmallVector.h:46:0
#27 0x00007ff128b8aef5 SmallVectorTemplateCommon
/home/mkazantsev/work/llvm/include/llvm/ADT/SmallVector.h:96:0
#28 0x00007ff128b8aef5 SmallVectorTemplateBase
/home/mkazantsev/work/llvm/include/llvm/ADT/SmallVector.h:269:0
#29 0x00007ff128b8aef5 SmallVectorImpl
/home/mkazantsev/work/llvm/include/llvm/ADT/SmallVector.h:334:0
#30 0x00007ff128b8aef5 SmallVector
/home/mkazantsev/work/llvm/include/llvm/ADT/SmallVector.h:875:0
#31 0x00007ff128b8aef5 llvm::ScalarEvolution::getMulExpr(llvm::SCEV const*,
llvm::SCEV const*, llvm::SCEV::NoWrapFlags, unsigned int)
/home/mkazantsev/work/llvm/include/llvm/Analysis/ScalarEvolution.h:549:0
#32 0x00007ff128b8aef5
llvm::InnerLoopVectorizer::emitTransformedIndex(llvm::IRBuilder<llvm::ConstantFolder,
llvm::IRBuilderDefaultInserter>&, llvm::Value*, llvm::ScalarEvolution*,
llvm::DataLayout const&, llvm::InductionDescriptor const&) const
/home/mkazantsev/work/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:2532:0
#33 0x00007ff128b8ed59
llvm::InnerLoopVectorizer::createVectorizedLoopSkeleton()
/home/mkazantsev/work/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:2713:0
#34 0x00007ff128b99dec
llvm::LoopVectorizationPlanner::executePlan(llvm::InnerLoopVectorizer&,
llvm::DominatorTree*)
/home/mkazantsev/work/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:5977:0
#35 0x00007ff128ba006f std::__atomic_base<unsigned int>::fetch_add(unsigned
int, std::memory_order) /usr/include/c++/4.8.2/bits/atomic_base.h:614:0
#36 0x00007ff128ba006f llvm::Statistic::operator++()
/home/mkazantsev/work/llvm/include/llvm/ADT/Statistic.h:80:0
#37 0x00007ff128ba006f llvm::LoopVectorizePass::processLoop(llvm::Loop*)
/home/mkazantsev/work/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:7173:0
#38 0x00007ff128ba13b0 llvm::LoopVectorizePass::runImpl(llvm::Function&,
llvm::ScalarEvolution&, llvm::LoopInfo&, llvm::TargetTransformInfo&,
llvm::DominatorTree&, llvm::BlockFrequencyInfo&, llvm::TargetLibraryInfo*,
llvm::DemandedBits&, llvm::AAResults&, llvm::AssumptionCache&,
std::function<llvm::LoopAccessInfo const& (llvm::Loop&)>&,
llvm::OptimizationRemarkEmitter&)
/home/mkazantsev/work/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:7252:0
#39 0x00007ff128ba1a04 (anonymous
namespace)::LoopVectorize::runOnFunction(llvm::Function&)
/home/mkazantsev/work/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:1421:0
#40 0x00007ff127fa77cf llvm::FPPassManager::runOnFunction(llvm::Function&)
/home/mkazantsev/work/llvm/lib/IR/LegacyPassManager.cpp:1645:0
#41 0x00007ff127fa79fc llvm::FPPassManager::runOnModule(llvm::Module&)
/home/mkazantsev/work/llvm/include/llvm/ADT/ilist_node.h:67:0
#42 0x00007ff127fa812b runOnModule
/home/mkazantsev/work/llvm/lib/IR/LegacyPassManager.cpp:1745:0
#43 0x00007ff127fa812b llvm::legacy::PassManagerImpl::run(llvm::Module&)
/home/mkazantsev/work/llvm/lib/IR/LegacyPassManager.cpp:1857:0
#44 0x000000000041ceea main /home/mkazantsev/work/llvm/tools/opt/opt.cpp:858:0
#45 0x00007ff126555830 __libc_start_main
/build/glibc-Cl5G7W/glibc-2.23/csu/../csu/libc-start.c:325:0
#46 0x000000000041d5da _start
(/home/mkazantsev/work/llvm/build/buildRA/bin/opt+0x41d5da)
Aborted (core dumped)


It seems exactly the same since method "transform" has been renamed into
emitTransformedIndex by this patch:

commit dfb80c8b79891c8347e40f3e50365b3a1b04a07e
Author: Vikram TV <<a href="mailto:vikram.tarikere@gmail.com">vikram.tarikere@gmail.com</a>>
Date:   Mon Sep 10 06:16:44 2018 +0000

    Move a transformation routine from LoopUtils to LoopVectorize.

    Summary:
    Move InductionDescriptor::transform() routine from LoopUtils to its only
uses in LoopVectorize.cpp.
    Specifically, the function is renamed as
InnerLoopVectorizer::emitTransformedIndex().

    This is a child to D51153.

    Reviewers: dmgreen, llvm-commits

    Reviewed By: dmgreen

    Differential Revision: <a href="https://reviews.llvm.org/D51837">https://reviews.llvm.org/D51837</a>

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


So we know for sure that IR when this method is called is broken and creaton of
SCEVs there is invalid. The fix for <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Assertion failure /home/mkazantsev/work/llvm/include/llvm/IR/Instructions.h:3123: llvm::Value* llvm::PHINode::getIncomingValueForBlock(const llvm::BasicBlock*) const: Assertion `Idx >= 0 && "Invalid basic block argument!"' failed. Stack dump:"
   href="show_bug.cgi?id=39160">bug 39160</a> fixes the situation. Closing as
duplicate.

*** This bug has been marked as a duplicate of <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Assertion failure /home/mkazantsev/work/llvm/include/llvm/IR/Instructions.h:3123: llvm::Value* llvm::PHINode::getIncomingValueForBlock(const llvm::BasicBlock*) const: Assertion `Idx >= 0 && "Invalid basic block argument!"' failed. Stack dump:"
   href="show_bug.cgi?id=39160">bug 39160</a> ***</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>