Skip to content

Commit 6551cfa

Browse files
committed
[CodeGen] Set regunitmasks for leaf regs to all instead of none
This simplifies every use of MCRegUnitMaskIterator. Differential Revision: https://reviews.llvm.org/D157864
1 parent 2e7ee4d commit 6551cfa

File tree

5 files changed

+14
-40
lines changed

5 files changed

+14
-40
lines changed

llvm/include/llvm/CodeGen/LiveRegUnits.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class LiveRegUnits {
9393
void addRegMasked(MCPhysReg Reg, LaneBitmask Mask) {
9494
for (MCRegUnitMaskIterator Unit(Reg, TRI); Unit.isValid(); ++Unit) {
9595
LaneBitmask UnitMask = (*Unit).second;
96-
if (UnitMask.none() || (UnitMask & Mask).any())
96+
if ((UnitMask & Mask).any())
9797
Units.set((*Unit).first);
9898
}
9999
}

llvm/lib/CodeGen/MachineSink.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1704,10 +1704,9 @@ static void updateLiveIn(MachineInstr *MI, MachineBasicBlock *SuccBB,
17041704
for (auto U : UsedOpsInCopy) {
17051705
Register SrcReg = MI->getOperand(U).getReg();
17061706
LaneBitmask Mask;
1707-
for (MCRegUnitMaskIterator S(SrcReg, TRI); S.isValid(); ++S) {
1707+
for (MCRegUnitMaskIterator S(SrcReg, TRI); S.isValid(); ++S)
17081708
Mask |= (*S).second;
1709-
}
1710-
SuccBB->addLiveIn(SrcReg, Mask.any() ? Mask : LaneBitmask::getAll());
1709+
SuccBB->addLiveIn(SrcReg, Mask);
17111710
}
17121711
SuccBB->sortUniqueLiveIns();
17131712
}

llvm/lib/CodeGen/RDFRegisters.cpp

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,7 @@ PhysicalRegisterInfo::PhysicalRegisterInfo(const TargetRegisterInfo &tri,
6161
std::pair<uint32_t, LaneBitmask> P = *I;
6262
UnitInfo &UI = UnitInfos[P.first];
6363
UI.Reg = F;
64-
if (P.second.any()) {
65-
UI.Mask = P.second;
66-
} else {
67-
if (const TargetRegisterClass *RC = RegInfos[F].RegClass)
68-
UI.Mask = RC->LaneMask;
69-
else
70-
UI.Mask = LaneBitmask::getAll();
71-
}
64+
UI.Mask = P.second;
7265
}
7366
}
7467
}
@@ -141,7 +134,7 @@ std::set<RegisterId> PhysicalRegisterInfo::getUnits(RegisterRef RR) const {
141134
return Units; // Empty
142135
for (MCRegUnitMaskIterator UM(RR.idx(), &TRI); UM.isValid(); ++UM) {
143136
auto [U, M] = *UM;
144-
if (M.none() || (M & RR.Mask).any())
137+
if ((M & RR.Mask).any())
145138
Units.insert(U);
146139
}
147140
return Units;
@@ -200,13 +193,6 @@ bool PhysicalRegisterInfo::equal_to(RegisterRef A, RegisterRef B) const {
200193
auto [AReg, AMask] = *AI;
201194
auto [BReg, BMask] = *BI;
202195

203-
// Lane masks are "none" for units that don't correspond to subregs
204-
// e.g. a single unit in a leaf register, or aliased unit.
205-
if (AMask.none())
206-
AMask = LaneBitmask::getAll();
207-
if (BMask.none())
208-
BMask = LaneBitmask::getAll();
209-
210196
// If both iterators point to a unit contained in both A and B, then
211197
// compare the units.
212198
if ((AMask & A.Mask).any() && (BMask & B.Mask).any()) {
@@ -245,13 +231,6 @@ bool PhysicalRegisterInfo::less(RegisterRef A, RegisterRef B) const {
245231
auto [AReg, AMask] = *AI;
246232
auto [BReg, BMask] = *BI;
247233

248-
// Lane masks are "none" for units that don't correspond to subregs
249-
// e.g. a single unit in a leaf register, or aliased unit.
250-
if (AMask.none())
251-
AMask = LaneBitmask::getAll();
252-
if (BMask.none())
253-
BMask = LaneBitmask::getAll();
254-
255234
// If both iterators point to a unit contained in both A and B, then
256235
// compare the units.
257236
if ((AMask & A.Mask).any() && (BMask & B.Mask).any()) {
@@ -303,7 +282,7 @@ bool RegisterAggr::hasAliasOf(RegisterRef RR) const {
303282

304283
for (MCRegUnitMaskIterator U(RR.Reg, &PRI.getTRI()); U.isValid(); ++U) {
305284
std::pair<uint32_t, LaneBitmask> P = *U;
306-
if (P.second.none() || (P.second & RR.Mask).any())
285+
if ((P.second & RR.Mask).any())
307286
if (Units.test(P.first))
308287
return true;
309288
}
@@ -318,7 +297,7 @@ bool RegisterAggr::hasCoverOf(RegisterRef RR) const {
318297

319298
for (MCRegUnitMaskIterator U(RR.Reg, &PRI.getTRI()); U.isValid(); ++U) {
320299
std::pair<uint32_t, LaneBitmask> P = *U;
321-
if (P.second.none() || (P.second & RR.Mask).any())
300+
if ((P.second & RR.Mask).any())
322301
if (!Units.test(P.first))
323302
return false;
324303
}
@@ -333,7 +312,7 @@ RegisterAggr &RegisterAggr::insert(RegisterRef RR) {
333312

334313
for (MCRegUnitMaskIterator U(RR.Reg, &PRI.getTRI()); U.isValid(); ++U) {
335314
std::pair<uint32_t, LaneBitmask> P = *U;
336-
if (P.second.none() || (P.second & RR.Mask).any())
315+
if ((P.second & RR.Mask).any())
337316
Units.set(P.first);
338317
}
339318
return *this;
@@ -407,7 +386,7 @@ RegisterRef RegisterAggr::makeRegRef() const {
407386
for (MCRegUnitMaskIterator I(F, &PRI.getTRI()); I.isValid(); ++I) {
408387
std::pair<uint32_t, LaneBitmask> P = *I;
409388
if (Units.test(P.first))
410-
M |= P.second.none() ? LaneBitmask::getAll() : P.second;
389+
M |= P.second;
411390
}
412391
return RegisterRef(F, M);
413392
}

llvm/utils/TableGen/CodeGenRegisters.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2123,8 +2123,8 @@ void CodeGenRegBank::computeRegUnitLaneMasks() {
21232123
for (auto &Register : Registers) {
21242124
// Create an initial lane mask for all register units.
21252125
const auto &RegUnits = Register.getRegUnits();
2126-
CodeGenRegister::RegUnitLaneMaskList
2127-
RegUnitLaneMasks(RegUnits.count(), LaneBitmask::getNone());
2126+
CodeGenRegister::RegUnitLaneMaskList RegUnitLaneMasks(
2127+
RegUnits.count(), LaneBitmask::getAll());
21282128
// Iterate through SubRegisters.
21292129
typedef CodeGenRegister::SubRegMap SubRegMap;
21302130
const SubRegMap &SubRegs = Register.getSubRegs();
@@ -2143,7 +2143,7 @@ void CodeGenRegBank::computeRegUnitLaneMasks() {
21432143
unsigned u = 0;
21442144
for (unsigned RU : RegUnits) {
21452145
if (SUI == RU) {
2146-
RegUnitLaneMasks[u] |= LaneMask;
2146+
RegUnitLaneMasks[u] &= LaneMask;
21472147
assert(!Found);
21482148
Found = true;
21492149
}

llvm/utils/TableGen/RegisterInfoEmitter.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -931,12 +931,6 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
931931
MaskVec &LaneMaskVec = RegUnitLaneMasks[i];
932932
assert(LaneMaskVec.empty());
933933
llvm::append_range(LaneMaskVec, RUMasks);
934-
// Terminator mask should not be used inside of the list.
935-
#ifndef NDEBUG
936-
for (LaneBitmask M : LaneMaskVec) {
937-
assert(!M.all() && "terminator mask should not be part of the list");
938-
}
939-
#endif
940934
LaneMaskSeqs.add(LaneMaskVec);
941935
}
942936

@@ -956,6 +950,8 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
956950

957951
// Emit the shared table of regunit lane mask sequences.
958952
OS << "extern const LaneBitmask " << TargetName << "LaneMaskLists[] = {\n";
953+
// TODO: Omit the terminator since it is never used. The length of this list
954+
// is known implicitly from the corresponding reg unit list.
959955
LaneMaskSeqs.emit(OS, printMask, "LaneBitmask::getAll()");
960956
OS << "};\n\n";
961957

0 commit comments

Comments
 (0)