From 5f14db0f30960391c6d4738d1fa4e4c6b032816d Mon Sep 17 00:00:00 2001 From: SingleAccretion Date: Wed, 27 Apr 2022 13:32:53 +0300 Subject: [PATCH 1/2] Copy propagate on LCL_FLDs A small and simple CQ improvement. As usual, needed for future changes. --- src/coreclr/jit/copyprop.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 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()); From baf7ba6c65c20ef214c77bb052c8d0301c811836 Mon Sep 17 00:00:00 2001 From: SingleAccretion Date: Wed, 27 Apr 2022 14:41:21 +0300 Subject: [PATCH 2/2] Copy the SSA number when cloning LCL_FLD --- src/coreclr/jit/gentree.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index a1d1c27dcbd6d..4ccf9bcf41714 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;