Open64 Compiler: WHIRL 中间表示形式与 SYMTAB
需积分: 9 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编译器提供了强大的中间表示能力,使得编译器可以进行复杂的优化,如死代码消除、循环展开、并行性挖掘等,最终生成高效的机器代码。
2013-09-18 上传
2019-10-24 上传
2015-08-16 上传
2021-06-25 上传
2021-02-23 上传
2021-04-11 上传
2021-02-04 上传
2021-04-13 上传
2021-07-12 上传
qq_21255579
- 粉丝: 0
- 资源: 2
最新资源
- IEEE 14总线系统Simulink模型开发指南与案例研究
- STLinkV2.J16.S4固件更新与应用指南
- Java并发处理的实用示例分析
- Linux下简化部署与日志查看的Shell脚本工具
- Maven增量编译技术详解及应用示例
- MyEclipse 2021.5.24a最新版本发布
- Indore探索前端代码库使用指南与开发环境搭建
- 电子技术基础数字部分PPT课件第六版康华光
- MySQL 8.0.25版本可视化安装包详细介绍
- 易语言实现主流搜索引擎快速集成
- 使用asyncio-sse包装器实现服务器事件推送简易指南
- Java高级开发工程师面试要点总结
- R语言项目ClearningData-Proj1的数据处理
- VFP成本费用计算系统源码及论文全面解析
- Qt5与C++打造书籍管理系统教程
- React 应用入门:开发、测试及生产部署教程