*wbPassStruct = howToPassStruct;
}
-#if defined(FEATURE_MULTIREG_ARGS) && defined(_TARGET_ARM64_)
- // Normalize struct return type for ARM64 FEATURE_MULTIREG_ARGS
- // This is not yet enabled for ARM32 since FEATURE_SIMD is not enabled
- if (varTypeIsStruct(useType))
- {
- useType = impNormStructType(clsHnd);
- }
-#endif
-
return useType;
}
*wbReturnStruct = howToReturnStruct;
}
-#if defined(FEATURE_MULTIREG_RET) && defined(_TARGET_ARM64_)
- // Normalize struct return type for ARM64 FEATURE_MULTIREG_RET
- // This is not yet enabled for ARM32 since FEATURE_SIMD is not enabled
- // This is not needed for XARCH as eeGetSystemVAmd64PassStructInRegisterDescriptor() is used
- if (varTypeIsStruct(useType))
- {
- useType = impNormStructType(clsHnd);
- }
-#endif
-
return useType;
}
// We change this to a GT_LCL_FLD (from a GT_ADDR of a GT_LCL_VAR)
lcl->ChangeOper(GT_LCL_FLD);
fgLclFldAssign(lcl->gtLclVarCommon.gtLclNum);
+ lcl->gtType = src->gtType;
+ asgType = src->gtType;
}
- lcl->gtType = src->gtType;
- asgType = src->gtType;
- dest = lcl;
+ dest = lcl;
#if defined(_TARGET_ARM_)
// TODO-Cleanup: This should have been taken care of in the above HasMultiRegRetVal() case,
{
unsigned tmpNum = lvaGrabTemp(true DEBUGARG("Return value temp for multireg return."));
impAssignTempGen(tmpNum, op, hClass, (unsigned)CHECK_SPILL_ALL);
- GenTree* ret = gtNewLclvNode(tmpNum, op->gtType);
+ GenTree* ret = gtNewLclvNode(tmpNum, lvaTable[tmpNum].lvType);
// TODO-1stClassStructs: Handle constant propagation and CSE-ing of multireg returns.
ret->gtFlags |= GTF_DONT_CSE;
if (howToPassStruct == SPK_ByValueAsHfa)
{
- assert(varTypeIsStruct(TYP_STRUCT));
+ assert(type == TYP_STRUCT);
return true;
}
#if defined(FEATURE_UNIX_AMD64_STRUCT_PASSING) || defined(_TARGET_ARM64_)
if (howToPassStruct == SPK_ByValue)
{
- assert(varTypeIsStruct(TYP_STRUCT));
+ assert(type == TYP_STRUCT);
return true;
}
#endif