{
overflows = false;
}
+ else if (expr->OperGet() == GT_IND)
+ {
+ overflows = false;
+ }
+ else if (expr->OperGet() == GT_COMMA)
+ {
+ overflows = ComputeDoesOverflow(block, expr->gtEffectiveVal());
+ }
// Check if the var def has rhs involving arithmetic that overflows.
else if (expr->IsLocal())
{
JITDUMP("%s\n", range.ToString(m_pCompiler->getAllocatorDebugOnly()));
}
}
+ else if (varTypeIsSmallInt(expr->TypeGet()))
+ {
+ switch (expr->TypeGet())
+ {
+ case TYP_UBYTE:
+ range = Range(Limit(Limit::keConstant, 0), Limit(Limit::keConstant, 255));
+ break;
+ case TYP_BYTE:
+ range = Range(Limit(Limit::keConstant, -127), Limit(Limit::keConstant, 128));
+ break;
+ case TYP_USHORT:
+ range = Range(Limit(Limit::keConstant, 0), Limit(Limit::keConstant, 65535));
+ break;
+ case TYP_SHORT:
+ range = Range(Limit(Limit::keConstant, -32768), Limit(Limit::keConstant, 32767));
+ break;
+ default:
+ range = Range(Limit(Limit::keUnknown));
+ break;
+ }
+
+ JITDUMP("%s\n", range.ToString(m_pCompiler->getAllocatorDebugOnly()));
+ }
else
{
// The expression is not recognized, so the result is unknown.