[llvm] [VPlan] Clean up the function VPInstruction::generate for ComputeReductionResult, nfc (PR #140245)
Mel Chen via llvm-commits
llvm-commits at lists.llvm.org
Fri May 16 05:12:41 PDT 2025
https://github.com/Mel-Chen created https://github.com/llvm/llvm-project/pull/140245
When reducing unrolled parts, explicitly check for min/max reductions using the function RecurrenceDescriptor::isMinMaxRecurrenceKind. Only if the reduction is not min/max reduction, call RecurrenceDescriptor::getOpcode() to handle other cases via CreateBinOp.
Based on https://github.com/llvm/llvm-project/pull/140242
Related to https://github.com/llvm/llvm-project/pull/118393
>From 89255ddf2452489d2b82465b99a690de8356b912 Mon Sep 17 00:00:00 2001
From: Mel Chen <mel.chen at sifive.com>
Date: Fri, 16 May 2025 04:28:20 -0700
Subject: [PATCH 1/3] correct AnyOf opcode, nfc
---
llvm/lib/Analysis/IVDescriptors.cpp | 4 ++--
llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp | 13 +++++--------
2 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/llvm/lib/Analysis/IVDescriptors.cpp b/llvm/lib/Analysis/IVDescriptors.cpp
index a216b0347b9fa..a273338670164 100644
--- a/llvm/lib/Analysis/IVDescriptors.cpp
+++ b/llvm/lib/Analysis/IVDescriptors.cpp
@@ -1154,6 +1154,8 @@ unsigned RecurrenceDescriptor::getOpcode(RecurKind Kind) {
return Instruction::Add;
case RecurKind::Mul:
return Instruction::Mul;
+ case RecurKind::IAnyOf:
+ case RecurKind::FAnyOf:
case RecurKind::Or:
return Instruction::Or;
case RecurKind::And:
@@ -1169,7 +1171,6 @@ unsigned RecurrenceDescriptor::getOpcode(RecurKind Kind) {
case RecurKind::SMin:
case RecurKind::UMax:
case RecurKind::UMin:
- case RecurKind::IAnyOf:
case RecurKind::IFindLastIV:
return Instruction::ICmp;
case RecurKind::FMax:
@@ -1178,7 +1179,6 @@ unsigned RecurrenceDescriptor::getOpcode(RecurKind Kind) {
case RecurKind::FMinimum:
case RecurKind::FMaximumNum:
case RecurKind::FMinimumNum:
- case RecurKind::FAnyOf:
case RecurKind::FFindLastIV:
return Instruction::FCmp;
default:
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index fc1ee89e81c75..845db83c6a8a3 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -678,10 +678,6 @@ Value *VPInstruction::generate(VPTransformState &State) {
}
// Reduce all of the unrolled parts into a single vector.
Value *ReducedPartRdx = RdxParts[0];
- unsigned Op = RdxDesc.getOpcode();
- if (RecurrenceDescriptor::isAnyOfRecurrenceKind(RK))
- Op = Instruction::Or;
-
if (PhiR->isOrdered()) {
ReducedPartRdx = RdxParts[UF - 1];
} else {
@@ -690,11 +686,12 @@ Value *VPInstruction::generate(VPTransformState &State) {
Builder.setFastMathFlags(RdxDesc.getFastMathFlags());
for (unsigned Part = 1; Part < UF; ++Part) {
Value *RdxPart = RdxParts[Part];
- if (Op != Instruction::ICmp && Op != Instruction::FCmp)
- ReducedPartRdx = Builder.CreateBinOp(
- (Instruction::BinaryOps)Op, RdxPart, ReducedPartRdx, "bin.rdx");
- else
+ if (RecurrenceDescriptor::isMinMaxRecurrenceKind(RK))
ReducedPartRdx = createMinMaxOp(Builder, RK, ReducedPartRdx, RdxPart);
+ else
+ ReducedPartRdx =
+ Builder.CreateBinOp((Instruction::BinaryOps)RdxDesc.getOpcode(),
+ RdxPart, ReducedPartRdx, "bin.rdx");
}
}
>From cc312b71020cbdd3605f82401b5b249650dac806 Mon Sep 17 00:00:00 2001
From: Mel Chen <mel.chen at sifive.com>
Date: Fri, 16 May 2025 04:44:58 -0700
Subject: [PATCH 2/3] f
---
llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index 845db83c6a8a3..f77bd8c3c7713 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -678,6 +678,7 @@ Value *VPInstruction::generate(VPTransformState &State) {
}
// Reduce all of the unrolled parts into a single vector.
Value *ReducedPartRdx = RdxParts[0];
+ unsigned Op = RdxDesc.getOpcode();
if (PhiR->isOrdered()) {
ReducedPartRdx = RdxParts[UF - 1];
} else {
@@ -686,12 +687,11 @@ Value *VPInstruction::generate(VPTransformState &State) {
Builder.setFastMathFlags(RdxDesc.getFastMathFlags());
for (unsigned Part = 1; Part < UF; ++Part) {
Value *RdxPart = RdxParts[Part];
- if (RecurrenceDescriptor::isMinMaxRecurrenceKind(RK))
- ReducedPartRdx = createMinMaxOp(Builder, RK, ReducedPartRdx, RdxPart);
+ if (Op != Instruction::ICmp && Op != Instruction::FCmp)
+ ReducedPartRdx = Builder.CreateBinOp(
+ (Instruction::BinaryOps)Op, RdxPart, ReducedPartRdx, "bin.rdx");
else
- ReducedPartRdx =
- Builder.CreateBinOp((Instruction::BinaryOps)RdxDesc.getOpcode(),
- RdxPart, ReducedPartRdx, "bin.rdx");
+ ReducedPartRdx = createMinMaxOp(Builder, RK, ReducedPartRdx, RdxPart);
}
}
>From 061eba38a946a117bdc86540aebcf50931f906b9 Mon Sep 17 00:00:00 2001
From: Mel Chen <mel.chen at sifive.com>
Date: Fri, 16 May 2025 04:55:54 -0700
Subject: [PATCH 3/3] clean up the generate of ComputeReductionResult
---
llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index f77bd8c3c7713..845db83c6a8a3 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -678,7 +678,6 @@ Value *VPInstruction::generate(VPTransformState &State) {
}
// Reduce all of the unrolled parts into a single vector.
Value *ReducedPartRdx = RdxParts[0];
- unsigned Op = RdxDesc.getOpcode();
if (PhiR->isOrdered()) {
ReducedPartRdx = RdxParts[UF - 1];
} else {
@@ -687,11 +686,12 @@ Value *VPInstruction::generate(VPTransformState &State) {
Builder.setFastMathFlags(RdxDesc.getFastMathFlags());
for (unsigned Part = 1; Part < UF; ++Part) {
Value *RdxPart = RdxParts[Part];
- if (Op != Instruction::ICmp && Op != Instruction::FCmp)
- ReducedPartRdx = Builder.CreateBinOp(
- (Instruction::BinaryOps)Op, RdxPart, ReducedPartRdx, "bin.rdx");
- else
+ if (RecurrenceDescriptor::isMinMaxRecurrenceKind(RK))
ReducedPartRdx = createMinMaxOp(Builder, RK, ReducedPartRdx, RdxPart);
+ else
+ ReducedPartRdx =
+ Builder.CreateBinOp((Instruction::BinaryOps)RdxDesc.getOpcode(),
+ RdxPart, ReducedPartRdx, "bin.rdx");
}
}
More information about the llvm-commits
mailing list