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

C++ 如何获取llvm内联asm操作数类型?,c++,c,assembly,llvm,llvm-clang,C++,C,Assembly,Llvm,Llvm Clang,我正在从事一个关于LLVM的内联asm的项目,但我遇到了一个有关asm操作数的问题。例如,我有如下代码: int a; int b; asm("nop": "=r"(a), "r"(b), "g"(30)); 我可以使用llvm::InlineAssembly::getAsmString()函数获取asm字符串“nop”,还可以使用llvm::InlineAsm::ParseConstraints函数获取约束“r imr”信息并迭代返回值。但我的问题是我无法获得asm操作数信息,尤其是asm

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

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


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

在LLVM中,
InlineAsm
Value
的子类,关联的值始终是指向函数的指针类型。组成函数的内容是asm代码本身

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

剩下的很简单:
Type*FunctionType::getReturnType()
获取输出参数,以及
FunctionType::params()
或类似的获取输入参数