Skip to content

Commit

Permalink
Fold "X relop 0" in assertprop (dotnet#110076)
Browse files Browse the repository at this point in the history
  • Loading branch information
EgorBo authored and mikelle-rogers committed Dec 4, 2024
1 parent bef126d commit cb754ec
Showing 1 changed file with 38 additions and 1 deletion.
39 changes: 38 additions & 1 deletion src/coreclr/jit/assertionprop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4272,6 +4272,44 @@ GenTree* Compiler::optAssertionPropGlobal_RelOp(ASSERT_VALARG_TP assertions, Gen
GenTree* op1 = tree->AsOp()->gtOp1;
GenTree* op2 = tree->AsOp()->gtOp2;

// Can we fold "X relop 0" based on assertions?
if (op2->IsIntegralConst(0) && tree->OperIsCmpCompare())
{
bool isNonZero, isNeverNegative;
optAssertionProp_RangeProperties(assertions, op1, &isNonZero, &isNeverNegative);

if (tree->OperIs(GT_GE, GT_LT) && isNeverNegative)
{
// Assertions: X >= 0
//
// X >= 0 --> true
// X < 0 --> false
newTree = tree->OperIs(GT_GE) ? gtNewTrue() : gtNewFalse();
}
else if (tree->OperIs(GT_GT, GT_LE) && isNeverNegative && isNonZero)
{
// Assertions: X > 0
//
// X > 0 --> true
// X <= 0 --> false
newTree = tree->OperIs(GT_GT) ? gtNewTrue() : gtNewFalse();
}
else if (tree->OperIs(GT_EQ, GT_NE) && isNonZero)
{
// Assertions: X != 0
//
// X != 0 --> true
// X == 0 --> false
newTree = tree->OperIs(GT_NE) ? gtNewTrue() : gtNewFalse();
}

if (newTree != tree)
{
newTree = gtWrapWithSideEffects(newTree, tree, GTF_ALL_EFFECT);
return optAssertionProp_Update(newTree, tree, stmt);
}
}

// Look for assertions of the form (tree EQ/NE 0)
AssertionIndex index = optGlobalAssertionIsEqualOrNotEqualZero(assertions, tree);

Expand All @@ -4292,7 +4330,6 @@ GenTree* Compiler::optAssertionPropGlobal_RelOp(ASSERT_VALARG_TP assertions, Gen

newTree = curAssertion->assertionKind == OAK_EQUAL ? gtNewIconNode(0) : gtNewIconNode(1);
newTree = gtWrapWithSideEffects(newTree, tree, GTF_ALL_EFFECT);
newTree = fgMorphTree(newTree);
DISPTREE(newTree);
return optAssertionProp_Update(newTree, tree, stmt);
}
Expand Down

0 comments on commit cb754ec

Please sign in to comment.