This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/31848] New: [4.3 regression] Invalid loop optimization causes bootstrap failure in genautomata
- From: "rearnsha at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 6 May 2007 23:10:22 -0000
- Subject: [Bug rtl-optimization/31848] New: [4.3 regression] Invalid loop optimization causes bootstrap failure in genautomata
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Compiling genautomata with -O2 on ARM results in a program that segfaults when
run. The problem is in output_min_issue_delay_table. What appears to be
happening is that the RTL loop optimizer is identifying a loop invariant and
hoisting it. However, the particular instance of the invariant that is being
hoisted has a REG_EQUAL (const_int 0) note attached, so when the invariant gets
spilled, the value of 0 is substituted instead of the address of the array.
Essentially, the loop seems to consist of
x = malloc(...)
for (i=...)
{
if (x != 0)
t1 = x;
else
t1 = 0;
t1[i] = yyy;
}
which gets optimized to
x = malloc(...)
for (i=...)
{
if (x != 0)
t1 = x;
else
t1 = x; // NOTE REG_EQUAL (0);
t1[i] = yyy;
}
which is further transformed to
x = malloc
t1 = x; //Note REG_EQUAL (0);
for (i=...)
{
t1[i] = yyy;
}
I've attached the following files.
foo.c: Source code that shows the problem -- look for
compressed_min_issue_delay_vect.
foo.s: Generated assembly, with annotated instruction that is invalid
foo.c.139r.loop2_invariant: which shows the hoisting of the invariant.
This regression is caused by the fix to PR rtl-optimization/31360
--
Summary: [4.3 regression] Invalid loop optimization causes
bootstrap failure in genautomata
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: critical
Priority: P3
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rearnsha at gcc dot gnu dot org
GCC target triplet: arm-netbsdelf2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31848