[llvm-dev] Quick question: Where to patch function argument b4 LTO inlining?

K Jelesnianski via llvm-dev llvm-dev at lists.llvm.org
Wed Nov 13 12:27:37 PST 2019

I am building and inserting a function call in IR, but one of my
parameters needs to the address of the current stack address ($RSP).
Also add in that I have LTO inlining this small function call.

My patch worked when we did not have inlining of the function. Just replaced
MOV64ri $RDI, 0x0       with
MOV64rr $RDI, $RSP     to set parameter 0 to the stack addr.

With inlining, I currently then have tried to "patch" the UndefValue
to be $RSP except it seems LTO is optimizing out the UndefValue
parameter, so patching via a machine function pass isnt working out.

Question: Where in LLVM code (I assume somewhere in lowering stage,
but would appreciate a little more guidance here) can I update the
function parameter/operand from the undefValue it is via IR level to
be $RSP once LLVM knows we are working with an X86 target??

Thank you in advance,

Christopher Jelesnianski
Graduate Research Assistant
Virginia Tech

At the IR level, to my knowledge, there is no way to "build" an
argument Value that represents $RSP. So for the time being I have
** ConstantInt (inlining statically optimizes and adds any int I
provide to the function body integers already there)
** ConstantPointerNull (creates xor code to represent null ptr as 0x0,
but also statically optimizes out the addition in the function body
with the parameter)
** UndefValue. (doesn't add any extra ASM at all so the addition asm is missing)

Undefvalue has gotten me the furthest, but I still need the ASM to
properly be generated such that I can just replace the dummy value
from IR level with RSP register.

More information about the llvm-dev mailing list