@@ -3823,7 +3823,7 @@ void CodeGen::genCheckUseBlockInit()
38233823 {
38243824 // Var is on the stack at entry.
38253825 initStkLclCnt +=
3826- roundUp (compiler->lvaLclSize (varNum), TARGET_POINTER_SIZE) / sizeof (int );
3826+ roundUp (compiler->lvaLclStackHomeSize (varNum), TARGET_POINTER_SIZE) / sizeof (int );
38273827 counted = true ;
38283828 }
38293829 }
@@ -3872,7 +3872,8 @@ void CodeGen::genCheckUseBlockInit()
38723872
38733873 if (!counted)
38743874 {
3875- initStkLclCnt += roundUp (compiler->lvaLclSize (varNum), TARGET_POINTER_SIZE) / sizeof (int );
3875+ initStkLclCnt +=
3876+ roundUp (compiler->lvaLclStackHomeSize (varNum), TARGET_POINTER_SIZE) / sizeof (int );
38763877 counted = true ;
38773878 }
38783879 }
@@ -4133,7 +4134,7 @@ void CodeGen::genZeroInitFrame(int untrLclHi, int untrLclLo, regNumber initReg,
41334134 (varDsc->lvExactSize () >= TARGET_POINTER_SIZE))
41344135 {
41354136 // We only initialize the GC variables in the TYP_STRUCT
4136- const unsigned slots = (unsigned )compiler->lvaLclSize (varNum) / REGSIZE_BYTES;
4137+ const unsigned slots = (unsigned )compiler->lvaLclStackHomeSize (varNum) / REGSIZE_BYTES;
41374138 ClassLayout* layout = varDsc->GetLayout ();
41384139
41394140 for (unsigned i = 0 ; i < slots; i++)
@@ -4150,7 +4151,7 @@ void CodeGen::genZeroInitFrame(int untrLclHi, int untrLclLo, regNumber initReg,
41504151 regNumber zeroReg = genGetZeroReg (initReg, pInitRegZeroed);
41514152
41524153 // zero out the whole thing rounded up to a single stack slot size
4153- unsigned lclSize = roundUp (compiler->lvaLclSize (varNum), (unsigned )sizeof (int ));
4154+ unsigned lclSize = roundUp (compiler->lvaLclStackHomeSize (varNum), (unsigned )sizeof (int ));
41544155 unsigned i;
41554156 for (i = 0 ; i + REGSIZE_BYTES <= lclSize; i += REGSIZE_BYTES)
41564157 {
@@ -4592,21 +4593,6 @@ void CodeGen::genReportGenericContextArg(regNumber initReg, bool* pInitRegZeroed
45924593 }
45934594 else
45944595 {
4595- if (isFramePointerUsed ())
4596- {
4597- #if defined(TARGET_ARM)
4598- // GetStackOffset() is always valid for incoming stack-arguments, even if the argument
4599- // will become enregistered.
4600- // On Arm compiler->compArgSize doesn't include r11 and lr sizes and hence we need to add 2*REGSIZE_BYTES
4601- noway_assert ((2 * REGSIZE_BYTES <= varDsc->GetStackOffset ()) &&
4602- (size_t (varDsc->GetStackOffset ()) < compiler->compArgSize + 2 * REGSIZE_BYTES));
4603- #else
4604- // GetStackOffset() is always valid for incoming stack-arguments, even if the argument
4605- // will become enregistered.
4606- noway_assert ((0 < varDsc->GetStackOffset ()) && (size_t (varDsc->GetStackOffset ()) < compiler->compArgSize ));
4607- #endif
4608- }
4609-
46104596 // We will just use the initReg since it is an available register
46114597 // and we are probably done using it anyway...
46124598 reg = initReg;
@@ -5215,7 +5201,7 @@ void CodeGen::genFnProlog()
52155201 }
52165202
52175203 signed int loOffs = varDsc->GetStackOffset ();
5218- signed int hiOffs = varDsc->GetStackOffset () + compiler->lvaLclSize (varNum);
5204+ signed int hiOffs = varDsc->GetStackOffset () + compiler->lvaLclStackHomeSize (varNum);
52195205
52205206 /* We need to know the offset range of tracked stack GC refs */
52215207 /* We assume that the GC reference can be anywhere in the TYP_STRUCT */
@@ -5672,7 +5658,7 @@ void CodeGen::genFnProlog()
56725658 {
56735659 // The last slot is reserved for ICodeManager::FixContext(ppEndRegion)
56745660 unsigned filterEndOffsetSlotOffs =
5675- compiler->lvaLclSize (compiler->lvaShadowSPslotsVar ) - TARGET_POINTER_SIZE;
5661+ compiler->lvaLclStackHomeSize (compiler->lvaShadowSPslotsVar ) - TARGET_POINTER_SIZE;
56765662
56775663 // Zero out the slot for nesting level 0
56785664 unsigned firstSlotOffs = filterEndOffsetSlotOffs - TARGET_POINTER_SIZE;
@@ -7883,12 +7869,13 @@ void CodeGen::genMultiRegStoreToLocal(GenTreeLclVar* lclNode)
78837869 offset += genTypeSize (srcType);
78847870
78857871#ifdef DEBUG
7872+ unsigned stackHomeSize = compiler->lvaLclStackHomeSize (lclNum);
78867873#ifdef TARGET_64BIT
7887- assert (offset <= varDsc-> lvSize () );
7874+ assert (offset <= stackHomeSize );
78887875#else // !TARGET_64BIT
78897876 if (varTypeIsStruct (varDsc))
78907877 {
7891- assert (offset <= varDsc-> lvSize () );
7878+ assert (offset <= stackHomeSize );
78927879 }
78937880 else
78947881 {
@@ -8203,7 +8190,7 @@ void CodeGen::genPoisonFrame(regMaskTP regLiveIn)
82038190
82048191 assert (varDsc->lvOnFrame );
82058192
8206- unsigned int size = compiler->lvaLclSize (varNum);
8193+ unsigned int size = compiler->lvaLclStackHomeSize (varNum);
82078194 if ((size / TARGET_POINTER_SIZE) > 16 )
82088195 {
82098196 // This will require more than 16 instructions, switch to rep stosd/memset call.
0 commit comments