unsigned char lvOverlappingFields :1; // True when we have a struct with possibly overlapping fields
unsigned char lvContainsHoles :1; // True when we have a promoted struct that contains holes
unsigned char lvCustomLayout :1; // True when this struct has "CustomLayout"
-#if FEATURE_MULTIREG_ARGS_OR_RET
- unsigned char lvIsMultiRegArgOrRet:1; // Is this argument variable holding a value passed or returned in multiple registers?
-#endif
+ unsigned char lvIsMultiRegArgOrRet:1; // Is this a struct that would be passed or returned in multiple registers?
+
#ifdef _TARGET_ARM_
// TODO-Cleanup: Can this be subsumed by the above?
unsigned char lvIsHfaRegArg:1; // Is this argument variable holding a HFA register argument.
var_types getEightByteType(const SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR& structDesc, unsigned slotNum);
void fgMorphSystemVStructArgs(GenTreeCall* call, bool hasStructArgument);
#endif // defined(FEATURE_UNIX_AMD64_STRUCT_PASSING)
+
}; // end of class Compiler
// Inline methods of CompAllocator.
{
lvaTable[genReturnLocal].lvType = TYP_STRUCT;
lvaSetStruct(genReturnLocal, info.compMethodInfo->args.retTypeClass, true);
-#if FEATURE_MULTIREG_ARGS_OR_RET
lvaTable[genReturnLocal].lvIsMultiRegArgOrRet = true;
-#endif
}
else
{
dst = gtNewOperNode(GT_ADDR, TYP_BYREF, dst);
opAssign = gtNewCpObjNode(dst, src, clsHnd, false);
-#if FEATURE_MULTIREG_ARGS_OR_RET
lvaTable[shadowVar].lvIsMultiRegArgOrRet = lvaTable[lclNum].lvIsMultiRegArgOrRet;
-#endif // FEATURE_MULTIREG_ARGS_OR_RET
}
else
{
{
if (op->gtOper == GT_LCL_VAR)
{
-#if FEATURE_MULTIREG_RET
// This LCL_VAR is an HFA return value, it stays as a TYP_STRUCT
unsigned lclNum = op->gtLclVarCommon.gtLclNum;
// Make sure this struct type stays as struct so that we can return it as an HFA
lvaTable[lclNum].lvIsMultiRegArgOrRet = true;
-#endif // FEATURE_MULTIREG_RET
return op;
}