加载中...

中间表示(Intermediate Representation,IR)是编译器在把源语言翻译为目标代码的过程中使用的内部数据结构或指令形式,介于抽象语法树与机器码之间。
编译器前端将源代码解析为 IR,中端在 IR 上做各类优化,后端再把 IR 降级为特定平台的机器指令。常见形式包括三地址码、静态单赋值形式(SSA)、控制流图以及栈式指令序列。LLVM IR、Java 字节码、GCC 的 GIMPLE 都是典型例子。
IR 把「m 种语言 × n 种目标平台」的翻译问题分解为「m 个前端 + n 个后端」,大幅降低编译器工程复杂度;同时为跨语言、跨平台的通用优化提供统一舞台。
实际编译器常使用多级 IR:高层 IR 保留类型与结构信息,便于语言级优化;低层 IR 接近机器指令,便于指令选择与寄存器分配。MLIR 等项目进一步把多级 IR 框架化。

登录 后参与讨论
暂无讨论,来发表第一条评论吧