Skip to content

Commit 52dbe76

Browse files
committed
[ADT] Make use of subsetOf and anyCommon methods of BitVector (NFC)
Replace the code along these lines BitVector Tmp = LHS; Tmp &= RHS; return Tmp.any(); and BitVector Tmp = LHS; Tmp.reset(RHS); return Tmp.none(); with `LHS.anyCommon(RHS)` and `LHS.subsetOf(RHS)`, correspondingly, which do not require creating temporary BitVector and can return early.
1 parent dcefe31 commit 52dbe76

File tree

8 files changed

+18
-31
lines changed

8 files changed

+18
-31
lines changed

bolt/include/bolt/Passes/LivenessAnalysis.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,9 @@ class LivenessAnalysis : public DataflowAnalysis<LivenessAnalysis, BitVector,
3737
virtual ~LivenessAnalysis();
3838

3939
bool isAlive(ProgramPoint PP, MCPhysReg Reg) const {
40-
BitVector BV = (*this->getStateAt(PP));
40+
const BitVector &BV = *this->getStateAt(PP);
4141
const BitVector &RegAliases = BC.MIB->getAliases(Reg);
42-
BV &= RegAliases;
43-
return BV.any();
42+
return BV.anyCommon(RegAliases);
4443
}
4544

4645
void run() { Parent::run(); }

bolt/include/bolt/Passes/ReachingDefOrUse.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,7 @@ class ReachingDefOrUse
133133
RA.getInstClobberList(Point, Regs);
134134
else
135135
RA.getInstUsedRegsList(Point, Regs, false);
136-
Regs &= this->BC.MIB->getAliases(*TrackingReg);
137-
if (Regs.any())
136+
if (Regs.anyCommon(this->BC.MIB->getAliases(*TrackingReg)))
138137
Next.set(this->ExprToIdx[&Point]);
139138
}
140139
}

bolt/lib/Passes/RegReAssign.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -316,18 +316,14 @@ void RegReAssign::aggressivePassOverFunction(BinaryFunction &Function) {
316316
break;
317317
}
318318

319-
BitVector AnyAliasAlive = AliveAtStart;
320-
AnyAliasAlive &= BC.MIB->getAliases(ClassicReg);
321-
if (AnyAliasAlive.any()) {
319+
if (AliveAtStart.anyCommon(BC.MIB->getAliases(ClassicReg))) {
322320
LLVM_DEBUG(dbgs() << " Bailed on " << BC.MRI->getName(ClassicReg)
323321
<< " with " << BC.MRI->getName(ExtReg)
324322
<< " because classic reg is alive\n");
325323
--End;
326324
continue;
327325
}
328-
AnyAliasAlive = AliveAtStart;
329-
AnyAliasAlive &= BC.MIB->getAliases(ExtReg);
330-
if (AnyAliasAlive.any()) {
326+
if (AliveAtStart.anyCommon(BC.MIB->getAliases(ExtReg))) {
331327
LLVM_DEBUG(dbgs() << " Bailed on " << BC.MRI->getName(ClassicReg)
332328
<< " with " << BC.MRI->getName(ExtReg)
333329
<< " because extended reg is alive\n");

bolt/lib/Passes/ShrinkWrapping.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,19 +1100,17 @@ SmallVector<ProgramPoint, 4> ShrinkWrapping::fixPopsPlacements(
11001100
bool Found = false;
11011101
if (SPT.getStateAt(ProgramPoint::getLastPointAt(*BB))->first ==
11021102
SaveOffset) {
1103-
BitVector BV = *RI.getStateAt(ProgramPoint::getLastPointAt(*BB));
1104-
BV &= UsesByReg[CSR];
1105-
if (!BV.any()) {
1103+
const BitVector &BV = *RI.getStateAt(ProgramPoint::getLastPointAt(*BB));
1104+
if (!BV.anyCommon(UsesByReg[CSR])) {
11061105
Found = true;
11071106
PP = BB;
11081107
continue;
11091108
}
11101109
}
11111110
for (MCInst &Inst : llvm::reverse(*BB)) {
11121111
if (SPT.getStateBefore(Inst)->first == SaveOffset) {
1113-
BitVector BV = *RI.getStateAt(Inst);
1114-
BV &= UsesByReg[CSR];
1115-
if (!BV.any()) {
1112+
const BitVector &BV = *RI.getStateAt(Inst);
1113+
if (!BV.anyCommon(UsesByReg[CSR])) {
11161114
Found = true;
11171115
PP = &Inst;
11181116
break;

bolt/lib/Passes/StackAvailableExpressions.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool StackAvailableExpressions::doesXKillsY(const MCInst *X, const MCInst *Y) {
103103
else
104104
RA.getInstClobberList(*Y, YClobbers);
105105

106-
XClobbers &= YClobbers;
107-
return XClobbers.any();
106+
return XClobbers.anyCommon(YClobbers);
108107
}
109108

110109
BitVector StackAvailableExpressions::computeNext(const MCInst &Point,

bolt/lib/Passes/TailDuplication.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ bool TailDuplication::regIsPossiblyOverwritten(const MCInst &Inst, unsigned Reg,
9797
getCallerSavedRegs(Inst, WrittenRegs, BC);
9898
if (BC.MIB->isRep(Inst))
9999
BC.MIB->getRepRegs(WrittenRegs);
100-
WrittenRegs &= BC.MIB->getAliases(Reg, false);
101-
return WrittenRegs.any();
100+
const BitVector &AllAliases = BC.MIB->getAliases(Reg, false);
101+
return WrittenRegs.anyCommon(AllAliases);
102102
}
103103

104104
bool TailDuplication::regIsDefinitelyOverwritten(const MCInst &Inst,
@@ -117,8 +117,8 @@ bool TailDuplication::regIsUsed(const MCInst &Inst, unsigned Reg,
117117
BinaryContext &BC) const {
118118
BitVector SrcRegs = BitVector(BC.MRI->getNumRegs(), false);
119119
BC.MIB->getSrcRegs(Inst, SrcRegs);
120-
SrcRegs &= BC.MIB->getAliases(Reg, true);
121-
return SrcRegs.any();
120+
const BitVector &SmallerAliases = BC.MIB->getAliases(Reg, true);
121+
return SrcRegs.anyCommon(SmallerAliases);
122122
}
123123

124124
bool TailDuplication::isOverwrittenBeforeUsed(BinaryBasicBlock &StartBB,

llvm/lib/CodeGen/RDFRegisters.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -287,10 +287,8 @@ bool RegisterAggr::hasAliasOf(RegisterRef RR) const {
287287
}
288288

289289
bool RegisterAggr::hasCoverOf(RegisterRef RR) const {
290-
if (RR.isMask()) {
291-
BitVector T(PRI.getMaskUnits(RR));
292-
return T.reset(Units).none();
293-
}
290+
if (RR.isMask())
291+
return PRI.getMaskUnits(RR).subsetOf(Units);
294292

295293
for (MCRegUnitMaskIterator U(RR.asMCReg(), &PRI.getTRI()); U.isValid(); ++U) {
296294
auto [Unit, LaneMask] = *U;

llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,11 +274,9 @@ static Error randomizeMCOperand(const LLVMState &State,
274274
break;
275275
case MCOI::OperandType::OPERAND_REGISTER: {
276276
assert(Op.isReg());
277-
auto AllowedRegs = Op.getRegisterAliasing().sourceBits();
277+
const BitVector &AllowedRegs = Op.getRegisterAliasing().sourceBits();
278278
assert(AllowedRegs.size() == ForbiddenRegs.size());
279-
for (auto I : ForbiddenRegs.set_bits())
280-
AllowedRegs.reset(I);
281-
if (!AllowedRegs.any())
279+
if (AllowedRegs.subsetOf(ForbiddenRegs))
282280
return make_error<Failure>(
283281
Twine("no available registers:\ncandidates:\n")
284282
.concat(debugString(State.getRegInfo(),

0 commit comments

Comments
 (0)