This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/21488] [4.0/4.1 regression] Not copy propagating single-argument PHIs causes out-of-ssa coalescing failure
- From: "rakdver at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 10 May 2005 22:28:51 -0000
- Subject: [Bug tree-optimization/21488] [4.0/4.1 regression] Not copy propagating single-argument PHIs causes out-of-ssa coalescing failure
- References: <20050510124823.21488.steven@gcc.gnu.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From rakdver at gcc dot gnu dot org 2005-05-10 22:28 -------
Actually, ivopts do not produce any "unresolvable overlapping live ranges".
It does not change life range of j_8 at all, and only replaces the variable
i by more suitable strength reduced version ivtmp.6. Note that immediately
after ivopts, ivtmp.6_2 and ivtmp.6_1 can be coalesced.
Some later pass renames all the references to ivtmp.6 to j, thus creating the
overlapping life ranges.
The loop may become one of the following three possibilities:
a)
x = 5;
while (1)
{
j = x;
bar (j);
x = x + 3;
if (...)
break;
}
return j;
or
b)
x = 5;
while (1)
{
bar (x);
x1 = x + 3;
if (...)
break;
x = x1;
}
return x;
or
c)
x = 5;
while (1)
{
bar (x);
if (...)
break;
x = x + 3;
}
return x;
a) is the one chosen by ivopts.
b) is the one some copy propagation pass converts it to later.
c) is not used by ivopts in order to prevent creation of loops with multiple
basic blocks (see PR 19038). It would be possible to teach ivopts to handle
this special case, but I don't think c) is that much better than a) (one more
assignment inside the loop body, but a) is easier to schedule).
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21488