[llvm-bugs] [Bug 37221] Loop Vectorizer dom tree update broken - fires SCEV assertion

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Oct 5 00:40:34 PDT 2018


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

Max Kazantsev <max.kazantsev at azul.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |DUPLICATE

--- Comment #10 from Max Kazantsev <max.kazantsev at azul.com> ---
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 <vikram.tarikere at gmail.com>
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: https://reviews.llvm.org/D51837

    git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341776
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 bug 39160 fixes the situation. Closing as
duplicate.

*** This bug has been marked as a duplicate of bug 39160 ***

-- 
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/20181005/4f965870/attachment-0001.html>


More information about the llvm-bugs mailing list