Sam*_*ese 11 c++ compiler-construction x86 assembly llvm
最近,为了磨练我的装配技巧,我在C++中为玩具语言编写了一个非常简单的编译器.它运行单次传递,并在解析阶段直接将代码发送到几个字符串流,每个字符串流代表一段代码(即一个代表section .bss
,而其他代表.data
和.text
).然后,这些字符串流被写入文件,我使用NASM和gcc来汇编和链接它们.我知道这种单遍方法效率非常低,但同样,这更像是一种理解代码生成阶段的练习.无论如何,我想修改我的代码直接发出LLVM IL而不是原始程序集,再次作为学习练习.是否有LLVM IL的入门级指南?或者,更好的是,确定装配线的等效IL代码的工具?我看了,我只找到了完整的规格,这比我需要的更多信息.
Eli*_*sky 14
LLVM IR语言参考可在此处获得.请注意,这是一个详细的参考页面,而不是教程.x86汇编和LLVM IR之间没有直接的一对一对应关系,尽管由于LLVM IR比x86汇编更高级且更通用,因此编译器从发出x86到发出LLVM IR应该不会太困难.
官方LLVM文档附带了一个详细的教程,绝对是最适合您的起点 - 它从简单的高级编程语言到LLVM IR创建玩具编译器.通过它,您将学习LLVM的许多关键概念,然后将能够有效地使用上述语言参考.
如果您发现本教程有任何问题,请将它们报告给LLVM错误跟踪器或邮件列表.预计该教程将正常运行,任何报告的问题都将得到修复.
另一个了解LLVM IR的良好开端资源是在线演示页面.它允许您在线编译C代码块到LLVM IR(无需安装任何东西),并且应该非常有助于理解如何在LLVM IR中表示基本编程结构.