[llvm] a48ebb8 - [VPlan] Check type directly in ::isCanonical (NFC).
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Fri May 3 05:13:22 PDT 2024
Author: Florian Hahn
Date: 2024-05-03T13:12:33+01:00
New Revision: a48ebb8276408fa88cf7060ddc68f4eda1b62def
URL: https://github.com/llvm/llvm-project/commit/a48ebb8276408fa88cf7060ddc68f4eda1b62def
DIFF: https://github.com/llvm/llvm-project/commit/a48ebb8276408fa88cf7060ddc68f4eda1b62def.diff
LOG: [VPlan] Check type directly in ::isCanonical (NFC).
Directly check the type of the wide induction matches the canonical
induction.
Refactor suggested in and in preparation for
https://github.com/llvm/llvm-project/pull/89603
Added:
Modified:
llvm/lib/Transforms/Vectorize/VPlan.h
llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h
index 21fe9765492922..67059bc17c7ca4 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.h
+++ b/llvm/lib/Transforms/Vectorize/VPlan.h
@@ -1757,7 +1757,8 @@ class VPWidenIntOrFpInductionRecipe : public VPHeaderPHIRecipe {
const InductionDescriptor &getInductionDescriptor() const { return IndDesc; }
/// Returns true if the induction is canonical, i.e. starting at 0 and
- /// incremented by UF * VF (= the original IV is incremented by 1).
+ /// incremented by UF * VF (= the original IV is incremented by 1) and has the
+ /// same type as the canonical induction.
bool isCanonical() const;
/// Returns the scalar type of the induction.
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index 29ed001ccd2c77..018436326b7a51 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -1222,7 +1222,9 @@ bool VPWidenIntOrFpInductionRecipe::isCanonical() const {
return false;
auto *StepC = dyn_cast<ConstantInt>(getStepValue()->getLiveInIRValue());
auto *StartC = dyn_cast<ConstantInt>(getStartValue()->getLiveInIRValue());
- return StartC && StartC->isZero() && StepC && StepC->isOne();
+ auto *CanIV = cast<VPCanonicalIVPHIRecipe>(&*getParent()->begin());
+ return StartC && StartC->isZero() && StepC && StepC->isOne() &&
+ getScalarType() == CanIV->getScalarType();
}
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index e8240c4f3924f6..c0eb6d710ad34b 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -452,8 +452,7 @@ static void removeRedundantCanonicalIVs(VPlan &Plan) {
for (VPRecipeBase &Phi : HeaderVPBB->phis()) {
auto *WidenOriginalIV = dyn_cast<VPWidenIntOrFpInductionRecipe>(&Phi);
- if (!WidenOriginalIV || !WidenOriginalIV->isCanonical() ||
- WidenOriginalIV->getScalarType() != WidenNewIV->getScalarType())
+ if (!WidenOriginalIV || !WidenOriginalIV->isCanonical())
continue;
// Replace WidenNewIV with WidenOriginalIV if WidenOriginalIV provides
More information about the llvm-commits
mailing list