From a22d3f9011375f5a0771be9fe50e4b28961327d4 Mon Sep 17 00:00:00 2001 From: David Wrighton Date: Thu, 10 Nov 2022 11:09:45 -0800 Subject: [PATCH 1/2] Fix morph issue with fgOptimizeEqualityComparisonWithConst - On arm32 a shift of a long requires a helper call, but the optimization in fgOptimizeEqualityComparisonWithConst for converting a right shift into a left shift was not keeping the GTF_CALL flag on the GenTree node. --- src/coreclr/jit/morph.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/coreclr/jit/morph.cpp b/src/coreclr/jit/morph.cpp index 5a0812c4e64fd..9512a1a4b7328 100644 --- a/src/coreclr/jit/morph.cpp +++ b/src/coreclr/jit/morph.cpp @@ -11420,6 +11420,10 @@ GenTree* Compiler::fgOptimizeEqualityComparisonWithConst(GenTreeOp* cmp) rshiftOp->SetAllEffectsFlags(rshiftOp->gtGetOp1(), rshiftOp->gtGetOp2()); rshiftOp->SetOper(GT_LSH); + if (rshiftOp->OperRequiresCallFlag(this)) + { + rshiftOp->gtFlags |= GTF_CALL; + } } // Reverse the condition if necessary. From db6fa46eca593d0769eb73b3257221cca0428b4b Mon Sep 17 00:00:00 2001 From: David Wrighton Date: Thu, 10 Nov 2022 12:39:30 -0800 Subject: [PATCH 2/2] Update src/coreclr/jit/morph.cpp Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com> --- src/coreclr/jit/morph.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/coreclr/jit/morph.cpp b/src/coreclr/jit/morph.cpp index 9512a1a4b7328..cf2a294e0a7b2 100644 --- a/src/coreclr/jit/morph.cpp +++ b/src/coreclr/jit/morph.cpp @@ -11418,12 +11418,8 @@ GenTree* Compiler::fgOptimizeEqualityComparisonWithConst(GenTreeOp* cmp) rshiftOp->gtOp1 = andOp->gtGetOp2(); andOp->gtOp2 = rshiftOp; - rshiftOp->SetAllEffectsFlags(rshiftOp->gtGetOp1(), rshiftOp->gtGetOp2()); rshiftOp->SetOper(GT_LSH); - if (rshiftOp->OperRequiresCallFlag(this)) - { - rshiftOp->gtFlags |= GTF_CALL; - } + gtUpdateNodeSideEffects(rshiftOp); } // Reverse the condition if necessary.