Skip to content

[LV] VPlan cost model and legacy cost model disagreed #149651

@sjoerdmeijer

Description

@sjoerdmeijer

A new case where the cost-models disagree:

bool a;
extern short b[];
short c;
long d;
void e(bool g[]) {
#pragma clang loop vectorize_predicate(enable)
  for (unsigned f(c); f < 23; f += 4) {
    a = 0;
    b[f] = d + g[0];
  }
}

this runs into this error when e.g. compiled with clang++ -ofast -mcpu=grace:

llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:7107: VectorizationFactor llvm::LoopVectorizationPlanner::computeBest
VF(): Assertion `(BestFactor.Width == LegacyVF.Width || BestPlan.hasEarlyExit() || planContainsAdditionalSimplifications(getPlanFor(BestFactor.Width), CostCtx, OrigLoop, B
estFactor.Width) || planContainsAdditionalSimplifications( getPlanFor(LegacyVF.Width), CostCtx, OrigLoop, LegacyVF.Width)) && " VPlan cost model and legacy cost model disa
greed"' failed.

Stack trace:

 #0 0x0000aaaaaf3acc90 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/llvm-project/build_expensive_checks/bin/clang+++0x490cc90)
 #1 0x0000aaaaaf3aa728 llvm::sys::RunSignalHandlers() (/llvm-project/build_expensive_checks/bin/clang+++0x490a728)
 #2 0x0000aaaaaf2ffd70 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x0000fffff7fb09d0 (linux-vdso.so.1+0x9d0)
 #4 0x0000fffff7a1f200 __pthread_kill_implementation ./nptl/./nptl/pthread_kill.c:44:76
 #5 0x0000fffff79da67c gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #6 0x0000fffff79c7130 abort ./stdlib/./stdlib/abort.c:81:7
 #7 0x0000fffff79d3fd0 __assert_fail_base ./assert/./assert/assert.c:89:7
 #8 0x0000fffff79d4040 __assert_perror_fail ./assert/./assert/assert-perr.c:31:1
 #9 0x0000aaaab069de8c planContainsAdditionalSimplifications(llvm::VPlan&, llvm::VPCostContext&, llvm::Loop*, llvm::ElementCount) LoopVectorize.cpp:0:0
#10 0x0000aaaab06af99c llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/llvm-project/build_expensive_checks/bin/clang+++0x5c0f99c)
#11 0x0000aaaab06b75c0 llvm::LoopVectorizePass::runImpl(llvm::Function&) (/llvm-project/build_expensive_checks/bin/clang+++0x5c175c0)
#12 0x0000aaaab06b7f30 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/llvm-project/build_expensive_checks/bin/clang+++0x5c17f30)
#13 0x0000aaaaaee5ab14 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/llvm-project/build_expensive_checks/bin/clang+++0x43bab14)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions