@@ -3160,7 +3160,7 @@ void Lowering::LowerStoreLocCommon(GenTreeLclVarCommon* lclStore)
31603160#endif // !WINDOWS_AMD64_ABI
31613161 convertToStoreObj = false ;
31623162 }
3163- else if (!varDsc->IsEnregisterable ())
3163+ else if (!varDsc->IsEnregisterableType ())
31643164 {
31653165 convertToStoreObj = true ;
31663166 }
@@ -3418,11 +3418,10 @@ void Lowering::LowerRetSingleRegStructLclVar(GenTreeUnOp* ret)
34183418 lclNum = fieldLclNum;
34193419 varDsc = comp->lvaGetDesc (lclNum);
34203420 }
3421- else if (!varDsc->lvRegStruct && !varTypeIsEnregisterable (varDsc))
3422-
3421+ else if (varDsc->lvPromoted )
34233422 {
3424- // TODO-1stClassStructs: We can no longer promote or enregister this struct,
3425- // since it is referenced as a whole.
3423+ // TODO-1stClassStructs: We can no longer independently promote
3424+ // or enregister this struct, since it is referenced as a whole.
34263425 comp->lvaSetVarDoNotEnregister (lclNum DEBUGARG (Compiler::DNER_BlockOp));
34273426 }
34283427
@@ -3434,9 +3433,10 @@ void Lowering::LowerRetSingleRegStructLclVar(GenTreeUnOp* ret)
34343433 }
34353434 else
34363435 {
3437- var_types lclVarType = varDsc->GetRegisterType (lclVar);
3436+ const var_types lclVarType = varDsc->GetRegisterType (lclVar);
34383437 assert (lclVarType != TYP_UNDEF);
3439- lclVar->ChangeType (lclVarType);
3438+ const var_types actualType = genActualType (lclVarType);
3439+ lclVar->ChangeType (actualType);
34403440
34413441 if (varTypeUsesFloatReg (ret) != varTypeUsesFloatReg (lclVarType))
34423442 {
@@ -4039,12 +4039,12 @@ void Lowering::InsertPInvokeMethodProlog()
40394039 GenTree* call = comp->gtNewHelperCallNode (CORINFO_HELP_INIT_PINVOKE_FRAME, TYP_I_IMPL, argList);
40404040
40414041 // some sanity checks on the frame list root vardsc
4042- LclVarDsc* varDsc = &comp->lvaTable [comp->info .compLvFrameListRoot ];
4042+ const unsigned lclNum = comp->info .compLvFrameListRoot ;
4043+ const LclVarDsc* varDsc = comp->lvaGetDesc (lclNum);
40434044 noway_assert (!varDsc->lvIsParam );
40444045 noway_assert (varDsc->lvType == TYP_I_IMPL);
40454046
4046- GenTree* store =
4047- new (comp, GT_STORE_LCL_VAR) GenTreeLclVar (GT_STORE_LCL_VAR, TYP_I_IMPL, comp->info .compLvFrameListRoot );
4047+ GenTree* store = new (comp, GT_STORE_LCL_VAR) GenTreeLclVar (GT_STORE_LCL_VAR, TYP_I_IMPL, lclNum);
40484048 store->AsOp ()->gtOp1 = call;
40494049 store->gtFlags |= GTF_VAR_DEF;
40504050
@@ -4065,6 +4065,7 @@ void Lowering::InsertPInvokeMethodProlog()
40654065 GenTreeLclFld (GT_STORE_LCL_FLD, TYP_I_IMPL, comp->lvaInlinedPInvokeFrameVar , callFrameInfo.offsetOfCallSiteSP );
40664066 storeSP->gtOp1 = PhysReg (REG_SPBASE);
40674067 storeSP->gtFlags |= GTF_VAR_DEF;
4068+ comp->lvaSetVarDoNotEnregister (comp->lvaInlinedPInvokeFrameVar DEBUGARG (Compiler::DNER_LocalField));
40684069
40694070 firstBlockRange.InsertBefore (insertionPoint, LIR::SeqTree (comp, storeSP));
40704071 DISPTREERANGE (firstBlockRange, storeSP);
@@ -6534,7 +6535,7 @@ void Lowering::ContainCheckRet(GenTreeUnOp* ret)
65346535 assert (varDsc->lvIsMultiRegRet || (varDsc->lvIsHfa () && varTypeIsValidHfaType (varDsc->lvType )));
65356536
65366537 // Mark var as contained if not enregisterable.
6537- if (!varTypeIsEnregisterable (op1 ))
6538+ if (!varDsc-> IsEnregisterableLcl ( ))
65386539 {
65396540 if (!op1->IsMultiRegLclVar ())
65406541 {
0 commit comments