I want to replace all the return instructions in the program with pop ; jmp .
Should I use IRBuilder in LLVM IR level?
I found that there is a IRBuilder::CreateIndirectBr
Or Should I modify the code in lib/Target/X86/X86ISelLowering.cpp in backend ?
I found that there is a X86TargetLowering::LowerCall
Which is better?
IndirectBr only works for Branch instructions, not ret.
The latter one seems likely however I’m no where near a backend expert so I could be wrong : (
You might be able to just check for the return instruction in X86AsmPrinter::EmitInstruction where we convert from MachineInstr to MCInst. You can change it to a POP and a JUMP MCInst.
Legalization steps in X86ISelLowering.cpp seems like your way to go, perhaps not even legalization and go straight away to LowerReturn.