Use TYPE_MIN/MAX_VALUE in set_varying when possible.
We currently create new trees every time... which is very wasteful and time consuming. Instead, just use the TYPE_MIN/MAX_VALUE. * value-range.h (irange::set_varying): Use TYPE_MIN_VALUE and TYPE_MAX_VALUE instead of creating new trees when possible.
This commit is contained in:
parent
4b8ca6c617
commit
e828f4b589
@ -476,10 +476,21 @@ irange::set_varying (tree type)
|
||||
|
||||
if (INTEGRAL_TYPE_P (type))
|
||||
{
|
||||
// Strict enum's require varying to be not TYPE_MIN/MAX, but rather
|
||||
// min_value and max_value.
|
||||
wide_int min = wi::min_value (TYPE_PRECISION (type), TYPE_SIGN (type));
|
||||
wide_int max = wi::max_value (TYPE_PRECISION (type), TYPE_SIGN (type));
|
||||
m_base[0] = wide_int_to_tree (type, min);
|
||||
m_base[1] = wide_int_to_tree (type, max);
|
||||
if (wi::eq_p (max, wi::to_wide (TYPE_MAX_VALUE (type)))
|
||||
&& wi::eq_p (min, wi::to_wide (TYPE_MIN_VALUE (type))))
|
||||
{
|
||||
m_base[0] = TYPE_MIN_VALUE (type);
|
||||
m_base[1] = TYPE_MAX_VALUE (type);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_base[0] = wide_int_to_tree (type, min);
|
||||
m_base[1] = wide_int_to_tree (type, max);
|
||||
}
|
||||
}
|
||||
else if (POINTER_TYPE_P (type))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user