This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/52589] New: VRP missed optimization
- From: "jakub at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 14 Mar 2012 15:46:25 +0000
- Subject: [Bug tree-optimization/52589] New: VRP missed optimization
- Auto-submitted: auto-generated
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).