[Bug tree-optimization/21982] GCC should combine adjacent stdio calls

joseph at codesourcery dot com gcc-bugzilla@gcc.gnu.org
Thu Jun 9 19:29:00 GMT 2005


------- Additional Comments From joseph at codesourcery dot com  2005-06-09 19:29 -------
Subject: Re:  GCC should combine adjacent stdio
 calls

On Thu, 9 Jun 2005, dnovillo at redhat dot com wrote:

> Oh, absolutely.  The algorithm I'm using will naturally do this.
> This is a purely local transformation, we obviously cannot merge
> builtins in different control flow paths, so the transformation
> goes like this: when we get to a builtin, we try to merge it with
> a previously found builtin.  The only time we reset the concept
> of "previously found builtin" is when we find a CALL_EXPR or an
> ASM_EXPR which are the only ones that may have side-effects
> affecting the output of the program.
> 
> If the program manipulates the same FILE * that is being used by
> the stdio calls, then we'd lose.  But I think that's fair game,
> right?

Although it may not be valid to manipulate the FILE * directly, it seems 
quite possible that a program might call another <stdio.h> function 
between the printf calls, that function on the particular implementation 
having a macro expansion without a function call.  It is also possible 
that values of arguments to the second built-in printf call may depend on 
the first one having been previously evaluated; for example, given

extern char *s;
extern int i;

printf("%d", i);
printf("%.5s", s);

you can't merge the printf calls because the first one could have changed 
what is pointed to by s.



-- 


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



More information about the Gcc-bugs mailing list