个性化阅读
专注于IT技术分析

编译器设计

编译器中的数据流分析简要指南

半瓶木阅读(1478)评论(0)赞(0)

控制流图中的数据流分析即确定程序中有关数据定义和使用的信息的分析。借助此分析, 可以完成优化。通常, 其过程是使用数据流分析来计算值。数据流属性表示可用于优化的信息。 基本术语– 定义点:程序中包含一些定义的点。 参照点:程序中包含对数据项...

链接器如何解析在多个位置定义的全局符号?

半瓶木阅读(1195)评论(0)赞(0)

在编译时, 编译器将每个全局符号以强或弱形式导出到汇编器, 并且汇编器在可重定位目标文件的符号表中隐式编码此信息。函数和初始化的全局变量会获得强符号。未初始化的全局变量会得到弱符号。 对于以下示例程序, buf, bufp0, main和s...

编译器设计教程目录

半瓶木阅读(1919)评论(0)赞(1)

编译器设计入门介绍 编译器简介 编译阶段 编译器通过 编译器引导程序Bootstrap 有限状态机 正则表达式 DFA的优化 Lex词法分析器 形式语法 BNF符号和编译器 YACC语法生成解析器 上下文无关文法 CFG的功能 推导规则 解...

代码生成器详解

半瓶木阅读(1033)评论(0)赞(0)

本文概述 注册和地址描述符 代码生成算法 代码生成器用于生成三地址语句的目标代码。它使用寄存器存储三个地址语句的操作数。 例: 考虑三个地址语句x:= y + z。它可以具有以下代码序列: 注册和地址描述符 寄存器描述符包含每个寄存器中当前...

全局数据流分析

半瓶木阅读(1364)评论(0)赞(0)

为了有效地优化代码, 编译器会收集有关程序的所有信息, 并将此信息分发到流程图的每个块。此过程称为数据流图分析。 某些优化只能通过检查整个程序来实现。仅检查程序的一部分是无法实现的。 对于这种优化, 用户定义的链接是一个特定的问题。 在这里...

基本块的DAG表示

半瓶木阅读(3311)评论(0)赞(0)

本文概述 DAG的构建算法 方法 基本块的DAG是有向无环图, 在节点上带有以下标签: 图的叶子由唯一标识符标记, 该标识符可以是变量名或常量。 图的内部节点由运算符标记。 还为节点提供了一系列标识符, 以供标签存储计算值。 DAG是一种数...

循环优化

半瓶木阅读(1244)评论(0)赞(0)

本文概述 1.代码运动 2.感应变量消除 3.强度降低 循环优化是最有价值的与机器无关的优化, 因为程序的内部循环占用了程序员大量的时间。 如果我们减少一个内部循环中的指令数量, 那么即使我们增加该循环之外的代码量, 也可以改善程序的运行时...

与机器无关的优化

半瓶木阅读(1253)评论(0)赞(0)

机器无关的优化尝试改进中间代码以获得更好的目标代码。此处转换的代码部分不涉及任何绝对内存位置或任何CPU寄存器。 中间代码生成的过程引入了很多低效率的问题, 例如:使用变量而不是常量, 额外的变量副本, 重复计算表达式。通过代码优化, 你可...

基本块的优化

半瓶木阅读(1629)评论(0)赞(0)

本文概述 1.保留结构的转换 2.代数变换 优化过程可以应用于基本块。在优化时, 我们不需要更改由该块计算的表达式集。 基本块优化有两种类型。这些如下: 保留结构的转换 代数变换 1.保留结构的转换 基本块上的主要保留结构转换如下: 常见子...

流程图-srcmini

流程图

半瓶木阅读(1063)评论(0)赞(0)

流程图是有向图。它包含基本块集的控制信息流。 控制流程图用于描述如何在各个块之间解析程序控制。在循环优化中很有用。 矢量点积的流程图如下: 块B1是初始节点。块B2紧随B1之后, 因此从B2到B1有一条边。 从B1的最后一条语句跳转的目标是...