diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index c379c6db74327..551aa0df15cf3 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -8094,6 +8094,8 @@ InstructionCost BoUpSLP::getSpillCost() const { // are grouped together. Using dominance ensures a deterministic order. SmallVector OrderedScalars; for (const auto &TEPtr : VectorizableTree) { + if (TEPtr->State != TreeEntry::Vectorize) + continue; Instruction *Inst = dyn_cast(TEPtr->Scalars[0]); if (!Inst) continue; @@ -8107,7 +8109,7 @@ InstructionCost BoUpSLP::getSpillCost() const { assert((NodeA == NodeB) == (NodeA->getDFSNumIn() == NodeB->getDFSNumIn()) && "Different nodes should have different DFS numbers"); if (NodeA != NodeB) - return NodeA->getDFSNumIn() < NodeB->getDFSNumIn(); + return NodeA->getDFSNumIn() > NodeB->getDFSNumIn(); return B->comesBefore(A); }); @@ -8166,7 +8168,7 @@ InstructionCost BoUpSLP::getSpillCost() const { }; // Debug information does not impact spill cost. - if (isa(&*PrevInstIt) && !NoCallIntrinsic(&*PrevInstIt) && + if (isa(&*PrevInstIt) && !NoCallIntrinsic(&*PrevInstIt) && &*PrevInstIt != PrevInst) NumCalls++; diff --git a/llvm/test/Transforms/SLPVectorizer/AArch64/landing_pad.ll b/llvm/test/Transforms/SLPVectorizer/AArch64/landing_pad.ll index be5389ba8a09f..8e32a14b3a4b4 100644 --- a/llvm/test/Transforms/SLPVectorizer/AArch64/landing_pad.ll +++ b/llvm/test/Transforms/SLPVectorizer/AArch64/landing_pad.ll @@ -28,7 +28,7 @@ ; YAML-NEXT: Function: foo ; YAML-NEXT: Args: ; YAML-NEXT: - String: 'SLP vectorized with cost ' -; YAML-NEXT: - Cost: '-3' +; YAML-NEXT: - Cost: '1' ; YAML-NEXT: - String: ' and with tree size ' ; YAML-NEXT: - TreeSize: '9'