将编译器从 x86 汇编移植到 LLVM

Porting compiler from x86 Assembly to LLVM

本文关键字:LLVM 汇编 编译器 x86      更新时间:2023-10-16

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

此处提供了 LLVM IR 语言参考。请注意,这是一个详细的参考页面,而不是教程。x86 程序集和 LLVM IR 之间没有直接的一对一对应关系,但由于 LLVM IR 比 x86 程序集更高级别、更通用,因此将编译器从发出 x86 调整为发出 LLVM IR 应该不会太困难。

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

如果您在本教程中发现任何问题,请将其报告给LLVM错误跟踪器或邮件列表。本教程应正常运行,并且将修复任何报告的问题。

理解LLVM IR的另一个很好的入门资源是在线演示页面。它允许您在线将C代码块编译为LLVM IR(无需安装任何东西(,并且对于理解如何在LLVM IR中表示基本编程结构非常有帮助。