Carlo Kok via llvm-dev
2018-Jul-19 06:34 UTC
[llvm-dev] Optimization options at different levels
Hi,
What's the relation between the codegen optimization level passed to
TargetMachine and the optimizations done by the pass builder?
I noticed that when LLVM processes an Invoke it becomes something like:
0x10000194d <+29>: callq 0x1000017a0 ; createObj at
program.cs:13
0x100001952 <+34>: movq %rax, -0x30(%rbp)
0x100001956 <+38>: jmp 0x100001958 ; <+40> at
program.cs:19
0x100001958 <+40>: movq -0x30(%rbp), %rdi
0x10000195c <+44>: callq 0x10001a010 ; symbol stub for:
objc_retainAutoreleasedReturnValue
the problem here is that objc_autoreleaseReturnValue looks at the callstack and
immediate return has to be something like:
movq %rdi, %rax
callq objc_retainAutoreleasedReturnValue
However I don't want the optimizing to interfere with debug info. So my
question is, is there any combination of optimization modes that would remove
the pointless jmp and move the result of createObj directly to a parameter for
objc_retainAutoreleasedReturnValue but still keep debug info as it should be?