我希望从C代码生成LLVM-IR代码,并且想知道函数的IR生成有多好:
stdio.h,string.h,stdlib.h以及一般基于标准内存的函数,如malloc,calloc,因为我还没能找到大部分常用函数:http://llvm.org/docs/LangRef.html并且想知道这种表示的局限性以及是否可能需要添加我自己的内在函数来处理标准/最常用的c函数。
我希望在运行时更改代码,所以想知道哪种方法会给我最大的灵活性,例如:在AST级操作代码。
由于
答案 0 :(得分:6)
从C发出LLVM IR正是工业级编译器Clang所做的。我建议在-emit-llvm
的C代码的小片段上运行Clang(本文档中的详细信息: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模块中。