Skip to content

Commit f76dae1

Browse files
committed
[VPlan] Only store single scalar array per VPValue in VPTransState (NFC)
After 8ec4067 (#95842), VPTransformState only stores a single scalar vector per VPValue. Simplify the code by replacing the nested SmallVector in PerPartScalars with a single SmallVector and rename to VPV2Scalars for clarity.
1 parent 8be6b10 commit f76dae1

File tree

2 files changed

+13
-22
lines changed

2 files changed

+13
-22
lines changed

llvm/lib/Transforms/Vectorize/VPlan.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,13 +233,12 @@ Value *VPTransformState::get(VPValue *Def, const VPIteration &Instance) {
233233
return Def->getLiveInIRValue();
234234

235235
if (hasScalarValue(Def, Instance)) {
236-
return Data
237-
.PerPartScalars[Def][Instance.Part][Instance.Lane.mapToCacheIndex(VF)];
236+
return Data.VPV2Scalars[Def][Instance.Lane.mapToCacheIndex(VF)];
238237
}
239238
if (!Instance.Lane.isFirstLane() &&
240239
vputils::isUniformAfterVectorization(Def) &&
241240
hasScalarValue(Def, {Instance.Part, VPLane::getFirstLane()})) {
242-
return Data.PerPartScalars[Def][Instance.Part][0];
241+
return Data.VPV2Scalars[Def][0];
243242
}
244243

245244
assert(hasVectorValue(Def));
@@ -260,7 +259,7 @@ Value *VPTransformState::get(VPValue *Def, bool NeedsScalar) {
260259
assert((VF.isScalar() || Def->isLiveIn() || hasVectorValue(Def) ||
261260
!vputils::onlyFirstLaneUsed(Def) ||
262261
(hasScalarValue(Def, VPIteration(0, 0)) &&
263-
Data.PerPartScalars[Def][0].size() == 1)) &&
262+
Data.VPV2Scalars[Def].size() == 1)) &&
264263
"Trying to access a single scalar per part but has multiple scalars "
265264
"per part.");
266265
return get(Def, VPIteration(0, 0));

llvm/lib/Transforms/Vectorize/VPlan.h

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,7 @@ struct VPTransformState {
267267
// vector value in the map.
268268
DenseMap<VPValue *, Value *> VPV2Vector;
269269

270-
using ScalarsPerPartValuesTy = SmallVector<SmallVector<Value *, 4>, 2>;
271-
DenseMap<VPValue *, ScalarsPerPartValuesTy> PerPartScalars;
270+
DenseMap<VPValue *, SmallVector<Value *, 4>> VPV2Scalars;
272271
} Data;
273272

274273
/// Get the generated vector Value for a given VPValue \p Def if \p IsScalar
@@ -281,13 +280,11 @@ struct VPTransformState {
281280
bool hasVectorValue(VPValue *Def) { return Data.VPV2Vector.contains(Def); }
282281

283282
bool hasScalarValue(VPValue *Def, VPIteration Instance) {
284-
auto I = Data.PerPartScalars.find(Def);
285-
if (I == Data.PerPartScalars.end())
283+
auto I = Data.VPV2Scalars.find(Def);
284+
if (I == Data.VPV2Scalars.end())
286285
return false;
287286
unsigned CacheIdx = Instance.Lane.mapToCacheIndex(VF);
288-
return Instance.Part < I->second.size() &&
289-
CacheIdx < I->second[Instance.Part].size() &&
290-
I->second[Instance.Part][CacheIdx];
287+
return CacheIdx < I->second.size() && I->second[CacheIdx];
291288
}
292289

293290
/// Set the generated vector Value for a given VPValue, if \p
@@ -310,11 +307,8 @@ struct VPTransformState {
310307

311308
/// Set the generated scalar \p V for \p Def and the given \p Instance.
312309
void set(VPValue *Def, Value *V, const VPIteration &Instance) {
313-
auto Iter = Data.PerPartScalars.insert({Def, {}});
314-
auto &PerPartVec = Iter.first->second;
315-
if (PerPartVec.size() <= Instance.Part)
316-
PerPartVec.resize(Instance.Part + 1);
317-
auto &Scalars = PerPartVec[Instance.Part];
310+
auto Iter = Data.VPV2Scalars.insert({Def, {}});
311+
auto &Scalars = Iter.first->second;
318312
unsigned CacheIdx = Instance.Lane.mapToCacheIndex(VF);
319313
if (Scalars.size() <= CacheIdx)
320314
Scalars.resize(CacheIdx + 1);
@@ -324,15 +318,13 @@ struct VPTransformState {
324318

325319
/// Reset an existing scalar value for \p Def and a given \p Instance.
326320
void reset(VPValue *Def, Value *V, const VPIteration &Instance) {
327-
auto Iter = Data.PerPartScalars.find(Def);
328-
assert(Iter != Data.PerPartScalars.end() &&
329-
"need to overwrite existing value");
330-
assert(Instance.Part < Iter->second.size() &&
321+
auto Iter = Data.VPV2Scalars.find(Def);
322+
assert(Iter != Data.VPV2Scalars.end() &&
331323
"need to overwrite existing value");
332324
unsigned CacheIdx = Instance.Lane.mapToCacheIndex(VF);
333-
assert(CacheIdx < Iter->second[Instance.Part].size() &&
325+
assert(CacheIdx < Iter->second.size() &&
334326
"need to overwrite existing value");
335-
Iter->second[Instance.Part][CacheIdx] = V;
327+
Iter->second[CacheIdx] = V;
336328
}
337329

338330
/// Add additional metadata to \p To that was not present on \p Orig.

0 commit comments

Comments
 (0)