K Jelesnianski via llvm-dev
2019-Nov-13 20:27 UTC
[llvm-dev] Quick question: Where to patch function argument b4 LTO inlining?
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 tried ** 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.