I wonder whether there is a plan to optimize code such as this:
extern int ffff(const int x);
void hhhh() {
ffff(444);
ffff(444);
}
by not pushing the constant argument twice. It seems safe to do so,
because the function called will not modify its argument on the stack.
The experiment I did with gcc 4.4.1 -O3 indicates this is not currently
being done, with this result:
movl $444, (%esp)
call ffff
movl $444, (%esp)
call ffff
The application I have in mind is putting a pointer to thread local
storage as the last argument for many functions.