反序列化LLVM类型

时间:2016-07-08 23:01:19

标签: c++ llvm llvm-ir llvm-c++-api

有没有办法从llvm反序列化一个类型,即i32并返回llvm::Type*

就像这样:

std::string llstring = "i32*";

llvm::Type* lltype = xxxxxxx(llstring);

因为LLVM类型非常简单,所以编写自己的类型很容易,但我知道必须存在,因为llvm-as之类的工具存在,而且显然必须解析类型。

我已经对解析代码进行了一些挖掘,并且看起来似乎很容易使用它们的解析器,因为你需要首先从我能看到的构建一个llvm :: LLLex类。加载.ll.源文件时使用的解析器似乎是here。据我所见,它完全嵌入在他们的代码中,并且是在无法访问的私有文件中(不在include目录中)。

一个可以工作的黑客就是使用该函数生成一些IR并解析它并从中获取类型:

std::string IR = "@G = external global " + llstring;
auto module = llvm::parseAssemblyString(IR, ...);
llvm::Type* lltype = llvm::getNamedValue("G")->getType();

我有什么遗失的吗?如果他们在llvm::Type中提供a print function,那么接下来似乎是一个基本的内置类型解析器,因为这不依赖于上下文(根据我的理解)。

0 个答案:

没有答案