------- Additional Comments From dnovillo at redhat dot com  2005-06-09 16:55 
-------
Subject: Re:  GCC should combine adjacent stdio calls

On Thu, Jun 09, 2005 at 04:49:40PM -0000, ghazi at gcc dot gnu dot org wrote:
> 
> ------- Additional Comments From ghazi at gcc dot gnu dot org  2005-06-09 
> 16:49 -------
> (In reply to comment #4)
> > (In reply to comment #1)
> > > If side effects appear in the arguments, that also would be a problem, 
> > > e.g.:
> > > 
> > > printf("%d", i++);
> > > printf("%d", i++);
> > > 
> > > should not be turned into:
> > > 
> > > printf("%d%d", i++, i++);
> > > 
> > There should be little danger of this.  Side-effects are explicitly exposed 
> > in
> > GIMPLE.  As long as the printf() calls are adjacent, we should be able to
> > combine them.
> > Diego.
> 
> I'm not sure.  In my specific example above, after the combination we don't 
> know which i++ gets executed first because the order is not guaranteed within 
> an argument list of a single function call (right?)  So if we want to include 
> combinations whose arguments have side-effects, we have to prove they don't 
> interact with any other arguments.
> 
But remember that we are not optimizing C, we are optimizing
GIMPLE.  And in GIMPLE we don't have those problems.  Here's what
the tree optimizers see:

i_3 = i_1 + 1;
printf (&"%d"[0], i_1);
printf (&"%d"[0], i_3);


Those two calls to printf can be merged.  The order of evaluation
has been decided by the gimplifier.  Whether that's right or
wrong for C, I couldn't say, all I know is that for the
optimizers, those two printf calls look mergeable.


Diego.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21982

Reply via email to