[Bug tree-optimization/68583] New: [5/6 Regression] Missed if-conversion
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Nov 27 12:29:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68583
Bug ID: 68583
Summary: [5/6 Regression] Missed if-conversion
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: rguenth at gcc dot gnu.org
Target Milestone: ---
We don't if-convert
void foo (long *a)
{
int i;
for (i = 0; i < 100; i+=2)
{
if (a[i] == 0)
{
a[i+1] = 2;
a[i] = 3;
}
else
{
a[i+1] = 3;
a[i] = 4;
}
}
}
even though both a[i] and a[i+1] are written to unconditionally. We only
keep a base_master to see if sth is writable but if we'd have separate
read-unconditionally and write-unconditionally flags from the master_dr
we could handle the above just fine. That would require the master_dr
entry to be associated with two different predicates, one for
reads and writes (for read-or-written-unconditionally) and one for writes
only (for written-unconditionally).
PR56624 suggests this missed if-conversion is a regression which it is
as GCC 4.9 and GCC 5.1.0 happily if-convert it.
More information about the Gcc-bugs
mailing list