summaryrefslogtreecommitdiff
path: root/src/jit/lower.cpp
diff options
context:
space:
mode:
authorBrian Sullivan <briansul@microsoft.com>2019-01-10 16:29:42 -0800
committerGitHub <noreply@github.com>2019-01-10 16:29:42 -0800
commit459b58a7766707fb059a5762c7d72cb0af42a6ff (patch)
treed6023ccf22ceab28229b1c26d151a62d96c9db44 /src/jit/lower.cpp
parenta2e33937c7cbff1e5eebb7848d8ce7c039812749 (diff)
parent12cfc7fbc6f7f44ba4f32fdfe9168057fc8da5ea (diff)
downloadcoreclr-459b58a7766707fb059a5762c7d72cb0af42a6ff.tar.gz
coreclr-459b58a7766707fb059a5762c7d72cb0af42a6ff.tar.bz2
coreclr-459b58a7766707fb059a5762c7d72cb0af42a6ff.zip
Merge pull request #17733 from mikedn/cc-cond2
Expand GT_JCC/SETCC condition support
Diffstat (limited to 'src/jit/lower.cpp')
-rw-r--r--src/jit/lower.cpp28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/jit/lower.cpp b/src/jit/lower.cpp
index 2ea2c9a5cf..55f44a71e0 100644
--- a/src/jit/lower.cpp
+++ b/src/jit/lower.cpp
@@ -914,16 +914,16 @@ bool Lowering::TryLowerSwitchToBitTest(
// Rewire the blocks as needed and figure out the condition to use for JCC.
//
- genTreeOps bbSwitchCondition = GT_NONE;
- bbSwitch->bbJumpKind = BBJ_COND;
+ GenCondition bbSwitchCondition;
+ bbSwitch->bbJumpKind = BBJ_COND;
comp->fgRemoveAllRefPreds(bbCase1, bbSwitch);
comp->fgRemoveAllRefPreds(bbCase0, bbSwitch);
if (bbSwitch->bbNext == bbCase0)
{
- // GT_LT + GTF_UNSIGNED generates JC so we jump to bbCase1 when the bit is set
- bbSwitchCondition = GT_LT;
+ // GenCondition::C generates JC so we jump to bbCase1 when the bit is set
+ bbSwitchCondition = GenCondition::C;
bbSwitch->bbJumpDest = bbCase1;
comp->fgAddRefPred(bbCase0, bbSwitch);
@@ -933,8 +933,8 @@ bool Lowering::TryLowerSwitchToBitTest(
{
assert(bbSwitch->bbNext == bbCase1);
- // GT_GE + GTF_UNSIGNED generates JNC so we jump to bbCase0 when the bit is not set
- bbSwitchCondition = GT_GE;
+ // GenCondition::NC generates JNC so we jump to bbCase0 when the bit is not set
+ bbSwitchCondition = GenCondition::NC;
bbSwitch->bbJumpDest = bbCase0;
comp->fgAddRefPred(bbCase0, bbSwitch);
@@ -950,7 +950,7 @@ bool Lowering::TryLowerSwitchToBitTest(
GenTree* bitTest = comp->gtNewOperNode(GT_BT, TYP_VOID, bitTableIcon, switchValue);
bitTest->gtFlags |= GTF_SET_FLAGS;
GenTreeCC* jcc = new (comp, GT_JCC) GenTreeCC(GT_JCC, bbSwitchCondition);
- jcc->gtFlags |= GTF_UNSIGNED | GTF_USE_FLAGS;
+ jcc->gtFlags |= GTF_USE_FLAGS;
LIR::AsRange(bbSwitch).InsertAfter(switchValue, bitTableIcon, bitTest, jcc);
@@ -2523,8 +2523,8 @@ GenTree* Lowering::DecomposeLongCompare(GenTree* cmp)
GenTree* jcc = cmpUse.User();
jcc->gtOp.gtOp1 = nullptr;
jcc->ChangeOper(GT_JCC);
- jcc->gtFlags |= (cmp->gtFlags & GTF_UNSIGNED) | GTF_USE_FLAGS;
- jcc->AsCC()->gtCondition = condition;
+ jcc->gtFlags |= GTF_USE_FLAGS;
+ jcc->AsCC()->gtCondition = GenCondition::FromIntegralRelop(condition, cmp->IsUnsigned());
}
else
{
@@ -2532,7 +2532,7 @@ GenTree* Lowering::DecomposeLongCompare(GenTree* cmp)
cmp->gtOp.gtOp2 = nullptr;
cmp->ChangeOper(GT_SETCC);
cmp->gtFlags |= GTF_USE_FLAGS;
- cmp->AsCC()->gtCondition = condition;
+ cmp->AsCC()->gtCondition = GenCondition::FromIntegralRelop(condition, cmp->IsUnsigned());
}
return cmp->gtNext;
@@ -2734,7 +2734,7 @@ GenTree* Lowering::OptimizeConstCompare(GenTree* cmp)
if (lsh->OperIs(GT_LSH) && varTypeIsIntOrI(lsh->TypeGet()) && lsh->gtGetOp1()->IsIntegralConst(1) &&
BlockRange().TryGetUse(cmp, &cmpUse))
{
- genTreeOps condition = cmp->OperIs(GT_TEST_NE) ? GT_LT : GT_GE;
+ GenCondition condition = cmp->OperIs(GT_TEST_NE) ? GenCondition::C : GenCondition::NC;
cmp->SetOper(GT_BT);
cmp->gtType = TYP_VOID;
@@ -2760,7 +2760,7 @@ GenTree* Lowering::OptimizeConstCompare(GenTree* cmp)
cmpUse.ReplaceWith(comp, cc);
}
- cc->gtFlags |= GTF_USE_FLAGS | GTF_UNSIGNED;
+ cc->gtFlags |= GTF_USE_FLAGS;
return cmp->gtNext;
}
@@ -2817,10 +2817,10 @@ GenTree* Lowering::OptimizeConstCompare(GenTree* cmp)
ccOp = GT_SETCC;
}
- genTreeOps condition = cmp->OperGet();
+ GenCondition condition = GenCondition::FromIntegralRelop(cmp);
cc->ChangeOper(ccOp);
cc->AsCC()->gtCondition = condition;
- cc->gtFlags |= GTF_USE_FLAGS | (cmp->gtFlags & GTF_UNSIGNED);
+ cc->gtFlags |= GTF_USE_FLAGS;
return next;
}