使用Llvm传递插入内联汇编表达式

时间:2015-02-28 22:37:50

标签: assembly insert llvm inline

我正在尝试使用llvm传递创建和附加内联汇编表达式。我知道我可以使用 void appendModuleInlineAsm(StringRef Asm) ,但我无法使其正常工作。

基本上我想附加一条这样的指令:

%X = call i32 asm "bswap $0", "=r,r"(i32 %Y)

在另一条指令之前。有人试过吗?

1 个答案:

答案 0 :(得分:2)

基本理念:

a)你想要一个函数传递迭代指令, b)您希望遍历基本块和指令,直到找到之前要插入的指令, c)做类似下面的事情:

  llvm::InlineAsm *IA =
    llvm::InlineAsm::get(FTy, AsmString, Constraints, HasSideEffect,
                         /* IsAlignStack */ false, AsmDialect);
  llvm::CallInst *Result = Builder.CreateCall(IA, Args);
  Result->addAttribute(llvm::AttributeSet::FunctionIndex,
                       llvm::Attribute::NoUnwind);
从铿锵声中被偷走了。查看InlineAsm的文档以获取其余参数,Builder是DIBuilder实例。确保在所需位置设置DIBuilder插入点。