将编译器从x86 Assembly移植到LLVM

时间:2012-04-29 12:19:56

标签: c++ assembly compiler-construction x86 llvm

最近,为了磨练我的装配技巧,我在C ++中为玩具语言编写了一个非常简单的编译器。它运行单次传递,并在解析阶段直接将代码发送到几个字符串流,每个字符串流代表一段代码(即一个代表section .bss,而其他代表.data.text) 。然后,这些字符串流被写入文件,我使用NASM和gcc来汇编和链接它们。我知道这种单遍方法效率非常低,但同样,这更像是一种理解代码生成阶段的练习。无论如何,我想修改我的代码直接发出LLVM IL而不是原始程序集,再次作为学习练习。是否有LLVM IL的入门级指南?或者,更好的是,确定装配线的等效IL代码的工具?我看了,我只找到了完整的规格,这比我需要的更多信息。

1 个答案:

答案 0 :(得分:14)

LLVM IR语言参考是available here。请注意,这是一个详细的参考页面,而不是教程。 x86汇编和LLVM IR之间没有直接的一对一对应关系,尽管由于LLVM IR比x86汇编更高级且更通用,因此编译器从发出x86到发出LLVM IR不应该太困难。 / p>

官方LLVM文档带有detailed tutorial,它绝对是您的最佳起点 - 它从简单的高级编程语言到LLVM IR创建玩具编译器。通过它,您将学习LLVM的许多关键概念,然后能够有效地使用上述语言参考。

如果您发现本教程有任何问题,请将它们报告给LLVM错误跟踪器或邮件列表。预计该教程将正常运行,任何报告的问题都将得到修复。

理解LLVM IR的另一个好的开始资源是online demo page。它允许您在线编译C代码块到LLVM IR(无需安装任何东西),并且应该非常有助于理解如何在LLVM IR中表示基本编程结构。