QBE – 编译器后端

Hacker News Top 工具

摘要

QBE 是一个紧凑的、爱好级别的编译器后端,仅用 10% 的代码即可实现工业级优化编译器 70% 的性能,支持 amd64、arm64 和 riscv64,并采用简单的基于 SSA 的中间语言。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/05/08 15:28

# QBE - 编译器后端 来源:https://c9x.me/compile/ - 简介 (https://c9x.me/compile/) - 文档 (https://c9x.me/compile/docs.html) - 用户 (https://c9x.me/compile/users.html) - 发布 (https://c9x.me/compile/releases.html) - 代码 (https://c9x.me/compile/code.html) QBE 是一个编译器后端,旨在用 10% 的代码提供工业级优化编译器 70% 的性能。QBE 通过提供一个紧凑、易用且高性能的后端来促进语言创新。尺寸限制迫使 QBE 专注于核心功能,避免陷入无止境的边际收益递减之路。 ### 概览 QBE 的 C 代码库旨在保持业余规模和易于修改。尽管体积小巧,QBE 仍提供了许多具有良好性价比的优化功能。它还通过完整实现 C ABI 来简化与外部系统的集成。这意味着由 QBE 编译的程序可以轻松调用 C 代码,反之亦然。当前版本的 QBE 支持目标架构:*amd64*(Linux 和 macOS)、*arm64* 和 *riscv64*。 更多 QBE 特性: - 完全支持 C ABI。 - IEEE 32 位和 64 位浮点数。 - 统一且简单的基于SSA(https://en.wikipedia.org/wiki/Static_single_assignment_form)的中间语言(IL)。 - 所有编译阶段使用相同的 IL。 - 副本消除。 - 稀疏条件常量传播。 - 死指令消除。 - 小型栈槽的寄存器化。 - 借助 SSA 形式实现分离的溢出器与寄存器分配器(比图着色更简单、更快)。 - 基于循环分析的智能溢出启发式算法。 - 带提示的线性寄存器分配器。 - 匹配并利用 amd64 寻址模式。 - 极快的编译时间(在 Core 2 Duo 上,`CFLAGS=-O2` 时仅需 2 秒)。 ### 开始使用 下面的代码片段是一个用 QBE 中间语言编写的独立程序,展示了如何定义简单函数、对字进行算术运算以及调用变参 C 函数。 ``` function w $add(w %a, w %b) { # 定义一个函数 add @start %c =w add %a, %b # 将两个参数相加 ret %c # 返回结果 } export function w $main() { # 主函数 @start %r =w call $add(w 1, w 1) # 调用 add(1, 1) call $printf(l $fmt, ..., w %r) # 显示结果 ret 0 } data $fmt = { b "One and one make %d!\n", b 0 } ``` 将示例复制到文件中,然后用 `qbe -o out.s file.ssa && cc out.s` 编译。生成的二进制文件应能顺利运行,并依赖本地 libc 将输出打印到终端。 要了解更多关于 QBE 中间语言的信息,请阅读语言文档 (https://c9x.me/compile/doc/il.html)。 ### 社区 - 关于补丁和讨论,请订阅 `~mpu/[email protected]` (https://lists.sr.ht/~mpu/qbe/)。 - 来我们在 `irc.eigenstate.org` 的 `#myrddin` 频道与我们交流。

相似文章

QBE - 编译器后端:版本 1.3

Lobsters Hottest

QBE 1.3 是一个重要的编译器后端版本,新增了 7000 行代码,引入了一种新的 IL 匹配算法,针对 coremark 基准测试进行了优化(性能从 gcc -O2 的 40% 提升到超过 63%),支持 Windows ABI 和位置无关代码生成。

Kefir C17/C23 编译器

Hacker News Top

# kefir:独立 C17/C23 编译器 源码:[https://sr.ht/~jprotopopov/kefir/](https://sr.ht/~jprotopopov/kefir/) [723abe5](https://git.sr.ht/~jprotopopov/kefir/commit/723abe5)`重构目标 IR 指令存储以实现更安全的原地初始化` 8 小时前 [c1c07bf](https://git.sr.ht/~jprotopopov/kefir/commit/c1c07bf)`实现原地目标 IR 指令构造` 1 天前 Kefir 是一个面向 C17/C23 编程语言的独立编译器,由 [Jevgenij Protopopov](https://sr.ht/~jprotopopov) 开发

QSOE: 受QNX启发的双内核架构操作系统

Hacker News Top

QSOE项目v0.1发布,提供与QNX兼容的操作系统,包含两种微内核变体(自定义Skimmer内核和基于seL4的内核),共享用户空间,并支持SiFive Unmatched RISC-V硬件。