轻量级编译器实现 (一) 引言

本文回顾了早期采用LLVM工具链的编译器实现,讨论了性能需求对编译器的影响。为了提升编译速度和运行性能,作者团队研发了一款轻量级编译器后端,支持有限运算类型并利用运行时库处理复杂计算。该后端设计的中间表示略高于汇编,以实现高效转换。通过权衡和定制,轻量级编译器能更好地服务于特定需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前有在公司主导过工具后端的实现。这里权当总结和提炼一下思路了。

早期版本的实现

早期的版本,由于技术实力的储备不足,当时走的路线是软件的前端 + LLVM工具链。从后端的角度来看,实现就相当简单,把工具的数据结构转换成等价的LLVM IR. 剩下的就让LLVM的工具链来完成二进制文件的生成就可以了。除了少量的配置LLVM优化pipeline的工作之外,基本上就不需要什么深入的开发。

看,LLVM就是这么省心!

(LLVM的质量还是很不错的,在编译生成ARM指令时,除了attribute的调整做了少量适配之外,基本没怎么大动)

走通了编译流程之后,紧接着的就是性能的需求。不管是编译时,还是运行时,都对于工具本身提出了很高的要求。

PGO, LTO用来优化编译时。同时,不停的缩减pipeline中核心Pass的数量。编译性能在提升的同时,运行性能一直稳定的保持不变。但是,很遗憾的是,LLVM工具链就像是一个大象。让它很灵巧的转身,几乎是不可能的事情。而工具本身的特点,让它不需要那么多LLVM的pa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值