summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarol Eidt <carol.eidt@microsoft.com>2018-03-27 09:28:57 -0700
committerGitHub <noreply@github.com>2018-03-27 09:28:57 -0700
commitf56f7a50d60dd3ca2d8687afc492566494e6df41 (patch)
tree69ff4e6160340072085d5c118a8976026febb269
parent4fca952dbf71f4aad878033d6a74a398ad676e78 (diff)
parent399df33c3050f5636795007216f8bff0ee502a1c (diff)
downloadcoreclr-f56f7a50d60dd3ca2d8687afc492566494e6df41.tar.gz
coreclr-f56f7a50d60dd3ca2d8687afc492566494e6df41.tar.bz2
coreclr-f56f7a50d60dd3ca2d8687afc492566494e6df41.zip
Merge pull request #17246 from debayang/clr_jitstress_arm64
[ARM64] Fix UnspillReg instruction generation
-rw-r--r--src/jit/codegenlinear.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/jit/codegenlinear.cpp b/src/jit/codegenlinear.cpp
index eddec19c1f..6faaf612be 100644
--- a/src/jit/codegenlinear.cpp
+++ b/src/jit/codegenlinear.cpp
@@ -896,10 +896,15 @@ void CodeGen::genUnspillRegIfNeeded(GenTree* tree)
inst_RV_TT(ins_Load(treeType, compiler->isSIMDTypeLocalAligned(lcl->gtLclNum)), dstReg, unspillTree);
}
#elif defined(_TARGET_ARM64_)
- var_types targetType = unspillTree->gtType;
- instruction ins = ins_Load(targetType, compiler->isSIMDTypeLocalAligned(lcl->gtLclNum));
- emitAttr attr = emitTypeSize(targetType);
- emitter* emit = getEmitter();
+ var_types targetType = unspillTree->gtType;
+ if (targetType != genActualType(varDsc->lvType) && !varTypeIsGC(targetType) && !varDsc->lvNormalizeOnLoad())
+ {
+ assert(!varTypeIsGC(varDsc));
+ targetType = genActualType(varDsc->lvType);
+ }
+ instruction ins = ins_Load(targetType, compiler->isSIMDTypeLocalAligned(lcl->gtLclNum));
+ emitAttr attr = emitTypeSize(targetType);
+ emitter* emit = getEmitter();
// Fixes Issue #3326
attr = varTypeIsFloating(targetType) ? attr : emit->emitInsAdjustLoadStoreAttr(ins, attr);