[llvm-dev] Optimization options at different levels
    Carlo Kok via llvm-dev 
    llvm-dev at lists.llvm.org
       
    Wed Jul 18 23:34:56 PDT 2018
    
    
  
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?
    
    
More information about the llvm-dev
mailing list