logo资料库

gccint 中文版.pdf

第1页 / 共457页
第2页 / 共457页
第3页 / 共457页
第4页 / 共457页
第5页 / 共457页
第6页 / 共457页
第7页 / 共457页
第8页 / 共457页
资料共457页,剩余部分请下载后查看
简介
向GCC开发提供帮助
GCC与可移植性
GCC的输出接口
GCC低级运行时库
整数算术例程
算术函数
比较函数
可产生异常的算术函数
位运算
浮点模拟例程
算术函数
转换函数
比较函数
其它浮点函数
十进制浮点模拟例程
算术函数
转换函数
比较函数
定点小数模拟例程
算术函数
比较函数
转换函数
语言无关的异常处理例程
其它运行时库例程
Cache控制函数
GCC中的语言前端
源目录结构和构建系统
配置术语和历史
顶层源文件目录
gcc 子目录
gcc的子目录
gcc目录下的配置
configure使用的脚本
config.build,config.host和config.gcc文件
由configure创建的文件
gcc目录下的构建系统
Makefile工作目标
在gcc目录下的库源文件和头文件
GCC安装的头文件
构建文档
Texinfo手册
生成Man Page
其它文档
语言前端剖析
前端language目录
前端config-lang.in文件
目标机后端剖析
测试包
测试包代码中使用的习惯用法
DejaGnu测试中使用的指令
Ada语言测试包
C语言测试包
Java库测试包
对gcov测试的支持
对profile-directed优化测试的支持
对二进制兼容性测试的支持
对使用多个选项进行torture测试的支持
选项描述文件
选项文件格式
选项属性
编译器的Passes和相关文件
语法分析过程
Gimplification过程
过程管理器
Tree-SSA过程
RTL过程
Trees: C和C++前端使用的中间表示
不足之处
概述
Trees
标识符
容器
类型
作用域
命名空间
声明
关于声明的操作
内部结构
目前的结构层次
添加新的DECL节点类型
函数
函数基础
函数体
语句
树中的属性
表达式
RTL表示
RTL对象类型
RTL类别和格式
访问操作数
访问特殊操作数
RTL表达式中的标记
机器模式
常量表达式类型
寄存器和内存
RTL算术运算表达式
比较运算
位域
向量运算
转换
声明
副作用表达式
地址中嵌入的副作用
作为表达式的汇编指令
Insns
函数调用insns的RTL表示
结构共享假设
读取RTL
GENERIC
语句
语句序列
空语句
跳转
清除
GIMPLE
元组表示
gimple_statement_base (gsbase)
gimple_statement_with_ops
gimple_statement_with_memory_ops
GIMPLE指令集
异常处理
Temporaries
操作数
复合表达式
复合左值
条件表达式
逻辑运算符
操作操作数
操作数向量分配
操作数有效性
语句有效性
操作GIMPLE语句
通用访问方法
元组特定访问方法
GIMPLE_ASM
GIMPLE_ASSIGN
GIMPLE_BIND
GIMPLE_CALL
GIMPLE_CATCH
GIMPLE_CHANGE_DYNAMIC_TYPE
GIMPLE_COND
GIMPLE_EH_FILTER
GIMPLE_LABEL
GIMPLE_NOP
GIMPLE_OMP_ATOMIC_LOAD
GIMPLE_OMP_ATOMIC_STORE
GIMPLE_OMP_CONTINUE
GIMPLE_OMP_CRITICAL
GIMPLE_OMP_FOR
GIMPLE_OMP_MASTER
GIMPLE_OMP_ORDERED
GIMPLE_OMP_PARALLEL
GIMPLE_OMP_RETURN
GIMPLE_OMP_SECTION
GIMPLE_OMP_SECTIONS
GIMPLE_OMP_SINGLE
GIMPLE_PHI
GIMPLE_RESX
GIMPLE_RETURN
GIMPLE_SWITCH
GIMPLE_TRY
GIMPLE_WITH_CLEANUP_EXPR
GIMPLE序列
序列迭代器
增加一个新的GIMPLE语句代码
语句和操作数遍历
分析和优化GIMPLE元组
Annotations
SSA操作数
操作数迭代器和访问例程
立即使用
静态单赋值
保持SSA形式
保持虚SSA形式
检验SSA_NAME节点
遍历use-def链
遍历支配树
别名分析
循环分析和表示
循环表示
循环查询
循环操作
循环封闭的SSA形式
标量演化
RTL上的IV分析
迭代次数分析
数据依赖分析
线性循环转换框架
Omega 一种对线性规划问题的求解
控制流图
基本块
Profile信息
维护CFG
活跃信息
机器描述
概述机器描述是如何被使用的
指令模式的方方面面
有关define_insn的例子
RTL模板
输出模板和操作数替换
用于汇编输出的C语句
断言
机器无关的predicate
定义机器特定的predicate
操作数的约束
简单约束
多个可选的约束
寄存器类别优先选择
constraint修饰符
机器特定的约束
使用enabled属性来禁止insn可选项
定义机器特定的约束
从C中测试约束
用于生成的标准指令模式名
指令模式的顺序问题
指令模式的相互依赖性
定义跳转指令模式
定义循环指令模式
指令规范化
为代码生成定义RTL序列
定义如何拆分指令
在机器描述中包含指令模式
用于目录搜索的RTL生成工具选项
机器特定的窥孔优化
RTL到文本的窥孔优化器
RTL到RTL的窥孔优化器
指令属性
定义属性以及它们的值
属性表达式
给Insns赋予属性值
关于属性说明的例子
计算一个Insn的长度
常量属性
延迟槽调度
处理器流水线描述
条件执行
常量定义
迭代器
机器模式迭代器
定义机器模式迭代器
机器模式迭代器中的替换
有关机器模式迭代器的例子
代码迭代器
目标机描述宏和函数
全局变量targetm
控制编译驱动器,gcc
运行时的target指定
为基于每个函数的信息定义数据结构
存储布局
源语言的数据类型布局
寄存器的用法
寄存器的基本特征
寄存器的分配顺序
如何使值适合寄存器
处理叶子函数
形成栈的寄存器
寄存器类别
废弃的定义约束的宏
栈布局和调用约定
基本的帧布局
对异常处理的支持
指定如何进行栈检查
用于栈帧寻址的寄存器
消除帧指针和参数指针
在栈上传递函数参数
在寄存器中传递参数
标量函数值如何被返回
如何返回大的值
调用者保存的寄存器分配
函数入口和出口
为profiling生成代码
允许尾调用
栈冲突保护
实现Varargs宏
嵌套函数的蹦床
库例程的隐式调用
寻址模式
锚定的地址
条件代码状态
描述操作的相对代价
调整指令调度器
将输出划分到section中(Texts, Data, ...{})
位置独立代码
定义汇编语言输出
汇编文件的总体框架
数据的输出
未初始化变量的输出
标号的生成和输出
如何处理初始化函数
控制初始化例程的宏
汇编指令的输出
派遣表的输出
用于异常区域的汇编命令
用于对齐的汇编命令
控制调试信息格式
影响所有调试格式的宏
用于DBX输出的特定选项
针对DBX格式的钩子
DBX格式的文件名
用于SDB和DWARF输出的宏
用于VMS调试格式的宏
交叉编译和浮点
机器模式切换指令
定义目标机特定的__attribute__用法
模拟TLS
定义MIPS target的协处理器的规范
预编译头文件有效性检查的参数
C++ ABI参数
其它参数
主机配置
主机通用信息
主机文件系统
关于主机的其它杂项
Makefile片段
目标机Makefile片段
主机Makefile片段
collect2
标准头文件目录
内存管理和类型信息
GTY(())的内部
为垃圾收集器标记Roots
包含类型信息的源文件
如何调用垃圾收集器
资助自由软件
GNU项目和GNU/Linux
GNU通用公共授权
GNU自由文档授权
附录:如何为你的文档使用该授权
GCC的贡献者
选项索引
概念索引
GNU编译器内部实现 For gcc version 4.4.5 Richard M. Stallman and the GCC Developer Community
版权 c 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 自由软件基金会 您可以依据自由软件基金会所发行的GNU自由文档授权1.2版本或者之后的任何版本, 对本文档进行 复制,分发和/或修改;其中不可变章节为"资助自由软件",封面文 字为 (a) (参见下面),以及封底 文字为 (b) (参见下面)。授权的副本要被包含在 标题为"GNU自由文档授权"的章节中。 (a) FSF的封面文字为: GNU 手册 (b) FSF的封底文字为: 您可以自由复制和修改本GNU手册,如同GNU软件。由自由软件基金会所发行 的副本用于为GNU 开发筹集资金。
i Short Contents 简介 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1 1 向GCC开发提供帮助 : : : : : : : : : : : : : : : : : : : : : : : 1 2 GCC与可移植性 : : : : : : : : : : : : : : : : : : : : : : : : : 1 3 GCC的输出接口 : : : : : : : : : : : : : : : : : : : : : : : : : 2 4 GCC低级运行时库 : : : : : : : : : : : : : : : : : : : : : : : : 2 5 GCC中的语言前端 : : : : : : : : : : : : : : : : : : : : : : : 45 6 源目录结构和构建系统 : : : : : : : : : : : : : : : : : : : : : 45 7 选项描述文件 : : : : : : : : : : : : : : : : : : : : : : : : : : 67 8 编译器的Passes和相关文件 : : : : : : : : : : : : : : : : : : 69 Trees: C和C++前端使用的中间表示 : : : : : : : : : : : : : 79 9 10 RTL表示 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 108 11 GENERIC : : : : : : : : : : : : : : : : : : : : : : : : : : : 147 12 GIMPLE : : : : : : : : : : : : : : : : : : : : : : : : : : : : 148 13 分析和优化GIMPLE元组 : : : : : : : : : : : : : : : : : : : 178 14 循环分析和表示 : : : : : : : : : : : : : : : : : : : : : : : : 189 15 控制流图 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 195 16 机器描述 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 201 17 目标机描述宏和函数 : : : : : : : : : : : : : : : : : : : : : 282 18 主机配置 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 401 19 Makefile片段 : : : : : : : : : : : : : : : : : : : : : : : : : 403 20 collect2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 405 21 标准头文件目录 : : : : : : : : : : : : : : : : : : : : : : : : 406 22 内存管理和类型信息 : : : : : : : : : : : : : : : : : : : : : 407 资助自由软件 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 411 GNU项目和GNU/Linux : : : : : : : : : : : : : : : : : : : : : : 412 GNU通用公共授权 : : : : : : : : : : : : : : : : : : : : : : : : : 412 GNU自由文档授权 : : : : : : : : : : : : : : : : : : : : : : : : : 423 GCC的贡献者 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 430 选项索引 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 445 概念索引 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 445
ii GNU编译器内部实现 Table of Contents 简介 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 1 1 向GCC开发提供帮助 : : : : : : : : : : : : : : : : : : : : : 1 2 GCC与可移植性 : : : : : : : : : : : : : : : : : : : : : : : : 1 3 GCC的输出接口 : : : : : : : : : : : : : : : : : : : : : : : : 2 4 GCC低级运行时库 : : : : : : : : : : : : : : : : : : : : : : 2 4.1 整数算术例程 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3 4.1.1 算术函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3 4.1.2 比较函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4 4.1.3 可产生异常的算术函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : 4 4.1.4 位运算 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4 4.2 浮点模拟例程 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 5 4.2.1 算术函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 5 4.2.2 转换函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 6 4.2.3 比较函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 8 4.2.4 其它浮点函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9 4.3 十进制浮点模拟例程 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9 4.3.1 算术函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 9 4.3.2 转换函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10 4.3.3 比较函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 13 4.4 定点小数模拟例程 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 14 4.4.1 算术函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 14 4.4.2 比较函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 21 4.4.3 转换函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 21 4.5 语言无关的异常处理例程 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 44 4.6 其它运行时库例程 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45 4.6.1 Cache控制函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45 5 GCC中的语言前端 : : : : : : : : : : : : : : : : : : : : : 45 6 源目录结构和构建系统 : : : : : : : : : : : : : : : : : : : 45 6.1 配置术语和历史 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 45 6.2 顶层源文件目录 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 46 6.3 `gcc' 子目录 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 47 6.3.1 `gcc'的子目录 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 47 6.3.2 `gcc'目录下的配置 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 47 6.3.2.1 `configure'使用的脚本 : : : : : : : : : : : : : : : : : : : : : : : 48 6.3.2.2 `config.build',`config.host'和`config.gcc'文件 : : : : : 48
iii 6.3.2.3 由configure创建的文件 : : : : : : : : : : : : : : : : : : : : : : 48 6.3.3 `gcc'目录下的构建系统 : : : : : : : : : : : : : : : : : : : : : : : : : : 49 6.3.4 Makefile工作目标 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 49 6.3.5 在`gcc'目录下的库源文件和头文件 : : : : : : : : : : : : : : : : : : : 51 6.3.6 GCC安装的头文件 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51 6.3.7 构建文档 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51 6.3.7.1 Texinfo手册 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 52 6.3.7.2 生成Man Page : : : : : : : : : : : : : : : : : : : : : : : : : : : : 52 6.3.7.3 其它文档 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 53 6.3.8 语言前端剖析 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 53 6.3.8.1 前端`language'目录 : : : : : : : : : : : : : : : : : : : : : : : : : 54 6.3.8.2 前端`config-lang.in'文件 : : : : : : : : : : : : : : : : : : : : : 56 6.3.9 目标机后端剖析 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 56 6.4 测试包 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 57 6.4.1 测试包代码中使用的习惯用法 : : : : : : : : : : : : : : : : : : : : : : 57 6.4.2 DejaGnu测试中使用的指令 : : : : : : : : : : : : : : : : : : : : : : : 58 6.4.3 Ada语言测试包 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 62 6.4.4 C语言测试包 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 62 6.4.5 Java库测试包 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 64 6.4.6 对gcov测试的支持 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 64 6.4.7 对profile-directed优化测试的支持 : : : : : : : : : : : : : : : : : : : 65 6.4.8 对二进制兼容性测试的支持 : : : : : : : : : : : : : : : : : : : : : : : : 65 6.4.9 对使用多个选项进行torture测试的支持 : : : : : : : : : : : : : : : : 66 7 选项描述文件 : : : : : : : : : : : : : : : : : : : : : : : : : 67 7.1 选项文件格式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 67 7.2 选项属性 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 68 8 编译器的Passes和相关文件 : : : : : : : : : : : : : : : 69 8.1 语法分析过程 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 69 8.2 Gimplification过程 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70 8.3 过程管理器 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 70 8.4 Tree-SSA过程 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 71 8.5 RTL过程 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 76 9 Trees: C和C++前端使用的中间表示 : : : : : : : : : : 79 9.1 不足之处 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79 9.2 概述 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 79 9.2.1 Trees : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80 9.2.2 标识符 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 80 9.2.3 容器 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81 9.3 类型 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 81 9.4 作用域 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 85 9.4.1 命名空间 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 85 9.4.2 类 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 86 9.5 声明 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 87 9.5.1 关于声明的操作 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 87
iv GNU编译器内部实现 9.5.2 内部结构 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89 9.5.2.1 目前的结构层次 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 89 9.5.2.2 添加新的DECL节点类型 : : : : : : : : : : : : : : : : : : : : : : 90 9.6 函数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 91 9.6.1 函数基础 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 91 9.6.2 函数体 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 94 9.6.2.1 语句 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 94 9.7 树中的属性 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 97 9.8 表达式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 97 10 RTL表示 : : : : : : : : : : : : : : : : : : : : : : : : : : 108 10.1 RTL对象类型 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 108 10.2 RTL类别和格式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 109 10.3 访问操作数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 111 10.4 访问特殊操作数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 111 10.5 RTL表达式中的标记 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 113 10.6 机器模式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 118 10.7 常量表达式类型 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 122 10.8 寄存器和内存 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 123 10.9 RTL算术运算表达式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 128 10.10 比较运算 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 131 10.11 位域 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 132 10.12 向量运算 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 132 10.13 转换 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 133 10.14 声明 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 134 10.15 副作用表达式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 134 10.16 地址中嵌入的副作用 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 138 10.17 作为表达式的汇编指令 : : : : : : : : : : : : : : : : : : : : : : : : : : : 139 10.18 Insns : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 139 10.19 函数调用insns的RTL表示 : : : : : : : : : : : : : : : : : : : : : : : : : : 145 10.20 结构共享假设 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 146 10.21 读取RTL : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 146 11 GENERIC : : : : : : : : : : : : : : : : : : : : : : : : : 147 11.1 语句 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 147 11.1.1 块 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 147 11.1.2 语句序列 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 147 11.1.3 空语句 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 147 11.1.4 跳转 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 148 11.1.5 清除 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 148
v 12 GIMPLE : : : : : : : : : : : : : : : : : : : : : : : : : : 148 12.1 元组表示 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 149 12.1.1 gimple statement base (gsbase) : : : : : : : : : : : : : : : : : : 149 12.1.2 gimple statement with ops : : : : : : : : : : : : : : : : : : : : : 150 12.1.3 gimple statement with memory ops : : : : : : : : : : : : : : : : 150 12.2 GIMPLE指令集 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 151 12.3 异常处理 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 152 12.4 Temporaries : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 153 12.5 操作数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 153 12.5.1 复合表达式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 153 12.5.2 复合左值 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 153 12.5.3 条件表达式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 153 12.5.4 逻辑运算符 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 154 12.5.5 操作操作数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 154 12.5.6 操作数向量分配 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 154 12.5.7 操作数有效性 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 155 12.5.8 语句有效性 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 155 12.6 操作GIMPLE语句 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 156 12.6.1 通用访问方法 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 156 12.7 元组特定访问方法 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 158 12.7.1 GIMPLE ASM : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 158 12.7.2 GIMPLE ASSIGN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 159 12.7.3 GIMPLE BIND : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 160 12.7.4 GIMPLE CALL : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 161 12.7.5 GIMPLE CATCH : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 162 12.7.6 GIMPLE CHANGE DYNAMIC TYPE : : : : : : : : : : : : : : : : : : : : : 163 12.7.7 GIMPLE COND : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 163 12.7.8 GIMPLE EH FILTER : : : : : : : : : : : : : : : : : : : : : : : : : : : : 164 12.7.9 GIMPLE LABEL : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 165 12.7.10 GIMPLE NOP : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 165 12.7.11 GIMPLE OMP ATOMIC LOAD : : : : : : : : : : : : : : : : : : : : : : : 165 12.7.12 GIMPLE OMP ATOMIC STORE : : : : : : : : : : : : : : : : : : : : : : 165 12.7.13 GIMPLE OMP CONTINUE : : : : : : : : : : : : : : : : : : : : : : : : : 166 12.7.14 GIMPLE OMP CRITICAL : : : : : : : : : : : : : : : : : : : : : : : : : 166 12.7.15 GIMPLE OMP FOR : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 166 12.7.16 GIMPLE OMP MASTER : : : : : : : : : : : : : : : : : : : : : : : : : : 168 12.7.17 GIMPLE OMP ORDERED : : : : : : : : : : : : : : : : : : : : : : : : : : 168 12.7.18 GIMPLE OMP PARALLEL : : : : : : : : : : : : : : : : : : : : : : : : : 168 12.7.19 GIMPLE OMP RETURN : : : : : : : : : : : : : : : : : : : : : : : : : : 169 12.7.20 GIMPLE OMP SECTION : : : : : : : : : : : : : : : : : : : : : : : : : : 169 12.7.21 GIMPLE OMP SECTIONS : : : : : : : : : : : : : : : : : : : : : : : : : 169 12.7.22 GIMPLE OMP SINGLE : : : : : : : : : : : : : : : : : : : : : : : : : : 170 12.7.23 GIMPLE PHI : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 170 12.7.24 GIMPLE RESX : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 171 12.7.25 GIMPLE RETURN : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 171 12.7.26 GIMPLE SWITCH : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 171 12.7.27 GIMPLE TRY : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 172 12.7.28 GIMPLE WITH CLEANUP EXPR : : : : : : : : : : : : : : : : : : : : : 172
vi GNU编译器内部实现 12.8 GIMPLE序列 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 173 12.9 序列迭代器 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 174 12.10 增加一个新的GIMPLE语句代码 : : : : : : : : : : : : : : : : : : : : : : 177 12.11 语句和操作数遍历 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 177 13 分析和优化GIMPLE元组 : : : : : : : : : : : : : : : : 178 13.1 Annotations : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 178 13.2 SSA操作数 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 178 13.2.1 操作数迭代器和访问例程 : : : : : : : : : : : : : : : : : : : : : : : 179 13.2.2 立即使用 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 181 13.3 静态单赋值 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 183 13.3.1 保持SSA形式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 184 13.3.2 保持虚SSA形式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 185 13.3.3 检验SSA NAME节点 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 185 13.3.4 遍历use-def链 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 186 13.3.5 遍历支配树 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 186 13.4 别名分析 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 186 14 循环分析和表示 : : : : : : : : : : : : : : : : : : : : : 189 14.1 循环表示 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 189 14.2 循环查询 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 190 14.3 循环操作 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 191 14.4 循环封闭的SSA形式 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 192 14.5 标量演化 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 192 14.6 RTL上的IV分析 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 193 14.7 迭代次数分析 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 193 14.8 数据依赖分析 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 194 14.9 线性循环转换框架 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 195 14.10 Omega 一种对线性规划问题的求解 : : : : : : : : : : : : : : : : : : : 195 15 控制流图 : : : : : : : : : : : : : : : : : : : : : : : : : : 195 15.1 基本块 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 196 15.2 边 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 197 15.3 Profile信息 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 199 15.4 维护CFG : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 200 15.5 活跃信息 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 201
分享到:
收藏