Sai Venkata Krishnan V via llvm-dev
2021-May-03 11:22 UTC
[llvm-dev] Reg: Adding Intrinsic at start of every function
Hello Everyone I have create a new intrinsic in RISCV and I am trying to insert it at the start of every function based on Command-Line argument which determines the list of functions to omit. I expect this intrinsic to be inserted at the start of function as first instruction. Is this possible with a normal Module pass using opt command? Or, should I look into MachineFunction pass? Please guide me in this. Thanking you Sai -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210503/00c0869f/attachment.html>
Armand Behroozi via llvm-dev
2021-May-04 15:11 UTC
[llvm-dev] Reg: Adding Intrinsic at start of every function
Hey, I'm probably not the best person to answer this, but I'll say something in case no one else does b/c something is better than nothing. I noticed you re-asked your question, so I'm replying on the older one in case someone more qualified sees the more recent one. I'm going to assume by "intrinsic" you mean an llvm intrinsic function. If you're asking your question here, it sounds like you probably already tried inserting your intrinsic function as the first IR instruction, looked at the assembly and noticed that your instruction/instruction sequence isn't the first one in the function. It's possible that there's a way to do it in IR, but if there is, idk how to do it. If I were to do it, I'd use a machine function pass like you suggest and instead of an intrinsic create and insert the instruction as part of the last pass in the codegen process (end of preEmit2 in x86). That way you have total control where the instruction goes and know nothing in the codegen process is going to move it. MachineFunction passes sound scary, but here's a pretty pain-free link for how to write your first one: https://www.kharghoshal.xyz/blog/writing-machinefunctionpass. It's for x86, but I'm sure you could do the same thing for RISC-V. There's one typo: " In the pass's .cpp file "createX86MachineInstrPrinter*Pass*" is defined, and in the other files "createX86MachineInstrPrinter" is used." They just need to be the same. All the best. Regards, Armand On Mon, May 3, 2021 at 12:03 PM Sai Venkata Krishnan V via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hello Everyone > I have create a new intrinsic in RISCV and I am trying to insert it at > the start of every function based on Command-Line argument which determines > the list of functions to omit. I expect this intrinsic to be inserted at > the start of function as first instruction. Is this possible with a normal > Module pass using opt command? Or, should I look into MachineFunction pass? > Please guide me in this. > > Thanking you > Sai > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210504/307fe203/attachment.html>