return AsMultiRegOp()->GetRegCount() > 1;
}
#endif
+#endif // FEATURE_MULTIREG_RET
if (OperIs(GT_COPY, GT_RELOAD))
{
return true;
}
-#endif // FEATURE_MULTIREG_RET
#ifdef FEATURE_HW_INTRINSICS
if (OperIsHWIntrinsic())
return AsMultiRegOp()->GetRegCount();
}
#endif
+#endif // FEATURE_MULTIREG_RET
if (OperIs(GT_COPY, GT_RELOAD))
{
return AsCopyOrReload()->GetRegCount();
}
-#endif // FEATURE_MULTIREG_RET
#ifdef FEATURE_HW_INTRINSICS
if (OperIsHWIntrinsic())
fieldVarDsc->PrintVarReg();
}
- if (fieldVarDsc->lvTracked && fgLocalVarLivenessDone && tree->AsLclVar()->IsLastUse(index))
+ if (fieldVarDsc->lvTracked && fgLocalVarLivenessDone &&
+ tree->AsLclVarCommon()->IsLastUse(index))
{
printf(" (last use)");
}
// Represents GT_COPY or GT_RELOAD node
//
-// As it turns out, these are only needed on targets that happen to have multi-reg returns.
-// However, they are actually needed on any target that has any multi-reg ops. It is just
-// coincidence that those are the same (and there isn't a FEATURE_MULTIREG_OPS).
+// Needed to support multi-reg ops.
//
struct GenTreeCopyOrReload : public GenTreeUnOp
{
-#if FEATURE_MULTIREG_RET
// State required to support copy/reload of a multi-reg call node.
// The first register is always given by GetRegNum().
//
regNumberSmall gtOtherRegs[MAX_MULTIREG_COUNT - 1];
-#endif
//----------------------------------------------------------
// ClearOtherRegs: set gtOtherRegs to REG_NA.
//
void ClearOtherRegs()
{
-#if FEATURE_MULTIREG_RET
for (unsigned i = 0; i < MAX_MULTIREG_COUNT - 1; ++i)
{
gtOtherRegs[i] = REG_NA;
}
-#endif
}
//-----------------------------------------------------------
return GetRegNum();
}
-#if FEATURE_MULTIREG_RET
return (regNumber)gtOtherRegs[idx - 1];
-#else
- return REG_NA;
-#endif
}
//-----------------------------------------------------------
{
SetRegNum(reg);
}
-#if FEATURE_MULTIREG_RET
else
{
gtOtherRegs[idx - 1] = (regNumberSmall)reg;
assert(gtOtherRegs[idx - 1] == reg);
}
-#else
- else
- {
- unreached();
- }
-#endif
}
//----------------------------------------------------------------------------
unsigned GetRegCount() const
{
-#if FEATURE_MULTIREG_RET
// We need to return the highest index for which we have a valid register.
// Note that the gtOtherRegs array is off by one (the 0th register is GetRegNum()).
// If there's no valid register in gtOtherRegs, GetRegNum() must be valid.
return i;
}
}
-#endif
+
// We should never have a COPY or RELOAD with no valid registers.
assert(GetRegNum() != REG_NA);
return 1;
return AsMultiRegOp()->GetRegNumByIdx(regIndex);
}
#endif
+#endif // FEATURE_MULTIREG_RET
if (OperIs(GT_COPY, GT_RELOAD))
{
return AsCopyOrReload()->GetRegNumByIdx(regIndex);
}
-#endif // FEATURE_MULTIREG_RET
#ifdef FEATURE_HW_INTRINSICS
if (OperIs(GT_HWINTRINSIC))