File tree Expand file tree Collapse file tree 3 files changed +28
-0
lines changed Expand file tree Collapse file tree 3 files changed +28
-0
lines changed Original file line number Diff line number Diff line change @@ -175,6 +175,17 @@ bool IntegralRange::Contains(int64_t value) const
175
175
}
176
176
break ;
177
177
178
+ case GT_CNS_INT:
179
+ if (node->IsIntegralConst (0 ) || node->IsIntegralConst (1 ))
180
+ {
181
+ return {SymbolicIntegerValue::Zero, SymbolicIntegerValue::One};
182
+ }
183
+ break ;
184
+
185
+ case GT_QMARK:
186
+ return Union (ForNode (node->AsQmark ()->ThenNode (), compiler),
187
+ ForNode (node->AsQmark ()->ElseNode (), compiler));
188
+
178
189
case GT_CAST:
179
190
return ForCastOutput (node->AsCast ());
180
191
@@ -430,6 +441,12 @@ bool IntegralRange::Contains(int64_t value) const
430
441
return {lowerBound, upperBound};
431
442
}
432
443
444
+ /* static */ IntegralRange IntegralRange::Union (IntegralRange range1, IntegralRange range2)
445
+ {
446
+ return IntegralRange (min (range1.GetLowerBound (), range2.GetLowerBound ()),
447
+ max (range1.GetUpperBound (), range2.GetUpperBound ()));
448
+ }
449
+
433
450
#ifdef DEBUG
434
451
/* static */ void IntegralRange::Print (IntegralRange range)
435
452
{
Original file line number Diff line number Diff line change @@ -1268,6 +1268,7 @@ class IntegralRange
1268
1268
static IntegralRange ForNode (GenTree* node, Compiler* compiler);
1269
1269
static IntegralRange ForCastInput (GenTreeCast* cast);
1270
1270
static IntegralRange ForCastOutput (GenTreeCast* cast);
1271
+ static IntegralRange Union (IntegralRange range1, IntegralRange range2);
1271
1272
1272
1273
#ifdef DEBUG
1273
1274
static void Print (IntegralRange range);
Original file line number Diff line number Diff line change @@ -5707,6 +5707,16 @@ struct GenTreeQmark : public GenTreeOp
5707
5707
assert ((colon != nullptr ) && colon->OperIs (GT_COLON));
5708
5708
}
5709
5709
5710
+ GenTree* ThenNode ()
5711
+ {
5712
+ return gtOp2->AsColon ()->ThenNode ();
5713
+ }
5714
+
5715
+ GenTree* ElseNode ()
5716
+ {
5717
+ return gtOp2->AsColon ()->ElseNode ();
5718
+ }
5719
+
5710
5720
#if DEBUGGABLE_GENTREE
5711
5721
GenTreeQmark () : GenTreeOp()
5712
5722
{
You can’t perform that action at this time.
0 commit comments