是否有任何 API 可以使用 llvm 转换传递初始化我的自定义类对象?如果没有,实现此目的的最佳策略是什么?



我正在实现一个llvm转换传递。在某些时候,我需要初始化我的自定义类对象并调用它的方法。 例如:

Foo* foo = new Foo(3);                   
foo->createSomething(attrCount, foo)

我需要插入这些说明。我该怎么办? 我想我必须使用 AllocaInst,然后使用 IR Builder 创建一个函数调用,但直到现在我都无法将其记下来。

不是LLVM或Clang的专家,但我没有找到任何LLVM官方api,你可以用于这种适合,但我认为有一种间接的方法可能有助于解决你的问题。

AFAIK,您应该插入像 IR 中由叮当声发出的指令一样的指令。这可能会很麻烦,因为您需要处理一些符号,例如FoonewcreateSomething

llvm::TypeFinder找到指定的"类"类型很有用,实际上类类型表示为 StructType,您可以获取 Name 来查找所需的类型。

对于一个函数,通常需要它的名称才能获得函数,但名称在 IR 中被篡改,因此您应该首先获取函数的损坏名称。据我所知,LLVM 不提供这样的接口来破坏名称,因此您必须手动执行此操作。例如,libclang 中的clang_Cursor_getMangling可以在 AST 中获得损坏的名称(在 libclang 中获得 AST 非常容易,哈哈(。

最后,最后一步是使用IRBuilder创建一些指令来完成大工作,例如CreateAllocaCreateCall等。

希望这有帮助。

相关内容

最新更新