------- Additional Comments From rguenth at gcc dot gnu dot org 2005-02-16
09:52 -------
With PR15791 fixed we now create at -O2
void foo() ()
{
struct Foo * const this.6;
struct Foo * D.1654;
struct Foo * const this;
register struct Foo * D.1634;
struct Foo[2] * D.1633;
struct NonPod x;
<bb 0>:
this = &x.foo[2];
<L2>:;
this = this - 4;
D.1654 = 0B;
if (D.1654 + this == &x.foo) goto <L6>; else goto <L2>;
<L6>:;
return;
}
With PR19807 fixed (patch in testing) we're down to
void foo() ()
{
unsigned int ivtmp.1;
struct Foo * pretmp.0;
struct Foo * const this;
register struct Foo * D.1634;
struct Foo[2] * D.1633;
struct NonPod x;
<bb 0>:
ivtmp.1 = 2;
<L2>:;
ivtmp.1 = ivtmp.1 - 1;
if (ivtmp.1 == 0) goto <L6>; else goto <L2>;
<L6>:;
return;
}
which is PR17640 and the tree-unroller will happily unroll and optimize
to an empty function (before fixing PR19807 it wouldn't do that).
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19639