This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch] for PR 18040
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- To: zack at codesourcery dot com
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 19 Oct 04 18:51:10 EDT
- Subject: Re: [patch] for PR 18040
The tree optimizers do better on simple operations, which is why we
have GIMPLE in the first place.
Sure, but this begs the question of how we define "simple" ..
In fact, some people have argued that
we should be breaking up _all_ chains of dereference operations so
that the optimizers can see better.
The problem, however, is that the SSA-based optimizations operate mostly
on *scalars*, so making more aggregate temporaries, which is what
happens when you break up those chains, creates things that are hard to
remove under the present optimization environment.
Moreover, some of those temporaries will be of variable-size, which
we don't currently support.
> No, of course not. But I thought the idea is to encode each statement as
> one *expansion* operation.
I do not understand this statement.
Well, it's indeed not very well-defined, but what I was trying to get at is
that at the level of generating RTL, we treat a chain of reference
operators as if it were one operation, by merging all the offset calculations
into one. Indeed, I once made a proposal of having a "reference annotation"
that would formalize that approach and, for each dereference operation,
produce a variable that represented the cumulative offset up to that point.
If you do that, then the entire chain really *is* one operation for all
purposes except loop optimizers, which will want to look at array
references.