[Bug tree-optimization/52589] VRP missed optimization

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Mar 14 18:01:00 GMT 2012


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52589

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-03-14 17:24:30 UTC ---
The problem is in extract_range_from_binary_expr_1, we have
  s_7 = ASSERT_EXPR <s_1(D), s_1(D) + 1879048192 <= 4026531839>;
  D.1721_3 = s_7 + 2147483648;
  if (D.1721_3 <= 268435455)

s_7 has range ~[2147483648, 2415919103] (i.e. VR_ANTI_RANGE), the constant
obviously [2147483648, 2147483648] (i.e. VR_RANGE), but as vr0.type !=
vr1.type,
we drop it to varying, while we could combine that ~[0x80000000, 0x8fffffff]
+ [0x80000000, 0x80000000] into ~[0, 0xfffffff] (at least, for TYPE_UNSIGNED
addition and perhaps limited only to constants (i.e. vr1.min == vr1.max
VR_RANGE).



More information about the Gcc-bugs mailing list