Open64 WHIRL 是美国 Open64编译器套件 中使用的一种中间表示(Intermediate Representation,IR)格式,主要用于在编译过程中表示源代码的中间形态。它是Open64编译器的重要技术组成部分,用于代码优化和跨平台代码生成。
1. Open64 编译器简介
Open64 是一个开源的、高性能的编译器基础设施,最初由 SGI(Silicon Graphics) 开发,后来由 HP、Intel、AMD 等公司共同维护。它支持多种架构(如x86、IA-64、MIPS等),并广泛应用于高性能计算(HPC)、嵌入式系统和科研领域。
Open64 的主要特点:
支持 C、C++、Fortran 等语言。提供强大的 跨过程优化(Interprocedural Optimization, IPO) 和 循环优化。采用 WHIRL IR 作为统一的中间表示,便于多阶段优化。
2. WHIRL IR
WHIRL(Wide High-level IR Language)是Open64使用的 多层中间表示(Multi-Level IR),它在编译过程中分为多个级别(Levels),从高级抽象逐步降低到接近机器码的表示。
2.1 WHIRL 的层次结构
WHIRL 分为5个主要级别(Levels),从高到低依次为:
Very High Level (VH),最接近源代码的表示,保留高级语言结构(如循环、函数调用)。
High Level (H),开始引入控制流图(CFG),但仍保留高级语义。
Medium Level (M),更接近机器无关优化,如循环展开、内联等。
Low Level (L),接近目标机器架构,但仍保持平台无关性。
Very Low Level (VL),最终接近汇编代码,包含寄存器分配、指令选择等。
2.2 WHIRL 的特点
统一的IR:适用于不同前端(C/C++/Fortran)和后端(x86/MIPS/IA-64)。
支持复杂优化:如自动并行化、数据预取、循环变换等。
可扩展性:研究人员可以基于WHIRL开发新的优化算法。
3. WHIRL 的应用
WHIRL 主要用于:高性能计算(HPC),Open64 被用于超级计算机的例子如日本的“京”超级计算机)。也可以用于嵌入式系统优化,适用于DSP、GPU等特殊架构的代码生成。同时可以用做编译器研究,学术界常用WHIRL进行编译优化算法的实验。
4. 多种 IR 比较
特性 | WHIRL (Open64) | LLVM IR | GCC GIMPLE |
设计目标 | 高性能计算、自动并行化 | 通用优化、JIT支持 | 跨平台代码生成 |
层次结构 | 多级(VH→VL) | 单级(可扩展) | 多级(High→Low) |
优化能力 | 强于循环优化、IPO | 模块化优化 | 传统优化 |
使用场景 | HPC、嵌入式 | 通用编译、JIT | GCC生态系统 |
5. 获取和使用Open64 WHIRL
Open64 已开源,可以从以下途径获取:
GitHub:
https://github.com/open64-compiler
官方文档:
http://www.open64.net
示例:查看WHIRL IR
opencc -flto -c test.c -o test.whirl # 生成WHIRL中间文件
whirl2f test.whirl # 将WHIRL转换回可读形式
6. 总结
Open64 WHIRL 是一种多级中间表示(IR),用于Open64编译器优化和代码生成。
适用于 高性能计算、嵌入式系统、编译器研究。
相比LLVM IR和GCC GIMPLE,它在 循环优化和自动并行化 方面有优势。
目前仍用于部分HPC项目,但LLVM/GCC在通用编译领域更流行。
如果你在编译器优化或HPC领域工作,WHIRL仍然是一个值得研究的IR格式!