This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Redundant malloc in structure optimization? (testsuite/gcc.dg/struct/wo_prof_global_var.c)
- From: Olga Golovanevsky <OLGA at il dot ibm dot com>
- To: "Richard Guenther" <richard dot guenther at gmail dot com>
- Cc: "Bingfeng Mei" <bmei at broadcom dot com>, gcc at gcc dot gnu dot org, "Kenneth Zadeck" <zadeck at naturalbridge dot com>
- Date: Thu, 1 May 2008 23:42:42 +0300
- Subject: Re: Redundant malloc in structure optimization? (testsuite/gcc.dg/struct/wo_prof_global_var.c)
Richard Guenther <richard.guenther@gmail.com> wrote on 01/05/2008 16:00:44:
> On Thu, May 1, 2008 at 2:19 PM, Olga Golovanevsky <OLGA@il.ibm.com>
wrote:
> >
> >
> > gcc-owner@gcc.gnu.org wrote on 28/04/2008 12:36:44:
> >
> >
> > > Hello,
> > > I am looking at a testsuite failure (wo_prof_global_var.c) in my
> > > porting. Somehow, I found GCC 4.3.0 seems to generate unnecessary
malloc
> > > during structure optimization. In the code, the structure is split
into
> > > two individual fields (D.2240 and D.2242) and they are allocated
> > > separately. But the original structure (D.2215) is still allocated,
and
> > > not used afterward. The following RTL-level optimization cannot
> > > eliminate it.
> >
> > I think that p is global, and in my understanding right now we have no
> > whole
> > program dead code elimination optimization in gcc, but may be I am
wrong.
>
> You cannot remove p, but if you could split up the allocation for *p then
you
> can for sure remove the original allocation for *p. Otherwise you
generated
> wrong code in the first place, which you certainly did, if p was global.
Again, struct-reorg is a whole program optimization. It explicitly checks
the>
"whole-program" flag at its gate. It checks the safety of transformation
through
ipa-type-escape analysis and other escape analysis inside struct-reorg. If
it
decides it is safe to transform, it replace all variables of specific
structure
type along with their allocations and accesses. It has obviously enough
information
to eliminate both a malloc statement and p, even if p is global. But it's
question
whether it's a right place to do it inside struct-reorg. For example,
function
level optimizers rely on dce for this matter.
Olga
>
> Richard.