我正在尝试使用llvm传递创建和附加内联汇编表达式.我知道我可以使用void appendModuleInlineAsm(StringRef Asm),但我无法使其工作.
基本上我想附加这样的指令:
%X = call i32 asm "bswap $0", "=r,r"(i32 %Y)
就在另一条指令之前.有人试过吗?
最佳答案 基本理念:
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插入点.