c++11 - C++ 字符串到 LLVM IR

标签 c++11 llvm clang++ llvm-clang

我想采用这样的 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/

相关文章:

c++ - 为什么我们需要 std::move 在构造函数的初始化列表中?

c++ - 简单的复制和 move 操作有什么不同吗?

c++ - C++11 中的 std::forward_list swap() 实现

c++ - 为什么 clang++ 链接到 gcc?

c++ - std::make_shared 与 throw dtor 和 libc++ 不编译

c++ - 将捕获lambda作为函数指针传递

c - LLVM IR 浮点转换

variables - 什么是减少变量?谁能给我一些例子?

c - 为什么 LLVM 不使用 Xcode 编译 pch 文件中类型定义的 C block ?

c++ - 根据编译开关/NDEBUG 在 std::vector 的 at() 和 operator[] 之间交换