Skip to content

Commit ef9bcc9

Browse files
committed
!fixup address latest comments, thanks
1 parent 6c8ef1f commit ef9bcc9

File tree

5 files changed

+46
-81
lines changed

5 files changed

+46
-81
lines changed

llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8745,7 +8745,6 @@ VPSingleDefRecipe *VPRecipeBuilder::tryToWidenCall(CallInst *CI,
87458745
Range);
87468746
if (ShouldUseVectorIntrinsic)
87478747
return new VPWidenIntrinsicRecipe(*CI, ID, Ops, CI->getType(),
8748-
getMetadataToPropagate(CI),
87498748
CI->getDebugLoc());
87508749

87518750
Function *Variant = nullptr;
@@ -8799,8 +8798,7 @@ VPSingleDefRecipe *VPRecipeBuilder::tryToWidenCall(CallInst *CI,
87998798
}
88008799

88018800
Ops.push_back(Operands.back());
8802-
return new VPWidenCallRecipe(CI, Variant, Ops, getMetadataToPropagate(CI),
8803-
CI->getDebugLoc());
8801+
return new VPWidenCallRecipe(CI, Variant, Ops, CI->getDebugLoc());
88048802
}
88058803

88068804
return nullptr;
@@ -8838,8 +8836,7 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
88388836
Plan.getOrAddLiveIn(ConstantInt::get(I->getType(), 1u, false));
88398837
auto *SafeRHS = Builder.createSelect(Mask, Ops[1], One, I->getDebugLoc());
88408838
Ops[1] = SafeRHS;
8841-
return new VPWidenRecipe(*I, make_range(Ops.begin(), Ops.end()),
8842-
getMetadataToPropagate(I));
8839+
return new VPWidenRecipe(*I, make_range(Ops.begin(), Ops.end()));
88438840
}
88448841
[[fallthrough]];
88458842
}
@@ -8885,8 +8882,7 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
88858882
// For other binops, the legacy cost model only checks the second operand.
88868883
NewOps[1] = GetConstantViaSCEV(NewOps[1]);
88878884
}
8888-
return new VPWidenRecipe(*I, make_range(NewOps.begin(), NewOps.end()),
8889-
getMetadataToPropagate(I));
8885+
return new VPWidenRecipe(*I, make_range(NewOps.begin(), NewOps.end()));
88908886
}
88918887
case Instruction::ExtractValue: {
88928888
SmallVector<VPValue *> NewOps(Operands);
@@ -8895,8 +8891,7 @@ VPWidenRecipe *VPRecipeBuilder::tryToWiden(Instruction *I,
88958891
assert(EVI->getNumIndices() == 1 && "Expected one extractvalue index");
88968892
unsigned Idx = EVI->getIndices()[0];
88978893
NewOps.push_back(Plan.getOrAddLiveIn(ConstantInt::get(I32Ty, Idx, false)));
8898-
return new VPWidenRecipe(*I, make_range(NewOps.begin(), NewOps.end()),
8899-
getMetadataToPropagate(I));
8894+
return new VPWidenRecipe(*I, make_range(NewOps.begin(), NewOps.end()));
89008895
}
89018896
};
89028897
}
@@ -9101,13 +9096,6 @@ bool VPRecipeBuilder::getScaledReductions(
91019096
return false;
91029097
}
91039098

9104-
SmallVector<std::pair<unsigned, MDNode *>>
9105-
VPRecipeBuilder::getMetadataToPropagate(Instruction *I) {
9106-
SmallVector<std::pair<unsigned, MDNode *>> Metadata;
9107-
::getMetadataToPropagate(I, Metadata);
9108-
return Metadata;
9109-
}
9110-
91119099
VPRecipeBase *VPRecipeBuilder::tryToCreateWidenRecipe(
91129100
Instruction *Instr, ArrayRef<VPValue *> Operands, VFRange &Range) {
91139101
// First, check for specific widening recipes that deal with inductions, Phi
@@ -9180,14 +9168,13 @@ VPRecipeBase *VPRecipeBuilder::tryToCreateWidenRecipe(
91809168
make_range(Operands.begin(), Operands.end()));
91819169

91829170
if (auto *SI = dyn_cast<SelectInst>(Instr)) {
9183-
return new VPWidenSelectRecipe(*SI,
9184-
make_range(Operands.begin(), Operands.end()),
9185-
getMetadataToPropagate(SI));
9171+
return new VPWidenSelectRecipe(
9172+
*SI, make_range(Operands.begin(), Operands.end()));
91869173
}
91879174

91889175
if (auto *CI = dyn_cast<CastInst>(Instr)) {
91899176
return new VPWidenCastRecipe(CI->getOpcode(), Operands[0], CI->getType(),
9190-
*CI, getMetadataToPropagate(CI));
9177+
*CI);
91919178
}
91929179

91939180
return tryToWiden(Instr, Operands);
@@ -9213,8 +9200,7 @@ VPRecipeBuilder::tryToCreatePartialReduction(Instruction *Reduction,
92139200
SmallVector<VPValue *, 2> Ops;
92149201
Ops.push_back(Plan.getOrAddLiveIn(Zero));
92159202
Ops.push_back(BinOp);
9216-
BinOp = new VPWidenRecipe(*Reduction, make_range(Ops.begin(), Ops.end()),
9217-
getMetadataToPropagate(Reduction));
9203+
BinOp = new VPWidenRecipe(*Reduction, make_range(Ops.begin(), Ops.end()));
92189204
Builder.insert(BinOp->getDefiningRecipe());
92199205
ReductionOpcode = Instruction::Add;
92209206
}

llvm/lib/Transforms/Vectorize/VPRecipeBuilder.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,11 +233,6 @@ class VPRecipeBuilder {
233233
}
234234
return Plan.getOrAddLiveIn(V);
235235
}
236-
237-
/// Returns the metatadata that can be preserved from the original instruction
238-
/// \p I, including noalias metadata guaranteed by runtime checks.
239-
static SmallVector<std::pair<unsigned, MDNode *>>
240-
getMetadataToPropagate(Instruction *I);
241236
};
242237
} // end namespace llvm
243238

llvm/lib/Transforms/Vectorize/VPlan.h

Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,23 +1190,18 @@ struct VPIRPhi : public VPIRInstruction {
11901190
#endif
11911191
};
11921192

1193-
using MDArrayRef = ArrayRef<std::pair<unsigned, MDNode *>>;
1194-
11951193
/// Helper to manage IR metadata for recipes. It filters out metadata that
11961194
/// cannot be proagated.
11971195
class VPIRMetadata {
11981196
SmallVector<std::pair<unsigned, MDNode *>> Metadata;
11991197

12001198
protected:
1201-
VPIRMetadata(MDArrayRef Metadata) : Metadata(Metadata) {}
1199+
VPIRMetadata() {}
12021200
VPIRMetadata(Instruction &I) { getMetadataToPropagate(&I, Metadata); }
12031201

12041202
public:
12051203
/// Add all metadata to \p I.
12061204
void applyMetadata(Instruction &I) const;
1207-
1208-
/// Return the IR metadata.
1209-
MDArrayRef getMetadata() const { return Metadata; }
12101205
};
12111206

12121207
/// VPWidenRecipe is a recipe for producing a widened instruction using the
@@ -1219,21 +1214,19 @@ class VPWidenRecipe : public VPRecipeWithIRFlags, public VPIRMetadata {
12191214
protected:
12201215
template <typename IterT>
12211216
VPWidenRecipe(unsigned VPDefOpcode, Instruction &I,
1222-
iterator_range<IterT> Operands, MDArrayRef Metadata)
1223-
: VPRecipeWithIRFlags(VPDefOpcode, Operands, I), VPIRMetadata(Metadata),
1217+
iterator_range<IterT> Operands)
1218+
: VPRecipeWithIRFlags(VPDefOpcode, Operands, I), VPIRMetadata(I),
12241219
Opcode(I.getOpcode()) {}
12251220

12261221
public:
12271222
template <typename IterT>
1228-
VPWidenRecipe(Instruction &I, iterator_range<IterT> Operands,
1229-
MDArrayRef Metadata)
1230-
: VPWidenRecipe(VPDef::VPWidenSC, I, Operands, Metadata) {}
1223+
VPWidenRecipe(Instruction &I, iterator_range<IterT> Operands)
1224+
: VPWidenRecipe(VPDef::VPWidenSC, I, Operands) {}
12311225

12321226
~VPWidenRecipe() override = default;
12331227

12341228
VPWidenRecipe *clone() override {
1235-
auto *R =
1236-
new VPWidenRecipe(*getUnderlyingInstr(), operands(), getMetadata());
1229+
auto *R = new VPWidenRecipe(*getUnderlyingInstr(), operands());
12371230
R->transferFlags(*this);
12381231
return R;
12391232
}
@@ -1267,23 +1260,23 @@ class VPWidenCastRecipe : public VPRecipeWithIRFlags, public VPIRMetadata {
12671260

12681261
public:
12691262
VPWidenCastRecipe(Instruction::CastOps Opcode, VPValue *Op, Type *ResultTy,
1270-
CastInst &UI, MDArrayRef Metadata)
1271-
: VPRecipeWithIRFlags(VPDef::VPWidenCastSC, Op, UI),
1272-
VPIRMetadata(Metadata), Opcode(Opcode), ResultTy(ResultTy) {
1263+
CastInst &UI)
1264+
: VPRecipeWithIRFlags(VPDef::VPWidenCastSC, Op, UI), VPIRMetadata(UI),
1265+
Opcode(Opcode), ResultTy(ResultTy) {
12731266
assert(UI.getOpcode() == Opcode &&
12741267
"opcode of underlying cast doesn't match");
12751268
}
12761269

12771270
VPWidenCastRecipe(Instruction::CastOps Opcode, VPValue *Op, Type *ResultTy)
1278-
: VPRecipeWithIRFlags(VPDef::VPWidenCastSC, Op), VPIRMetadata({}),
1271+
: VPRecipeWithIRFlags(VPDef::VPWidenCastSC, Op), VPIRMetadata(),
12791272
Opcode(Opcode), ResultTy(ResultTy) {}
12801273

12811274
~VPWidenCastRecipe() override = default;
12821275

12831276
VPWidenCastRecipe *clone() override {
12841277
if (auto *UV = getUnderlyingValue())
12851278
return new VPWidenCastRecipe(Opcode, getOperand(0), ResultTy,
1286-
*cast<CastInst>(UV), getMetadata());
1279+
*cast<CastInst>(UV));
12871280

12881281
return new VPWidenCastRecipe(Opcode, getOperand(0), ResultTy);
12891282
}
@@ -1329,18 +1322,18 @@ class VPWidenIntrinsicRecipe : public VPRecipeWithIRFlags, public VPIRMetadata {
13291322
public:
13301323
VPWidenIntrinsicRecipe(CallInst &CI, Intrinsic::ID VectorIntrinsicID,
13311324
ArrayRef<VPValue *> CallArguments, Type *Ty,
1332-
MDArrayRef Metadata, DebugLoc DL = {})
1325+
DebugLoc DL = {})
13331326
: VPRecipeWithIRFlags(VPDef::VPWidenIntrinsicSC, CallArguments, CI),
1334-
VPIRMetadata(Metadata), VectorIntrinsicID(VectorIntrinsicID),
1335-
ResultTy(Ty), MayReadFromMemory(CI.mayReadFromMemory()),
1327+
VPIRMetadata(CI), VectorIntrinsicID(VectorIntrinsicID), ResultTy(Ty),
1328+
MayReadFromMemory(CI.mayReadFromMemory()),
13361329
MayWriteToMemory(CI.mayWriteToMemory()),
13371330
MayHaveSideEffects(CI.mayHaveSideEffects()) {}
13381331

13391332
VPWidenIntrinsicRecipe(Intrinsic::ID VectorIntrinsicID,
13401333
ArrayRef<VPValue *> CallArguments, Type *Ty,
13411334
DebugLoc DL = {})
13421335
: VPRecipeWithIRFlags(VPDef::VPWidenIntrinsicSC, CallArguments, DL),
1343-
VPIRMetadata({}), VectorIntrinsicID(VectorIntrinsicID), ResultTy(Ty) {
1336+
VPIRMetadata(), VectorIntrinsicID(VectorIntrinsicID), ResultTy(Ty) {
13441337
LLVMContext &Ctx = Ty->getContext();
13451338
AttributeSet Attrs = Intrinsic::getFnAttributes(Ctx, VectorIntrinsicID);
13461339
MemoryEffects ME = Attrs.getMemoryEffects();
@@ -1356,7 +1349,7 @@ class VPWidenIntrinsicRecipe : public VPRecipeWithIRFlags, public VPIRMetadata {
13561349
VPWidenIntrinsicRecipe *clone() override {
13571350
return new VPWidenIntrinsicRecipe(*cast<CallInst>(getUnderlyingValue()),
13581351
VectorIntrinsicID, {op_begin(), op_end()},
1359-
ResultTy, getMetadata(), getDebugLoc());
1352+
ResultTy, getDebugLoc());
13601353
}
13611354

13621355
VP_CLASSOF_IMPL(VPDef::VPWidenIntrinsicSC)
@@ -1404,11 +1397,10 @@ class VPWidenCallRecipe : public VPRecipeWithIRFlags, public VPIRMetadata {
14041397

14051398
public:
14061399
VPWidenCallRecipe(Value *UV, Function *Variant,
1407-
ArrayRef<VPValue *> CallArguments, MDArrayRef Metadata,
1408-
DebugLoc DL = {})
1400+
ArrayRef<VPValue *> CallArguments, DebugLoc DL = {})
14091401
: VPRecipeWithIRFlags(VPDef::VPWidenCallSC, CallArguments,
14101402
*cast<Instruction>(UV)),
1411-
VPIRMetadata(Metadata), Variant(Variant) {
1403+
VPIRMetadata(*cast<Instruction>(UV)), Variant(Variant) {
14121404
assert(
14131405
isa<Function>(getOperand(getNumOperands() - 1)->getLiveInIRValue()) &&
14141406
"last operand must be the called function");
@@ -1418,8 +1410,7 @@ class VPWidenCallRecipe : public VPRecipeWithIRFlags, public VPIRMetadata {
14181410

14191411
VPWidenCallRecipe *clone() override {
14201412
return new VPWidenCallRecipe(getUnderlyingValue(), Variant,
1421-
{op_begin(), op_end()}, getMetadata(),
1422-
getDebugLoc());
1413+
{op_begin(), op_end()}, getDebugLoc());
14231414
}
14241415

14251416
VP_CLASSOF_IMPL(VPDef::VPWidenCallSC)
@@ -1497,16 +1488,15 @@ class VPHistogramRecipe : public VPRecipeBase {
14971488
/// A recipe for widening select instructions.
14981489
struct VPWidenSelectRecipe : public VPRecipeWithIRFlags, public VPIRMetadata {
14991490
template <typename IterT>
1500-
VPWidenSelectRecipe(SelectInst &I, iterator_range<IterT> Operands,
1501-
MDArrayRef Metadata)
1491+
VPWidenSelectRecipe(SelectInst &I, iterator_range<IterT> Operands)
15021492
: VPRecipeWithIRFlags(VPDef::VPWidenSelectSC, Operands, I),
1503-
VPIRMetadata(Metadata) {}
1493+
VPIRMetadata(I) {}
15041494

15051495
~VPWidenSelectRecipe() override = default;
15061496

15071497
VPWidenSelectRecipe *clone() override {
15081498
return new VPWidenSelectRecipe(*cast<SelectInst>(getUnderlyingInstr()),
1509-
operands(), getMetadata());
1499+
operands());
15101500
}
15111501

15121502
VP_CLASSOF_IMPL(VPDef::VPWidenSelectSC)
@@ -2718,10 +2708,9 @@ struct VPWidenLoadRecipe final : public VPWidenMemoryRecipe, public VPValue {
27182708
}
27192709

27202710
VPWidenLoadRecipe *clone() override {
2721-
auto *Copy =
2722-
new VPWidenLoadRecipe(cast<LoadInst>(Ingredient), getAddr(), getMask(),
2723-
Consecutive, Reverse, getDebugLoc());
2724-
return Copy;
2711+
return new VPWidenLoadRecipe(cast<LoadInst>(Ingredient), getAddr(),
2712+
getMask(), Consecutive, Reverse,
2713+
getDebugLoc());
27252714
}
27262715

27272716
VP_CLASSOF_IMPL(VPDef::VPWidenLoadSC);
@@ -2796,10 +2785,9 @@ struct VPWidenStoreRecipe final : public VPWidenMemoryRecipe {
27962785
}
27972786

27982787
VPWidenStoreRecipe *clone() override {
2799-
auto *Copy = new VPWidenStoreRecipe(cast<StoreInst>(Ingredient), getAddr(),
2800-
getStoredValue(), getMask(),
2801-
Consecutive, Reverse, getDebugLoc());
2802-
return Copy;
2788+
return new VPWidenStoreRecipe(cast<StoreInst>(Ingredient), getAddr(),
2789+
getStoredValue(), getMask(), Consecutive,
2790+
Reverse, getDebugLoc());
28032791
}
28042792

28052793
VP_CLASSOF_IMPL(VPDef::VPWidenStoreSC);

llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ bool VPlanTransforms::tryToConvertVPInstructionsToVPRecipes(
7070
NewRecipe = new VPWidenIntOrFpInductionRecipe(
7171
Phi, Start, Step, &Plan->getVF(), *II, Ingredient.getDebugLoc());
7272
} else {
73-
auto Metadata = VPRecipeBuilder::getMetadataToPropagate(Inst);
7473
assert(isa<VPInstruction>(&Ingredient) &&
7574
"only VPInstructions expected here");
7675
assert(!isa<PHINode>(Inst) && "phis should be handled above");
@@ -94,16 +93,14 @@ bool VPlanTransforms::tryToConvertVPInstructionsToVPRecipes(
9493
NewRecipe = new VPWidenIntrinsicRecipe(
9594
*CI, getVectorIntrinsicIDForCall(CI, &TLI),
9695
{Ingredient.op_begin(), Ingredient.op_end() - 1}, CI->getType(),
97-
Metadata, CI->getDebugLoc());
96+
CI->getDebugLoc());
9897
} else if (SelectInst *SI = dyn_cast<SelectInst>(Inst)) {
99-
NewRecipe =
100-
new VPWidenSelectRecipe(*SI, Ingredient.operands(), Metadata);
98+
NewRecipe = new VPWidenSelectRecipe(*SI, Ingredient.operands());
10199
} else if (auto *CI = dyn_cast<CastInst>(Inst)) {
102-
NewRecipe =
103-
new VPWidenCastRecipe(CI->getOpcode(), Ingredient.getOperand(0),
104-
CI->getType(), *CI, Metadata);
100+
NewRecipe = new VPWidenCastRecipe(
101+
CI->getOpcode(), Ingredient.getOperand(0), CI->getType(), *CI);
105102
} else {
106-
NewRecipe = new VPWidenRecipe(*Inst, Ingredient.operands(), Metadata);
103+
NewRecipe = new VPWidenRecipe(*Inst, Ingredient.operands());
107104
}
108105
}
109106

llvm/unittests/Transforms/Vectorize/VPlanTest.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -929,7 +929,7 @@ TEST_F(VPRecipeTest, CastVPWidenRecipeToVPUser) {
929929
SmallVector<VPValue *, 2> Args;
930930
Args.push_back(Op1);
931931
Args.push_back(Op2);
932-
VPWidenRecipe WidenR(*AI, make_range(Args.begin(), Args.end()), {});
932+
VPWidenRecipe WidenR(*AI, make_range(Args.begin(), Args.end()));
933933
EXPECT_TRUE(isa<VPUser>(&WidenR));
934934
VPRecipeBase *WidenRBase = &WidenR;
935935
EXPECT_TRUE(isa<VPUser>(WidenRBase));
@@ -978,7 +978,7 @@ TEST_F(VPRecipeTest, CastVPWidenSelectRecipeToVPUserAndVPDef) {
978978
Args.push_back(Op2);
979979
Args.push_back(Op3);
980980
VPWidenSelectRecipe WidenSelectR(*SelectI,
981-
make_range(Args.begin(), Args.end()), {});
981+
make_range(Args.begin(), Args.end()));
982982
EXPECT_TRUE(isa<VPUser>(&WidenSelectR));
983983
VPRecipeBase *BaseR = &WidenSelectR;
984984
EXPECT_TRUE(isa<VPUser>(BaseR));
@@ -1111,7 +1111,7 @@ TEST_F(VPRecipeTest, MayHaveSideEffectsAndMayReadWriteMemory) {
11111111
SmallVector<VPValue *, 2> Args;
11121112
Args.push_back(Op1);
11131113
Args.push_back(Op2);
1114-
VPWidenRecipe Recipe(*AI, make_range(Args.begin(), Args.end()), {});
1114+
VPWidenRecipe Recipe(*AI, make_range(Args.begin(), Args.end()));
11151115
EXPECT_FALSE(Recipe.mayHaveSideEffects());
11161116
EXPECT_FALSE(Recipe.mayReadFromMemory());
11171117
EXPECT_FALSE(Recipe.mayWriteToMemory());
@@ -1130,8 +1130,7 @@ TEST_F(VPRecipeTest, MayHaveSideEffectsAndMayReadWriteMemory) {
11301130
Args.push_back(Op1);
11311131
Args.push_back(Op2);
11321132
Args.push_back(Op3);
1133-
VPWidenSelectRecipe Recipe(*SelectI, make_range(Args.begin(), Args.end()),
1134-
{});
1133+
VPWidenSelectRecipe Recipe(*SelectI, make_range(Args.begin(), Args.end()));
11351134
EXPECT_FALSE(Recipe.mayHaveSideEffects());
11361135
EXPECT_FALSE(Recipe.mayReadFromMemory());
11371136
EXPECT_FALSE(Recipe.mayWriteToMemory());
@@ -1315,7 +1314,7 @@ TEST_F(VPRecipeTest, dumpRecipeInPlan) {
13151314
Args.push_back(ExtVPV1);
13161315
Args.push_back(ExtVPV2);
13171316
VPWidenRecipe *WidenR =
1318-
new VPWidenRecipe(*AI, make_range(Args.begin(), Args.end()), {});
1317+
new VPWidenRecipe(*AI, make_range(Args.begin(), Args.end()));
13191318
VPBB1->appendRecipe(WidenR);
13201319

13211320
{

0 commit comments

Comments
 (0)