{
// Don't use the relatedInterval for preferencing if its next reference is not a new definition,
// or if it is only related because they are multi-reg targets of the same node.
- if (!RefTypeIsDef(nextRelatedRefPosition->refType) ||
- isMultiRegRelated(nextRelatedRefPosition, refPosition->nodeLocation))
+ if (!RefTypeIsDef(nextRelatedRefPosition->refType))
{
relatedInterval = nullptr;
}
return isFree;
}
-// isMultiRegRelated: is this RefPosition defining part of a multi-reg value
-// at the given location?
-//
-bool LinearScan::isMultiRegRelated(RefPosition* refPosition, LsraLocation location)
-{
-#ifdef FEATURE_MULTIREG_ARGS_OR_RET
- return ((refPosition->nodeLocation == location) && refPosition->getInterval()->isMultiReg);
-#else
- return false;
-#endif
-}
-
//------------------------------------------------------------------------
// LinearScan::freeRegister: Make a register available for use
//
{
printf(" (constant)");
}
- if (isMultiReg)
- {
- printf(" (multireg)");
- }
printf(" RefPositions {");
for (RefPosition* refPosition = this->firstRefPosition; refPosition != nullptr;
regMaskTP allSIMDRegs();
regMaskTP internalFloatRegCandidates();
- bool isMultiRegRelated(RefPosition* refPosition, LsraLocation location);
bool registerIsFree(regNumber regNum, RegisterType regType);
bool registerIsAvailable(RegRecord* physRegRecord,
LsraLocation currentLoc,
, isSpecialPutArg(false)
, preferCalleeSave(false)
, isConstant(false)
- , isMultiReg(false)
, physReg(REG_COUNT)
#ifdef DEBUG
, intervalIndex(0)
// able to reuse a constant that's already in a register.
bool isConstant : 1;
- // True if this Interval is defined by a node that produces multiple registers.
- bool isMultiReg : 1;
-
// The register to which it is currently assigned.
regNumber physReg;