Gio*_*aro 5 assembly inline insert llvm
我正在尝试使用 llvm 传递创建和附加内联汇编表达式。我知道我可以使用 void appendModuleInlineAsm(StringRef Asm),但我无法让它工作。
基本上我想附加这样的指令:
%X = call i32 asm "bswap $0", "=r,r"(i32 %Y)
Run Code Online (Sandbox Code Playgroud)
就在其他指令之前。有人试过吗?
基本思想:
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);
Run Code Online (Sandbox Code Playgroud)
这是从 clang 中随意窃取的。查看 InlineAsm 的文档了解其余参数,Builder 是一个 DIBuilder 实例。确保在所需位置设置 DIBuilder 插入点。
| 归档时间: |
|
| 查看次数: |
1164 次 |
| 最近记录: |