2

我希望从 C 代码生成 LLVM-IR 代码,并且想知道以下函数的 IR 生成情况如何:

stdio.h、string.h、stdlib.h 以及通常基于标准内存的函数,例如 malloc、calloc,因为我无法在以下位置找到大多数常用函数:

http://llvm.org/docs/LangRef.html并且想知道这种表示的局限性以及是否可能需要我添加自己的内在函数来处理标准/最流行的 c 函数。

我希望在运行时更改代码,所以想知道哪种方法会给我最大的灵活性,例如:改为在 AST 级别操作代码。

谢谢

4

1 回答 1

7

从 C 发出 LLVM IR 正是工业级编译器 Clang 所做的。我建议在 C 代码的小片段上运行 Clang -emit-llvm(本文档中的详细信息: http: //clang.llvm.org/get_started.html)并观察生成的 IR。

您甚至可以在浏览器中执行此操作:http: //ellcc.org/demo/index.cgi

这将使您了解如何memcpy处理内置函数以及任何其他类似的疑问。

请注意,LLVM 和 Clang 都没有携带完整的 C 库,但它们可用于编译现有的库。newlib 是一个流行的可移植 C 库,专为在各种新平台上构建而设计。例如, PNaCl使用它将 C/C++ 代码构建成可移植的可执行文件——它将 newlib 与用户的代码一起编译成单个 LLVM IR 模块。

于 2013-11-05T23:22:17.420 回答