diff options
Diffstat (limited to 'src/jit/codegenlinear.cpp')
-rw-r--r-- | src/jit/codegenlinear.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/jit/codegenlinear.cpp b/src/jit/codegenlinear.cpp index 0d99ee0f88..121b4ffb65 100644 --- a/src/jit/codegenlinear.cpp +++ b/src/jit/codegenlinear.cpp @@ -710,12 +710,12 @@ void CodeGen::genSpillVar(GenTreePtr tree) bool needsSpill = ((tree->gtFlags & GTF_VAR_DEF) == 0 && varDsc->lvIsInReg()); if (needsSpill) { - var_types lclTyp = varDsc->TypeGet(); - if (varDsc->lvNormalizeOnStore()) - { - lclTyp = genActualType(lclTyp); - } - emitAttr size = emitTypeSize(lclTyp); + // In order for a lclVar to have been allocated to a register, it must not have been aliasable, and can + // therefore be store-normalized (rather than load-normalized). In fact, not performing store normalization + // can lead to problems on architectures where a lclVar may be allocated to a register that is not + // addressable at the granularity of the lclVar's defined type (e.g. x86). + var_types lclTyp = genActualType(varDsc->TypeGet()); + emitAttr size = emitTypeSize(lclTyp); bool restoreRegVar = false; if (tree->gtOper == GT_REG_VAR) |