如何获取llvm内联asm操作数类型?

5 c c++ assembly llvm llvm-clang

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

int a;
int b;
asm("nop": "=r"(a), "r"(b), "g"(30));
Run Code Online (Sandbox Code Playgroud)

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

所以有人知道有没有办法获得asm操作数信息?

rod*_*igo 0

在 LLVM 中,InlineAsm是 的子类Value,并且关联的值始终是函数指针类型。该虚构函数的内容就是 asm 代码本身。

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

其余的非常简单:Type * FunctionType::getReturnType()获取输出参数和FunctionType::params()/或类似于获取输入参数。