[Bug tree-optimization/52589] New: VRP missed optimization
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Mar 14 16:13:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52589
Bug #: 52589
Summary: VRP missed optimization
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: jakub@gcc.gnu.org
extern void link_error (void);
void
foo (unsigned int s)
{
if (s + 0x70000000 < 0xf0000000U)
{
if (s >= 0x80000000U && s < 0x90000000U)
link_error ();
}
}
void
bar (unsigned int s)
{
if (s + 0x70000000 >= 0xf0000000U)
{
if (s < 0x80000000U || s >= 0x90000000U)
link_error ();
}
}
In the above testcase, bar is optimized fine (VRP adds an ASSERT_EXPR with
range [0x80000000, 0x8fffffff] and optimizes away the test), but in foo it
isn't - the range there is ~[0x80000000, 0x8ffffffff] and we don't handle the
VR_ANTI_RANGE somewhere where we should.
I've noticed this while working on PR52267 - the vrp65.c testcase that I'm
bootstrapping there right now needs to have 4 tests commented out (well,
replaced by checks of a few selected values from the range which VRP optimizes
out properly).
More information about the Gcc-bugs
mailing list