Skip to content

Assertion `LoopCost && "Non-zero loop cost expected"' failed #54413

Closed
@nikic

Description

@nikic

The following input asserts under opt -passes=loop(indvars),loop-vectorize:

target triple = "x86_64-unknown-linux-gnu"

define void @test(i64* %ptr.base) {
entry:
  br label %loop1

loop1:
  br i1 true, label %loop1.latch, label %loop2.preheader

loop2.preheader:
  br label %loop2

loop2:
  %iv = phi i64 [ 0, %loop2.preheader ], [ %iv.next, %loop2 ]
  %ptr = phi i64* [ %ptr.base, %loop2.preheader ], [ %ptr.next, %loop2 ]
  %iv.next = add nuw nsw i64 %iv, 1
  %ptr.next = getelementptr inbounds i64, i64* %ptr, i64 1
  %cmp = icmp eq i64 %iv, 1024
  br i1 %cmp, label %loop2.exit, label %loop2

loop2.exit:
  %ptr.next.lcssa = phi i64* [ %ptr.next, %loop2 ]
  br label %loop1.latch

loop1.latch:
  br label %loop1
}
opt: /home/npopov/repos/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:5923: unsigned int llvm::LoopVectorizationCostModel::selectInterleaveCount(llvm::ElementCount, unsigned int): Assertion `LoopCost && "Non-zero loop cost expected"' failed.
[...]
 #8 0x000000000341d17c llvm::LoopVectorizationCostModel::selectInterleaveCount(llvm::ElementCount, unsigned int) (build/bin/opt+0x341d17c)
 #9 0x0000000003424d84 llvm::LoopVectorizePass::processLoop(llvm::Loop*) (build/bin/opt+0x3424d84)
#10 0x000000000342738e 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&, llvm::ProfileSummaryInfo*) (build/bin/opt+0x342738e)
#11 0x0000000003427bbc llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build/bin/opt+0x3427bbc)

Metadata

Metadata

Assignees

Type

No type

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions