[llvm] [VPlanUtils] Use TypeSwitch to simplify isSingleScalar(). nfc (PR #141074)
Mel Chen via llvm-commits
llvm-commits at lists.llvm.org
Fri May 23 03:28:12 PDT 2025
https://github.com/Mel-Chen updated https://github.com/llvm/llvm-project/pull/141074
>From 4703c1c88f5bed3c38b328e961b82b6798aa06aa Mon Sep 17 00:00:00 2001
From: Mel Chen <mel.chen at sifive.com>
Date: Thu, 22 May 2025 06:24:43 -0700
Subject: [PATCH 1/4] nfnfc, use TypeSwitch
---
llvm/lib/Transforms/Vectorize/VPlanUtils.h | 55 +++++++++++++---------
1 file changed, 32 insertions(+), 23 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanUtils.h b/llvm/lib/Transforms/Vectorize/VPlanUtils.h
index 28c1a6af2570b..5aa0b0ecea9aa 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanUtils.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanUtils.h
@@ -10,6 +10,7 @@
#define LLVM_TRANSFORMS_VECTORIZE_VPLANUTILS_H
#include "VPlan.h"
+#include "llvm/ADT/TypeSwitch.h"
namespace llvm {
class ScalarEvolution;
@@ -59,29 +60,37 @@ inline bool isSingleScalar(const VPValue *VPV) {
if (VPV->isLiveIn())
return true;
- if (auto *Rep = dyn_cast<VPReplicateRecipe>(VPV)) {
- const VPRegionBlock *RegionOfR = Rep->getParent()->getParent();
- // Don't consider recipes in replicate regions as uniform yet; their first
- // lane cannot be accessed when executing the replicate region for other
- // lanes.
- if (RegionOfR && RegionOfR->isReplicator())
- return false;
- return Rep->isSingleScalar() || (PreservesUniformity(Rep->getOpcode()) &&
- all_of(Rep->operands(), isSingleScalar));
- }
- if (isa<VPWidenGEPRecipe, VPDerivedIVRecipe, VPBlendRecipe>(VPV))
- return all_of(VPV->getDefiningRecipe()->operands(), isSingleScalar);
- if (auto *WidenR = dyn_cast<VPWidenRecipe>(VPV)) {
- return PreservesUniformity(WidenR->getOpcode()) &&
- all_of(WidenR->operands(), isSingleScalar);
- }
- if (auto *VPI = dyn_cast<VPInstruction>(VPV))
- return VPI->isSingleScalar() || VPI->isVectorToScalar() ||
- (PreservesUniformity(VPI->getOpcode()) &&
- all_of(VPI->operands(), isSingleScalar));
-
- // VPExpandSCEVRecipes must be placed in the entry and are alway uniform.
- return isa<VPExpandSCEVRecipe>(VPV);
+ return TypeSwitch<const VPValue *, bool>(VPV)
+ .Case<VPReplicateRecipe>([&](const auto *Rep) {
+ const VPRegionBlock *RegionOfR = Rep->getParent()->getParent();
+ // Don't consider recipes in replicate regions as uniform yet; their
+ // first lane cannot be accessed when executing the replicate region for
+ // other lanes.
+ if (RegionOfR && RegionOfR->isReplicator())
+ return false;
+ return Rep->isSingleScalar() ||
+ (PreservesUniformity(Rep->getOpcode()) &&
+ all_of(Rep->operands(), isSingleScalar));
+ })
+ .Case<VPWidenGEPRecipe, VPDerivedIVRecipe, VPBlendRecipe>(
+ [&](const auto *R) {
+ return all_of(R->getDefiningRecipe()->operands(), isSingleScalar);
+ })
+ .Case<VPWidenRecipe>([&](const auto *WidenR) {
+ return PreservesUniformity(WidenR->getOpcode()) &&
+ all_of(WidenR->operands(), isSingleScalar);
+ })
+ .Case<VPInstruction>([&](const auto *VPI) {
+ return VPI->isSingleScalar() || VPI->isVectorToScalar() ||
+ (PreservesUniformity(VPI->getOpcode()) &&
+ all_of(VPI->operands(), isSingleScalar));
+ })
+ .Case<VPExpandSCEVRecipe>([](const VPValue *) {
+ // VPExpandSCEVRecipes must be placed in the entry and are alway
+ // uniform.
+ return true;
+ })
+ .Default([](const VPValue *) { return false; });
}
/// Return true if \p V is a header mask in \p Plan.
>From 6be5da5989d876008e37ee3b98d297a40fcb28c1 Mon Sep 17 00:00:00 2001
From: Mel Chen <mel.chen at sifive.com>
Date: Fri, 23 May 2025 03:16:49 -0700
Subject: [PATCH 2/4] nfc, correct comment
---
llvm/lib/Transforms/Vectorize/VPlanUtils.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanUtils.h b/llvm/lib/Transforms/Vectorize/VPlanUtils.h
index 5aa0b0ecea9aa..2647ef4b70124 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanUtils.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanUtils.h
@@ -86,7 +86,7 @@ inline bool isSingleScalar(const VPValue *VPV) {
all_of(VPI->operands(), isSingleScalar));
})
.Case<VPExpandSCEVRecipe>([](const VPValue *) {
- // VPExpandSCEVRecipes must be placed in the entry and are alway
+ // VPExpandSCEVRecipes must be placed in the entry and are always
// uniform.
return true;
})
>From d8da3b425e075ae20db30c92f9517506ece66cd5 Mon Sep 17 00:00:00 2001
From: Mel Chen <mel.chen at sifive.com>
Date: Fri, 23 May 2025 03:26:52 -0700
Subject: [PATCH 3/4] nfc, remove getDefiningRecipe()
---
llvm/lib/Transforms/Vectorize/VPlanUtils.h | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanUtils.h b/llvm/lib/Transforms/Vectorize/VPlanUtils.h
index 2647ef4b70124..dbac50bcce717 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanUtils.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanUtils.h
@@ -73,9 +73,7 @@ inline bool isSingleScalar(const VPValue *VPV) {
all_of(Rep->operands(), isSingleScalar));
})
.Case<VPWidenGEPRecipe, VPDerivedIVRecipe, VPBlendRecipe>(
- [&](const auto *R) {
- return all_of(R->getDefiningRecipe()->operands(), isSingleScalar);
- })
+ [&](const auto *R) { return all_of(R->operands(), isSingleScalar); })
.Case<VPWidenRecipe>([&](const auto *WidenR) {
return PreservesUniformity(WidenR->getOpcode()) &&
all_of(WidenR->operands(), isSingleScalar);
>From 8e441c293ac2424e679a2780852d0eb665a7af94 Mon Sep 17 00:00:00 2001
From: Mel Chen <mel.chen at sifive.com>
Date: Fri, 23 May 2025 03:27:50 -0700
Subject: [PATCH 4/4] nfc, replace VPValue with auto
---
llvm/lib/Transforms/Vectorize/VPlanUtils.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanUtils.h b/llvm/lib/Transforms/Vectorize/VPlanUtils.h
index dbac50bcce717..7df6370c8ed6d 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanUtils.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanUtils.h
@@ -83,12 +83,12 @@ inline bool isSingleScalar(const VPValue *VPV) {
(PreservesUniformity(VPI->getOpcode()) &&
all_of(VPI->operands(), isSingleScalar));
})
- .Case<VPExpandSCEVRecipe>([](const VPValue *) {
+ .Case<VPExpandSCEVRecipe>([](const auto *) {
// VPExpandSCEVRecipes must be placed in the entry and are always
// uniform.
return true;
})
- .Default([](const VPValue *) { return false; });
+ .Default([](const auto *) { return false; });
}
/// Return true if \p V is a header mask in \p Plan.
More information about the llvm-commits
mailing list