VRP should, if overfow is defined, create anti-ranges if plus or minus
cause wrapping.

void test2 (unsigned int i)
{
  if (i <= 0x0fffffffa)
    {
      return;
    }
  if (i == 0x0ffffffff)
    {
      return;
    }
  {
    unsigned int v = i + 2;
    {
      if (v != 0)
        {
          if (v != 0x0ffffffff)
            {
              link_error ();
            }
        }
    }
  }
}

we should be able to optimize this.  So [UINT_MAX-4, UINT_MAX-1] + 2
is ~[1, UINT_MAX-1].

(I have a patch)


-- 
           Summary: VRP does not create ANIT_RANGEs on overflow
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: enhancement
          Priority: P3
         Component: tree-optimization
        AssignedTo: rguenth at gcc dot gnu dot org
        ReportedBy: rguenth at gcc dot gnu dot org


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

Reply via email to