From 9158543338acd47019ffb6ec634a273a9e28cb99 Mon Sep 17 00:00:00 2001 From: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com> Date: Wed, 11 May 2022 12:40:50 +0300 Subject: [PATCH] Copy propagate on `LCL_FLD`s (#68592) --- src/coreclr/jit/copyprop.cpp | 20 +++++++++++--------- src/coreclr/jit/gentree.cpp | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/coreclr/jit/copyprop.cpp b/src/coreclr/jit/copyprop.cpp index 0ec7ae088233a..778dd7d404f6e 100644 --- a/src/coreclr/jit/copyprop.cpp +++ b/src/coreclr/jit/copyprop.cpp @@ -205,15 +205,18 @@ void Compiler::optCopyProp(Statement* stmt, GenTreeLclVarCommon* tree, unsigned continue; } - var_types newLclType = newLclVarDsc->TypeGet(); - if (!newLclVarDsc->lvNormalizeOnLoad()) + if (tree->OperIs(GT_LCL_VAR)) { - newLclType = genActualType(newLclType); - } + var_types newLclType = newLclVarDsc->TypeGet(); + if (!newLclVarDsc->lvNormalizeOnLoad()) + { + newLclType = genActualType(newLclType); + } - if (newLclType != tree->TypeGet()) - { - continue; + if (newLclType != tree->TypeGet()) + { + continue; + } } #ifdef DEBUG @@ -388,8 +391,7 @@ void Compiler::optBlockCopyProp(BasicBlock* block, LclNumToLiveDefsMap* curSsaNa optCopyPropPushDef(tree, lclDefNode, lclNum, curSsaName); } - // TODO-CQ: propagate on LCL_FLDs too. - else if (tree->OperIs(GT_LCL_VAR) && ((tree->gtFlags & GTF_VAR_DEF) == 0)) + else if (tree->OperIs(GT_LCL_VAR, GT_LCL_FLD) && ((tree->gtFlags & GTF_VAR_DEF) == 0)) { const unsigned lclNum = optIsSsaLocal(tree->AsLclVarCommon()); diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index 3574d3c258698..bf1cd117fe872 100644 --- a/src/coreclr/jit/gentree.cpp +++ b/src/coreclr/jit/gentree.cpp @@ -8136,7 +8136,7 @@ GenTree* Compiler::gtCloneExpr( new (this, GT_LCL_FLD) GenTreeLclFld(GT_LCL_FLD, tree->TypeGet(), tree->AsLclFld()->GetLclNum(), tree->AsLclFld()->GetLclOffs()); copy->AsLclFld()->SetFieldSeq(tree->AsLclFld()->GetFieldSeq()); - copy->gtFlags = tree->gtFlags; + copy->AsLclFld()->SetSsaNum(tree->AsLclFld()->GetSsaNum()); } goto DONE;