LLVM在指令之前插入操作码

时间:2013-11-04 11:58:17

标签: llvm llvm-ir llvm-c++-api

我想在BasicBlock终结符之前插入特定的操作码,在我的情况下是在ReturnInst之前。

有可能吗?

示例:

TerminatorInst* terminator = BasicBlock->getTerminator();
if (isa<ReturnInst>(terminator))  
{
//Insert opcode here.    
}

2 个答案:

答案 0 :(得分:1)

通过&#34;操作码&#34;我想你的意思是&#34;指令&#34;。

所有指令都有一个构造函数,它接收另一条指令作为其最后一个参数;该构造函数创建新指令,然后在作为最后一个参数给出的指令之前插入它,正是您正在寻找的内容。

有关此内容的详细信息,请参阅"creating and inserting new instruction" section of the user guide

答案 1 :(得分:1)

使用 llvm :: InlineAsm

解决了问题
llvm::InlineAsm *AsmCode = llvm::InlineAsm::get(Asm, nopInstruction, "", true, false, llvm::InlineAsm::AD_Intel);

其中Asm - llvm :: FunctionType,nopInstruction - llvm :: StringRef(char *)