是否有任何API可以用llvm转换过程初始化我的自定义类对象?如果没有,实现这一点的最佳策略是什么?

是否有任何API可以用llvm转换过程初始化我的自定义类对象?如果没有,实现这一点的最佳策略是什么?,llvm,llvm-ir,llvm-c++-api,Llvm,Llvm Ir,Llvm C++ Api,我正在实现一个llvm转换过程。在某种程度上,我需要初始化我的自定义类对象并调用它的方法。 比如说: Foo* foo = new Foo(3); foo->createSomething(attrCount, foo) 我需要插入这些说明。我应该怎么做? 我想我必须使用AllocaInst,然后用IR Builder创建一个函数调用。但我到目前为止还不能把它写下来。不擅长LLVM或Clang,但我没有找到任何LLVM官方api可以用于这样的适应

我正在实现一个llvm转换过程。在某种程度上,我需要初始化我的自定义类对象并调用它的方法。 比如说:

 Foo* foo = new Foo(3);                   
 foo->createSomething(attrCount, foo)
我需要插入这些说明。我应该怎么做?
我想我必须使用AllocaInst,然后用IR Builder创建一个函数调用。但我到目前为止还不能把它写下来。

不擅长LLVM或Clang,但我没有找到任何LLVM官方api可以用于这样的适应,但我认为有一种间接的方法可能有助于解决您的问题

好的,你应该插入指令,就像那些在红外发出的叮当声。这可能很麻烦,因为您需要处理一些符号,如
Foo
new
createSomething

llvm::TypeFinder
将有助于查找指定的“类”类型,实际上类类型表示为StructType,您可以使用getName来查找所需的类型

对于一个函数,通常需要它的名称才能获取函数,但是名称在IR中被破坏了,所以应该首先获取被破坏的函数名称。据我所知,LLVM不提供这样的接口来破坏名称,所以您必须手动执行。例如,libclang中的
clang\u Cursor\u getMangling
可以在AST中获取损坏的名称(在libclang lol中获取AST非常容易)

最后,最后一步是使用
IRBuilder
创建一些指令来完成这项大任务,例如
CreateAlloca
CreateCall
,等等

希望这有帮助