[PATCH] D90565: [VPlan] Make VPInstruction a VPDef
Florian Hahn via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Nov 15 05:02:39 PST 2020
fhahn updated this revision to Diff 305351.
fhahn added a comment.
Remove obsolete isVoidTy check.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D90565/new/
https://reviews.llvm.org/D90565
Files:
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/lib/Transforms/Vectorize/VPlan.h
llvm/lib/Transforms/Vectorize/VPlanValue.h
Index: llvm/lib/Transforms/Vectorize/VPlanValue.h
===================================================================
--- llvm/lib/Transforms/Vectorize/VPlanValue.h
+++ llvm/lib/Transforms/Vectorize/VPlanValue.h
@@ -71,10 +71,6 @@
// for multiple underlying IRs (Polly?) by providing a new VPlan front-end,
// back-end and analysis information for the new IR.
- /// Return the underlying Value attached to this VPValue.
- Value *getUnderlyingValue() { return UnderlyingVal; }
- const Value *getUnderlyingValue() const { return UnderlyingVal; }
-
// Set \p Val as the underlying Value of this VPValue.
void setUnderlyingValue(Value *Val) {
assert(!UnderlyingVal && "Underlying Value is already set.");
@@ -82,6 +78,10 @@
}
public:
+ /// Return the underlying Value attached to this VPValue.
+ Value *getUnderlyingValue() { return UnderlyingVal; }
+ const Value *getUnderlyingValue() const { return UnderlyingVal; }
+
/// An enumeration for keeping track of the concrete subclass of VPValue that
/// are actually instantiated. Values of this enumeration are kept in the
/// SubclassID field of the VPValue objects. They are used for concrete
Index: llvm/lib/Transforms/Vectorize/VPlan.h
===================================================================
--- llvm/lib/Transforms/Vectorize/VPlan.h
+++ llvm/lib/Transforms/Vectorize/VPlan.h
@@ -707,7 +707,7 @@
/// While as any Recipe it may generate a sequence of IR instructions when
/// executed, these instructions would always form a single-def expression as
/// the VPInstruction is also a single def-use vertex.
-class VPInstruction : public VPValue, public VPUser, public VPRecipeBase {
+class VPInstruction : public VPRecipeBase, public VPUser, public VPValue {
friend class VPlanSlp;
public:
@@ -733,12 +733,12 @@
public:
VPInstruction(unsigned Opcode, ArrayRef<VPValue *> Operands)
- : VPValue(VPValue::VPInstructionSC), VPUser(Operands),
- VPRecipeBase(VPRecipeBase::VPInstructionSC), Opcode(Opcode) {}
+ : VPRecipeBase(VPRecipeBase::VPInstructionSC), VPUser(Operands),
+ VPValue(VPValue::VPInstructionSC, nullptr, this), Opcode(Opcode) {}
VPInstruction(unsigned Opcode, ArrayRef<VPInstruction *> Operands)
- : VPValue(VPValue::VPInstructionSC), VPUser({}),
- VPRecipeBase(VPRecipeBase::VPInstructionSC), Opcode(Opcode) {
+ : VPRecipeBase(VPRecipeBase::VPInstructionSC), VPUser({}),
+ VPValue(VPValue::VPInstructionSC, nullptr, this), Opcode(Opcode) {
for (auto *I : Operands)
addOperand(I->getVPValue());
}
Index: llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
===================================================================
--- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -7799,14 +7799,12 @@
if (auto Recipe =
RecipeBuilder.tryToCreateWidenRecipe(Instr, Range, Plan)) {
- // Check if the recipe can be converted to a VPValue. We need the extra
- // down-casting step until VPRecipeBase inherits from VPValue.
- VPValue *MaybeVPValue = Recipe->toVPValue();
- if (!Instr->getType()->isVoidTy() && MaybeVPValue) {
- if (NeedDef.contains(Instr))
- Plan->addOrReplaceVPValue(Instr, MaybeVPValue);
+ for (auto *Def : Recipe->definedValues()) {
+ auto *UV = Def->getUnderlyingValue();
+ if (NeedDef.contains(UV))
+ Plan->addOrReplaceVPValue(UV, Def);
else
- Plan->addVPValue(Instr, MaybeVPValue);
+ Plan->addVPValue(UV, Def);
}
RecipeBuilder.setRecipe(Instr, Recipe);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90565.305351.patch
Type: text/x-patch
Size: 3670 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201115/3127a091/attachment.bin>
More information about the llvm-commits
mailing list