Skip to content

loop-vectorize crashes with Assertion `Resolved >= Pred && "unhandled irreducible control flow"' failed. #218392

Description

@mikaelholmen

llvm commit: 74609ed
Reproduce with:
opt < bbi-120045.ll -passes='function(require<cycles>,loop-vectorize,print<block-freq>)' -disable-output
Result:

opt: /repo/llvm/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp:356: void llvm::BlockFrequencyInfoImplBase::addToDist(Distribution &, const LoopData *, const BlockNode &, const BlockNode &, uint64_t): Assertion `Resolved >= Pred && "unhandled irreducible control flow"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0.	Program arguments: build-all/bin/opt -passes=function(require<cycles>,loop-vectorize,print<block-freq>) -disable-output
1.	Running pass "function(require<cycles>,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,print<block-freq>)" on module "<stdin>"
2.	Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "f"
 #0 0x000055b3420fcbac llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (build-all/bin/opt+0x522fbac)
 #1 0x000055b3420f97b1 llvm::sys::RunSignalHandlers() (build-all/bin/opt+0x522c7b1)
 #2 0x000055b3420fda83 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007fe8094ea990 __restore_rt (/lib64/libpthread.so.0+0x12990)
 #4 0x00007fe8072965af raise (/lib64/libc.so.6+0x4e5af)
 #5 0x00007fe807269ee5 abort (/lib64/libc.so.6+0x21ee5)
 #6 0x00007fe807269db9 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21db9)
 #7 0x00007fe80728ef06 (/lib64/libc.so.6+0x46f06)
 #8 0x000055b3428b70ef (build-all/bin/opt+0x59ea0ef)
 #9 0x000055b3428adfde llvm::BlockFrequencyInfoImpl<llvm::BasicBlock>::propagateMassToSuccessors(llvm::BlockFrequencyInfoImplBase::LoopData*, llvm::BlockFrequencyInfoImplBase::BlockNode const&) (build-all/bin/opt+0x59e0fde)
#10 0x000055b3428a9673 llvm::BlockFrequencyInfoImpl<llvm::BasicBlock>::computeMassInFunction() (build-all/bin/opt+0x59dc673)
#11 0x000055b3428a4797 llvm::BlockFrequencyInfoImpl<llvm::BasicBlock>::calculate(llvm::Function const&, llvm::BranchProbabilityInfo const&, llvm::CycleInfo const&) (build-all/bin/opt+0x59d7797)
#12 0x000055b3428a4132 llvm::BlockFrequencyInfo::calculate(llvm::Function const&, llvm::BranchProbabilityInfo const&, llvm::CycleInfo const&) (build-all/bin/opt+0x59d7132)
#13 0x000055b3428a63d4 llvm::BlockFrequencyAnalysis::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x59d93d4)
#14 0x000055b34413077b llvm::detail::AnalysisPassModel<llvm::Function, llvm::BlockFrequencyAnalysis, llvm::AnalysisManager<llvm::Function>::Invalidator>::runImpl(llvm::detail::AnalysisPassConcept<llvm::Function, llvm::AnalysisManager<llvm::Function>::Invalidator>&, llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#15 0x000055b34234482f llvm::AnalysisManager<llvm::Function>::getResultImpl(llvm::AnalysisKey*, llvm::Function&) (build-all/bin/opt+0x547782f)
#16 0x000055b34388a715 std::_Function_handler<llvm::BlockFrequencyInfo& (), llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)::$_0>::_M_invoke(std::_Any_data const&) LoopVectorize.cpp:0:0
#17 0x000055b3438246e8 llvm::LoopVectorizationCostModel::getPredBlockCostDivisor(llvm::TargetTransformInfo::TargetCostKind, llvm::BasicBlock const*) LoopVectorize.cpp:0:0
#18 0x000055b34382e0f0 llvm::LoopVectorizationCostModel::expectedCost(llvm::ElementCount) (build-all/bin/opt+0x69610f0)
#19 0x000055b34383d469 llvm::LoopVectorizationPlanner::computeBestVF() (build-all/bin/opt+0x6970469)
#20 0x000055b343851387 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (build-all/bin/opt+0x6984387)
#21 0x000055b34385be7a llvm::LoopVectorizePass::runImpl(llvm::Function&) (build-all/bin/opt+0x698ee7a)
#22 0x000055b34385ce11 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x698fe11)
#23 0x000055b34371240d llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::runImpl(llvm::detail::PassConcept<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#24 0x000055b3423418bb llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x54748bb)
#25 0x000055b34371022d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::runImpl(llvm::detail::PassConcept<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#26 0x000055b34234608e llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x547908e)
#27 0x000055b34369b47d llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::runImpl(llvm::detail::PassConcept<llvm::Module, llvm::AnalysisManager<llvm::Module>>&, llvm::Module&, llvm::AnalysisManager<llvm::Module>&) NewPMDriver.cpp:0:0
#28 0x000055b342340918 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x5473918)
#29 0x000055b343693dcc llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool, bool) (build-all/bin/opt+0x67c6dcc)
#30 0x000055b3420ca244 optMain (build-all/bin/opt+0x51fd244)
#31 0x00007fe807282865 __libc_start_main (/lib64/libc.so.6+0x3a865)
#32 0x000055b3420c742e _start (build-all/bin/opt+0x51fa42e)
Abort (core dumped)

bbi-120045.ll.gz

https://godbolt.org/z/n5sreTar1

It starts crashing with 206e4c0
[Analysis] Use CycleInfo for BlockFrequencyInfo (#213488)

It crashes also with the fix for the similar issue #215236

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    Status
    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions