【发布时间】:2013-11-17 00:13:48
【问题描述】:
我希望从 C 代码生成 LLVM-IR 代码,并且想知道以下函数的 IR 生成效果如何:
stdio.h、string.h、stdlib.h 以及一般标准的基于内存的函数,例如 malloc、calloc,因为我无法在以下位置找到大部分常用函数:
http://llvm.org/docs/LangRef.html 并且想知道这种表示的局限性,以及是否可能需要我添加自己的内在函数来处理标准/最流行的 c 函数。
我希望在运行时更改代码,所以想知道哪种方法会给我最大的灵活性,例如:改为在 AST 级别操作代码。
谢谢
【问题讨论】:
-
我为类似 C 的语言编写了一个编译器,并针对您引用的 LLVM 汇编语言。它需要一点时间来适应并且有一些细微差别,但我对这个选择感到满意。您可以使用 clang 编译标准库,然后将其与您的代码链接。我发现使用 clang 将 C 编译为 llvm 程序集很有用,然后查看它以了解有关在 llvm 程序集中如何完成的信息。但是在运行时操作代码,即 JIT 编译,则完全不同。
-
嗨,我实际上正在考虑使用 LLVM Mutate 操作 LLVM-IR 来表示我希望做的小代码更改,例如:将参数更改为标准库函数等。
标签: c llvm llvm-clang llvm-ir