【问题标题】:How to get llvm inline asm operands type?如何获得 llvm 内联 asm 操作数类型?
【发布时间】:2015-05-24 21:29:26
【问题描述】:

我正在从事一个关于 LLVM 的内联 asm 的项目,但我遇到了一个关于 asm 操作数的问题。例如,我有这样的代码:

int a;
int b;
asm("nop": "=r"(a), "r"(b), "g"(30));

我可以使用 llvm::InlineAssembly::getAsmString () 函数获取 asm 字符串“nop”,也可以使用 llvm::InlineAsm::ParseConstraints 函数获取约束“r r imr”信息并迭代返回值。但我的问题是我无法获取 asm 操作数信息,尤其是 asm 操作数类型(a 为整数类型,b 为整数类型,30 为常量 int)。

那么有人知道有什么方法可以获取 asm 操作数信息吗?

【问题讨论】:

    标签: c++ c assembly llvm llvm-clang


    【解决方案1】:

    在 LLVM 中,InlineAsmValue 的子类,并且关联的值始终是 pointer-to-function 类型。该组合函数的内容就是 asm 代码本身。

    因此,要获得操作数的类型,您可以像使用指向函数的指针一样对其进行分析。你有一个方便的FunctionType *InlineAsm::getFunctionType() const,它完成了一半的工作。

    其余部分非常简单:Type * FunctionType::getReturnType() 用于获取输出参数,FunctionType::params() 或类似方法用于获取输入参数。

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 1970-01-01
      • 2016-03-30
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多