2014-09-05 82 views
3

我想利用一个C++ lambda函数的字符串表示这样的:C++字符串LLVM IR

string fun = "[](int x) { return x + 5;}"; 
string llvm_ir = clang.get_llvm_ir(fun); // does something like this exist? 

和它使用锵从C转换为LLVM IR ++。有没有办法直接使用Clang的内部API来做到这一点?

回答

4

据我所知,没有稳定的,官方支持的API来执行此操作。 Clang C API提供前端级别信息(源代码级别)。 Clang工具也没有提供这一点。

尽管你有很好的选择。最简单的方法就是将Clang前端作为子进程clang -cc1 -emit-llvm ...<other options>进行调用。这将产生一个LLVM IR文件,然后您可以阅读。在编译器中这实际上是相当普遍的做法 - Clang驱动程序本身就是这样做的 - 它调用前端和一些其他工具(如链接器),具体取决于具体的编译任务。另外,如果你觉得你必须有一个编程API,你可以挖掘Clang前端的代码(上面提到的-cc1调用),看看它是如何实现它,并收集零碎的东西码。尽管如此,准备编写大量的脚手架,因为这些API并非旨在用于外部。

要重申,它可能使用内部API,但是在此路径之后没有简单或推荐的方法。