Could __builtin_printf parameters be optimized when being compiled
Richard Earnshaw
Richard.Earnshaw@foss.arm.com
Wed Feb 15 14:30:54 GMT 2023
On 15/02/2023 14:18, Jonny Grant wrote:
> Hi
> Has GCC considered an improvement to "compile out" from the builtin printf the strings? That being to change it to just be something like puts("file /app/example.cpp:4")
> I had a look, but couldn't find it being asked before.
>
> This is just a short example to demonstrate.
> It would be useful to see the exact string in the debugger "file /app/example.cpp:4", also it saves a few lines of asm.
>
> https://godbolt.org/z/aKz3o6aPd
>
>
> int main()
> {
> __builtin_printf("file %s:%d", __FILE__, __LINE__);
> }
>
>
> .LC0:
> .string "/app/example.cpp"
> .LC1:
> .string "file %s:%d"
> main:
> subq $8, %rsp
> movl $4, %edx
> movl $.LC0, %esi
> xorl %eax, %eax
> movl $.LC1, %edi
> call printf
> xorl %eax, %eax
> addq $8, %rsp
> ret
We already do when the printf contains simply the format string and no
additional arguments.
I guess it might be possible to handle cases where all the arguments are
constant, but even that has its problems, eg:
- can we guarantee identical output to the platform printf?
- does it cause string bloat (what if there were 30 or so such
statements in your program all identical except for the line number)?
- does it even happen often enough to be worth adding (and maintaining)
support? Nothing comes for free in a compiler and the optimisations
have to be worth-while in the real world.
R.
More information about the Gcc-help
mailing list