Skip to content

VP Recipe cast assertion error in loop vectorize #140931

Closed
@ashermancinelli

Description

@ashermancinelli
> opt -passes=loop-vectorize -disable-output reduced.ll
opt: Casting.h:578: decltype(auto) llvm::cast(From*) [with To = llvm::VPWidenPHIRecipe; From = llvm::VPRecipeBase]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
1.      Running pass "function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>)" on module "reduced.ll"
2.      Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "_QQmain"
 #0 0x0000000001b14548 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) ()
 #1 0x0000000001b117d4 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #2 0x00007fa5c5e12990 __restore_rt (/usr/lib64/libpthread.so.0+0x12990)
 #3 0x00007fa5c464e52f raise (/usr/lib64/libc.so.6+0x4e52f)
 #4 0x00007fa5c4621e65 abort (/usr/lib64/libc.so.6+0x21e65)
 #5 0x00007fa5c4621d39 _nl_load_domain.cold.0 (/usr/lib64/libc.so.6+0x21d39)
 #6 0x00007fa5c4646e86 (/usr/lib64/libc.so.6+0x46e86)
 #7 0x0000000003c10c03 (anonymous namespace)::VPPredicator::convertPhisToBlends(llvm::VPBasicBlock*) VPlanPredicator.cpp:0:0
 #8 0x0000000003c17c77 llvm::VPlanTransforms::introduceMasksAndLinearize(llvm::VPlan&, bool) ()
 #9 0x0000000003b5ee06 llvm::LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes(llvm::VFRange&, llvm::LoopVersioning*) ()
#10 0x0000000003b6171c llvm::LoopVectorizationPlanner::buildVPlansWithVPRecipes(llvm::ElementCount, llvm::ElementCount) ()
#11 0x0000000003b6203c llvm::LoopVectorizationPlanner::plan(llvm::ElementCount, unsigned int) ()
#12 0x0000000003b6b67f llvm::LoopVectorizePass::processLoop(llvm::Loop*) ()
#13 0x0000000003b6e270 llvm::LoopVectorizePass::runImpl(llvm::Function&) ()
#14 0x0000000003b6e8c3 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) ()
#15 0x000000000361e18e llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#16 0x0000000001de1ca0 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) ()
#17 0x0000000002e4a42e llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) NVPTXTargetMachine.cpp:0:0
#18 0x0000000001de21b3 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) ()
#19 0x0000000002e4a3ee llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) NVPTXTargetMachine.cpp:0:0
#20 0x0000000001ddfdd0 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) ()
#21 0x00000000034aa2ba 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) ()
#22 0x0000000001af580a optMain ()
#23 0x00007fa5c463a7e5 __libc_start_main (/usr/lib64/libc.so.6+0x3a7e5)
#24 0x0000000001ae8e6e _start ()
[1]    2235932 abort (core dumped)  opt -passes=loop-vectorize -disable-output reduced.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define void @_QQmain() {
._crit_edge:
  br label %.preheader.us

.preheader.us:                                    ; preds = %._crit_edge206.us, %._crit_edge
  %0 = phi i64 [ %3, %._crit_edge206.us ], [ 0, %._crit_edge ]
  br label %._crit_edge206.us

._crit_edge206.us:                                ; preds = %.preheader.us
  %1 = phi i32 [ 0, %.preheader.us ]
  %2 = phi i64 [ 0, %.preheader.us ]
  %3 = add i64 %0, 1
  %exitcond225.not = icmp eq i64 %0, 1
  br i1 %exitcond225.not, label %._crit_edge211, label %.preheader.us

._crit_edge211:                                   ; preds = %._crit_edge206.us
  ret void
}

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions