From f100c7dc5ef4e98edea66fb5a13c4d648d8cd05d Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 5 Jun 2019 00:57:41 +0100 Subject: [PATCH] Match all 3 sizes --- src/jit/copyprop.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/jit/copyprop.cpp b/src/jit/copyprop.cpp index 8b61c7d23bb8..b06b701a55e0 100644 --- a/src/jit/copyprop.cpp +++ b/src/jit/copyprop.cpp @@ -495,9 +495,11 @@ void Compiler::optCopyPropFoldCopyBlks(BasicBlock* block) prevDst = prevDst->AsIndir()->Addr()->gtGetOp1(); } + GenTreeLclVarCommon* prevSrcLclVar = nullptr; GenTreeLclVarCommon* prevDstLclVar = nullptr; if (prevDst->OperGet() == GT_LCL_VAR || prevDst->OperGet() == GT_LCL_FLD) { + prevSrcLclVar = &prevSrc->gtLclVarCommon; prevDstLclVar = &prevDst->gtLclVarCommon; } else @@ -508,6 +510,7 @@ void Compiler::optCopyPropFoldCopyBlks(BasicBlock* block) assert(currSrcLclVar != nullptr); assert(currDstLclVar != nullptr); + assert(prevSrcLclVar != nullptr); assert(prevDstLclVar != nullptr); if (prevDstLclVar->gtLclNum != currSrcLclVar->gtLclNum) @@ -519,7 +522,8 @@ void Compiler::optCopyPropFoldCopyBlks(BasicBlock* block) unsigned lclNum = prevDstLclVar->gtLclNum; unsigned newLclNum = currDstLclVar->gtLclNum; - if (lvaLclSize(lclNum) != lvaLclSize(newLclNum)) + if (lvaLclExactSize(lclNum) != lvaLclExactSize(prevSrcLclVar->gtLclNum) || + lvaLclExactSize(newLclNum) != lvaLclExactSize(currSrcLclVar->gtLclNum)) { // Don't propergate if they aren't the same size continue; @@ -763,7 +767,7 @@ void Compiler::optCopyPropThroughCopyBlk(BasicBlock* block) unsigned lclNum = nextLclVar->gtLclNum; unsigned newLclNum = currSrcLclVar->gtLclNum; - if (lvaLclSize(lclNum) != lvaLclSize(newLclNum)) + if (lvaLclExactSize(lclNum) != lvaLclExactSize(newLclNum)) { // Don't propergate if they aren't the same size continue;