Skip to content

Commit 1ba3c19

Browse files
committed
Ensure we preserve vn and produce a canonical tree
1 parent 805d59a commit 1ba3c19

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

src/coreclr/jit/morph.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7484,7 +7484,7 @@ GenTree* Compiler::fgMorphSmpOp(GenTree* tree, MorphAddrContext* mac, bool* optA
74847484
JITDUMP("\nTransforming:\n");
74857485
DISPTREE(tree);
74867486

7487-
otherNode->SetOper(GT_AND); // Change % => &
7487+
otherNode->SetOper(GT_AND, GenTree::PRESERVE_VN); // Change % => &
74887488
otherNode->gtFlags &= ~(GTF_DIV_MOD_NO_OVERFLOW | GTF_DIV_MOD_NO_BY_ZERO);
74897489

74907490
divisor->AsIntConCommon()->SetIconValue(modValue - 1); // Change c => c - 1
@@ -7906,7 +7906,7 @@ GenTree* Compiler::fgMorphSmpOp(GenTree* tree, MorphAddrContext* mac, bool* optA
79067906
goto CM_ADD_OP;
79077907
}
79087908

7909-
/* Check for "cns1 - op2" , we change it to "(cns1 + (-op2))" */
7909+
/* Check for "cns1 - op2" , we change it to "((-op2) + cns1)" */
79107910

79117911
noway_assert(op1);
79127912
if (op1->IsCnsIntOrI())
@@ -7929,7 +7929,8 @@ GenTree* Compiler::fgMorphSmpOp(GenTree* tree, MorphAddrContext* mac, bool* optA
79297929
return tree;
79307930
}
79317931

7932-
tree->AsOp()->gtOp2 = op2 = gtNewOperNode(GT_NEG, genActualType(op2->TypeGet()), op2);
7932+
tree->AsOp()->gtOp2 = op2 = op1;
7933+
tree->AsOp()->gtOp1 = op1 = gtNewOperNode(GT_NEG, genActualType(op2->TypeGet()), op2);
79337934
fgMorphTreeDone(op2);
79347935

79357936
oper = GT_ADD;

0 commit comments

Comments
 (0)