【问题标题】:C++ string to LLVM IRC++ 字符串到 LLVM IR
【发布时间】:2014-10-30 21:36:26
【问题描述】:

我想采用这样的 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 来做到这一点?

【问题讨论】:

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


    【解决方案1】:

    据我所知,没有稳定的、官方支持的 API 可以执行此操作。 Clang C API 提供前端级别的信息(源代码级别)。 Clang 工具也不提供此功能。

    不过,您确实有不错的选择。最简单的方法是将 Clang 前端作为子进程 clang -cc1 -emit-llvm ...<other options> 调用。这将生成一个 LLVM IR 文件,然后您可以读取该文件。这实际上是编译器中相当普遍的做法——Clang 驱动程序本身就是这样做的——它调用前端和一堆其他工具(如链接器),具体取决于具体的编译任务。

    或者,如果你觉得你必须有一个编程API,你可以挖掘Clang前端的代码(上面提到的-cc1调用)看看它是如何完成的,并收集点点滴滴的代码。不过,请准备好编写大量的脚手架,因为这些 API 并不是为外部使用而设计的。

    重申一下,可以使用内部 API,但没有简单或推荐的方法遵循此路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多