------- 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