@@ -293,7 +293,7 @@ void LinearScan::updateNextFixedRef(RegRecord* regRecord, RefPosition* nextRefPo
293
293
}
294
294
else
295
295
{
296
- fixedRegs |= genRegMask (regRecord->regNum);
296
+ fixedRegs.AddRegNumInMask (regRecord->regNum);
297
297
}
298
298
299
299
nextFixedRef[regRecord->regNum] = nextLocation;
@@ -4081,7 +4081,7 @@ void LinearScan::spillGCRefs(RefPosition* killRefPosition)
4081
4081
{
4082
4082
// For each physical register that can hold a GC type,
4083
4083
// if it is occupied by an interval of a GC type, spill that interval.
4084
- regMaskTP candidateRegs = killRefPosition->registerAssignment;
4084
+ SingleTypeRegSet candidateRegs = killRefPosition->registerAssignment;
4085
4085
INDEBUG(bool killedRegs = false);
4086
4086
while (candidateRegs != RBM_NONE)
4087
4087
{
@@ -4576,7 +4576,7 @@ void LinearScan::processBlockStartLocations(BasicBlock* currentBlock)
4576
4576
assert(targetReg != REG_STK);
4577
4577
assert(interval->assignedReg != nullptr && interval->assignedReg->regNum == targetReg &&
4578
4578
interval->assignedReg->assignedInterval == interval);
4579
- liveRegs |= getRegMask (targetReg, interval->registerType);
4579
+ liveRegs.AddRegNum (targetReg, interval->registerType);
4580
4580
continue;
4581
4581
}
4582
4582
}
@@ -4606,7 +4606,7 @@ void LinearScan::processBlockStartLocations(BasicBlock* currentBlock)
4606
4606
// likely to match other assignments this way.
4607
4607
targetReg = interval->physReg;
4608
4608
interval->isActive = true;
4609
- liveRegs |= getRegMask (targetReg, interval->registerType);
4609
+ liveRegs.AddRegNum (targetReg, interval->registerType);
4610
4610
INDEBUG(inactiveRegs |= genRegMask(targetReg));
4611
4611
setVarReg(inVarToRegMap, varIndex, targetReg);
4612
4612
}
@@ -4618,7 +4618,7 @@ void LinearScan::processBlockStartLocations(BasicBlock* currentBlock)
4618
4618
if (targetReg != REG_STK)
4619
4619
{
4620
4620
RegRecord* targetRegRecord = getRegisterRecord(targetReg);
4621
- liveRegs |= getRegMask (targetReg, interval->registerType);
4621
+ liveRegs.AddRegNum (targetReg, interval->registerType);
4622
4622
if (!allocationPassComplete)
4623
4623
{
4624
4624
updateNextIntervalRef(targetReg, interval);
@@ -5371,7 +5371,7 @@ void LinearScan::allocateRegistersMinimal()
5371
5371
else
5372
5372
{
5373
5373
INDEBUG(dumpLsraAllocationEvent(LSRA_EVENT_NEEDS_NEW_REG, nullptr, assignedRegister));
5374
- regsToFree |= getRegMask (assignedRegister, currentInterval->registerType);
5374
+ regsToFree.AddRegNum (assignedRegister, currentInterval->registerType);
5375
5375
// We want a new register, but we don't want this to be considered a spill.
5376
5376
assignedRegister = REG_NA;
5377
5377
if (physRegRecord->assignedInterval == currentInterval)
@@ -5657,7 +5657,7 @@ void LinearScan::allocateRegisters()
5657
5657
updateNextIntervalRef(reg, interval);
5658
5658
updateSpillCost(reg, interval);
5659
5659
setRegInUse(reg, interval->registerType);
5660
- INDEBUG(registersToDump |= getRegMask (reg, interval->registerType));
5660
+ INDEBUG(registersToDump.AddRegNum (reg, interval->registerType));
5661
5661
}
5662
5662
}
5663
5663
else
@@ -6075,7 +6075,7 @@ void LinearScan::allocateRegisters()
6075
6075
updateSpillCost(assignedRegister, currentInterval);
6076
6076
}
6077
6077
6078
- regsToFree |= getRegMask (assignedRegister, currentInterval->registerType);
6078
+ regsToFree.AddRegNum (assignedRegister, currentInterval->registerType);
6079
6079
}
6080
6080
INDEBUG(dumpLsraAllocationEvent(LSRA_EVENT_NO_REG_ALLOCATED, nullptr, assignedRegister));
6081
6081
currentRefPosition.registerAssignment = RBM_NONE;
@@ -6520,7 +6520,7 @@ void LinearScan::allocateRegisters()
6520
6520
else
6521
6521
{
6522
6522
INDEBUG(dumpLsraAllocationEvent(LSRA_EVENT_NEEDS_NEW_REG, nullptr, assignedRegister));
6523
- regsToFree |= getRegMask (assignedRegister, currentInterval->registerType);
6523
+ regsToFree.AddRegNum (assignedRegister, currentInterval->registerType);
6524
6524
// We want a new register, but we don't want this to be considered a spill.
6525
6525
assignedRegister = REG_NA;
6526
6526
if (physRegRecord->assignedInterval == currentInterval)
@@ -9008,8 +9008,7 @@ void LinearScan::handleOutgoingCriticalEdges(BasicBlock* block)
9008
9008
regNumber fromReg = getVarReg(outVarToRegMap, liveOutVarIndex);
9009
9009
if (fromReg != REG_STK)
9010
9010
{
9011
- regMaskTP fromRegMask = genRegMask(fromReg, getIntervalForLocalVar(liveOutVarIndex)->registerType);
9012
- liveOutRegs |= fromRegMask;
9011
+ liveOutRegs.AddRegNumInMask(fromReg ARM_ARG(getIntervalForLocalVar(liveOutVarIndex)->registerType));
9013
9012
}
9014
9013
}
9015
9014
@@ -9217,7 +9216,7 @@ void LinearScan::handleOutgoingCriticalEdges(BasicBlock* block)
9217
9216
VarSetOps::AddElemD(compiler, diffResolutionSet, outResolutionSetVarIndex);
9218
9217
if (fromReg != REG_STK)
9219
9218
{
9220
- diffReadRegs |= genRegMask (fromReg, getIntervalForLocalVar(outResolutionSetVarIndex)->registerType);
9219
+ diffReadRegs.AddRegNumInMask (fromReg ARM_ARG( getIntervalForLocalVar(outResolutionSetVarIndex)->registerType) );
9221
9220
}
9222
9221
}
9223
9222
else if (sameToReg != fromReg)
@@ -9226,7 +9225,7 @@ void LinearScan::handleOutgoingCriticalEdges(BasicBlock* block)
9226
9225
setVarReg(sameVarToRegMap, outResolutionSetVarIndex, sameToReg);
9227
9226
if (sameToReg != REG_STK)
9228
9227
{
9229
- sameWriteRegs |= genRegMask (sameToReg, getIntervalForLocalVar(outResolutionSetVarIndex)->registerType);
9228
+ sameWriteRegs.AddRegNumInMask (sameToReg ARM_ARG( getIntervalForLocalVar(outResolutionSetVarIndex)->registerType) );
9230
9229
}
9231
9230
}
9232
9231
}
@@ -11088,7 +11087,7 @@ void LinearScan::dumpLsraAllocationEvent(LsraDumpEvent event,
11088
11087
}
11089
11088
if ((interval != nullptr) && (reg != REG_NA) && (reg != REG_STK))
11090
11089
{
11091
- registersToDump |= getRegMask (reg, interval->registerType);
11090
+ registersToDump.AddRegNum (reg, interval->registerType);
11092
11091
dumpRegRecordTitleIfNeeded();
11093
11092
}
11094
11093
0 commit comments