+bool +ipa_vr::nonzero_p (tree expr_type) const +{ + if (type == VR_ANTI_RANGE && wi::eq_p (min, 0) && wi::eq_p (max, 0)) + return true; + + unsigned prec = TYPE_PRECISION (expr_type); + return (type == VR_RANGE + && wi::eq_p (min, wi::one (prec)) + && wi::eq_p (max, wi::max_value (prec, TYPE_SIGN (expr_type)))); +}
Errr, wrong version posted. There was a TYPE_UNSIGNED missing. Fixed and committed. diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 20a0bddcbab..5020f4a44d5 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -5117,6 +5117,7 @@ ipa_vr::nonzero_p (tree expr_type) const unsigned prec = TYPE_PRECISION (expr_type); return (type == VR_RANGE + && TYPE_UNSIGNED (expr_type) && wi::eq_p (min, wi::one (prec)) && wi::eq_p (max, wi::max_value (prec, TYPE_SIGN (expr_type)))); }