我想采用这样的 C++ lambda 函数的字符串表示形式:
string fun = "[](int x) { return x + 5;}";
string llvm_ir = clang.get_llvm_ir(fun); // does something like this exist?
并使用 C++ 中的 Clang 将其转换为 LLVM IR。有没有办法直接使用 Clang 的内部 API 来执行此操作?
最佳答案
据我所知,没有稳定的、官方支持的 API 可以执行此操作。 Clang C API提供前端级信息(源代码级)。 Clang 工具也不提供此功能。
不过您确实有不错的选择。最简单的方法是将 Clang 前端作为子进程调用 clang -cc1 -emit-llvm ...<other options>
.这将生成一个 LLVM IR 文件,您可以随后阅读该文件。这在编译器中实际上是相当普遍的做法 - Clang 驱动程序本身执行此操作 - 它调用前端和一堆其他工具(如链接器),具体取决于特定的编译任务。
或者,如果您觉得必须为此提供一个编程 API,您可以深入挖掘 Clang 前端的代码(上面提到的 -cc1
调用),看看它是如何实现的,并收集点点滴滴的代码。不过,请做好编写大量脚手架的准备,因为这些 API 并非设计用于外部使用。
重申一下,可以使用内部 API,但没有简单或推荐的方法遵循此路径。
关于c++11 - C++ 字符串到 LLVM IR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25694231/