去年年底,有消息称,为加强软件生态建设,龙芯为 GCC和LLVM编译器和相关 GNU 工具链组件提供 LoongArch 指令级架构(IS)支持。最近,LLVM 15.0的开发树上出现了对中国的LoongArch CPU架构的初始补丁。
LLVM是一种编译器,它的模块化设计很好,这个编译器中的很多功能可以被单独实现或者改进。LLVM可以被设计成很多语言编译器实现的后端,负责处理程序优化和跨平台,而前端只需将程序转换成LLVM IR即可。比如说,Clang就是基于LLVM实现的C/C++编译器,它的主要功能就是将C/C++程序转换成LLVM IR,然后由LLVM负责后续的工作。
LLVM技术上的(最大)优势就在于它的模块化设计。在LLVM中,IR的解析,优化,汇编码的生成,寄存器分配,汇编码优化以及机器码生成,各种类型的二进制文件生成全部都是接口定义清晰的模块完成的,很容易分别改进或者添加定制功能。而且由于LLVM的C++实现,很多模块理解和使用比较容易。这些特性使得LLVM可以很容易地被用在科研和生产实践当中。反观GCC,模块化做得不如LLVM好,这使得它定制或者改进比较不方便。
目前,LLVM编译器社区已经正式合入了对Loongarch架构的初步支持,其主干源码库中已经出现了跟X86和ARM并列的LoongArch顶层目录。这对于龙芯而言是一个里程碑。很多开源项目已经接受了对LoongArch的支持,众人拾柴火焰高,相信随着支持LoongArch的软件越来越丰富,龙芯生态会在这个过程中茁壮成长。