C++字符串转换为LLVM IR

3
我可以帮助您翻译以下内容:

我想将C++ lambda函数的字符串表示形式转换为如下:

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

如何使用Clang内部API直接在C++中将代码转换为LLVM IR?

1个回答

4
据我所知,目前没有稳定、官方支持的API可以实现这一功能。 Clang C API 提供了前端级别信息(源代码级别),但Clang工具并不提供此功能。
不过,你有很好的选择。最简单的方法是将Clang前端作为子进程调用 clang -cc1 -emit-llvm ...<other options>。这将生成一个LLVM IR文件,然后您可以读取该文件。在编译器中,这实际上是相当普遍的做法 - Clang驱动程序本身就是这样做的 - 它调用前端和其他一些工具(如链接器),具体取决于特定的编译任务。
或者,如果你觉得必须要有一个编程API来实现这个功能,你可以深入了解Clang前端的代码(上面提到的-cc1调用)来看它是如何实现的,并收集一些代码片段。但要准备写大量的脚手架代码,因为这些API并不是为外部使用而设计的。
再次强调,使用内部API实现可能是可行的,但是这条路并不容易或推荐。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接