Open64 Compiler: WHIRL 中间表示形式与 SYMTAB

需积分: 9 5 下载量 124 浏览量 更新于2024-07-21 收藏 584KB PDF 举报
"Open64 Compiler的WHIRL(WHirl Intermediate Representation)文档,主要涉及WHIRL抽象语法树、编译目标、WHIRL的层次结构以及各种语言元素的详细描述,包括操作符、数据类型、控制流语句、调用、内存访问等。" Open64是一个开源的优化编译器,它使用WHIRL作为其中间表示(Intermediate Representation, IR)。WHIRL是一种静态单赋值形式(Static Single Assignment, SSA)的中间语言,用于编译过程中的分析和优化。以下是WHIRL的一些核心概念和特性: 1. **Whirl抽象语法树**:WHIRL以树形结构表示源代码,每个节点代表一个编程语言的语义单元,如操作、变量、类型等。 2. **编译目标**:Open64编译器设计的目标是支持多种平台和架构,WHIRL作为通用的IR,使得编译器能够生成针对不同目标机器的高效代码。 3. **WHIRL的层次结构**: - **Very High (VH) WHIRL**:最接近源代码的级别,保留了源代码的大部分结构。 - **High (H) WHIRL**:进一步抽象,但仍包含高级语言特性。 - **Mid (M) WHIRL**:更接近底层,但仍然保留一些高级结构。 - **Low (L) WHIRL**:更接近机器码,包含更多与特定架构相关的细节。 - **Very Low (VL) WHIRL**:最底层,几乎完全与机器指令对应。 4. **WHIRL的组件**: - **Operators**:表示各种操作,如算术、逻辑、比较等。 - **Result and Descriptor Types**:定义结果类型和描述符类型。 - **Supported Data Types**:包括基本类型和复杂类型。 - **Kid Pointers**:指向子节点,构建树结构。 - **Next and Previous Pointers**:用于链表结构,方便遍历。 - **Offset**:节点在内存中的偏移量。 - **Mapping Mechanism**:用于映射源代码位置到WHIRL节点。 - **Source Position Information**:记录源代码的位置信息。 - **Additional Fields**:其他自定义或特定用途的字段。 - **WHIRL Node Layout**:节点布局,描述节点如何在内存中存储。 5. **控制流语句**:包括结构化和非结构化的控制流,如循环、条件分支、异常处理等。 6. **调用**:表示函数调用,包括参数传递、返回值处理等。 7. **其他语句**:如声明、初始化、赋值等。 8. **内存访问**:表示对内存的读写操作,包括数组访问和指针操作。 9. **位域表示**:用于处理位级别的操作。 10. **伪寄存器**:在优化阶段使用的临时存储区域,不直接对应硬件寄存器。 11. **其他叶节点操作**:如常量、空值等简单操作。 12. **类型转换**:在不同数据类型间进行转换。 13. **高阶类型规格**:用于描述复杂类型,如结构体、联合体等。 14. **表达式操作**:包括一元、二元、三元及N元操作,覆盖了各种运算。 这些内容构成了WHIRL的骨架,为Open64编译器提供了强大的中间表示能力,使得编译器可以进行复杂的优化,如死代码消除、循环展开、并行性挖掘等,最终生成高效的机器代码。