Denys Vlasenko writes:
 > On Monday 08 October 2007 13:50, Heikki Linnakangas wrote:
 > > While profiling a test case of exporting data from PostgreSQL, I noticed
 > > that a lot of CPU time was spent in sprintf, formatting timestamps like
 > > "2007-10-01 12:34". I could speed that up by an order of magnitude by
 > > replacing the sprintf call with tailored code, but it occurred to me
 > > that we could do the same in a more generic way in GCC.
 > 
 > It is already done in gcc to some extent: for example, it
 > replaces printf("message\n") with puts("Message").
 > 
 > It's too far-fetched for my tastes. I think gcc should not do it.
 > How gcc can know what printf() and puts() mean in *my* libc?

We can easily handle that with attributes.  If a function is called
printf and has attribute printf then we can make the substitution.  

Anway, we already do printf optimization:

p ()
{
  printf ("Hello, World!\n");
}

results in

p:
        movl    $.LC0, %edi
        call    puts
        ret

Andrew.

Reply via email to