Richard Guenther <[EMAIL PROTECTED]> wrote on 01/05/2008 16:00:44:

> On Thu, May 1, 2008 at 2:19 PM, Olga Golovanevsky <[EMAIL PROTECTED]>
wrote:
> >
> >
> >  [EMAIL PROTECTED] 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.

Reply via email to