中间表示- 数据流分析

news/2024/7/24 8:07:30 标签: 编译原理, 开发语言, C

数据流分析往往与优化绑定在一起,如下图所示。 

优化的一般模式

程序分析

(1)控制流分析、数据流分析、依赖分析等。

(2)得到被优化程序的静态保守信息,是对动态运行行为的近似。

程序重写

        以上一步得到的信息制导对程序的重写。

静态保守

问题:能把上图中的y替换为3吗?如果能,这称之为“常量传播”优化。

实际上,我们在问在L_3处,y的值都有哪些?如果y的值就是一个单元素的集合{3},那么我们在这就可以做常量传播优化。通过静态观察程序的文本,来推断里面某一点上变量值是什么,这就是一个典型的数据流分析。

对程序进行分析的结果表明:只有L_0块中的y = 3能到达L_3。这种分析称为“到达定义”分析。


还是原来的问题:能把上图中的y替换为3吗?如果能,这称之为“常量传播”优化。

编译器需要证明:x == 1?

但若x是程序输入的话,运行时才能知道值。所以编译器只能采用静态能够获得的信息对程序做保守估计:“L_2可能会执行”。


还是原来的问题:能把上图中的y替换为3吗?如果能,这称之为“常量传播”优化。

编译器能够证明可能有L_1或L_2中的对y的赋值能够到达L_3。这同样只依赖于程序的静态结构得到的保守信息,实际只会有一个块能到达。所以真正得到的静态信息是y=2,这样的信息跟它动态的行为也是一样的。

这告诉我们,静态保守尽管往往得到的是程序的静态的近似行为,但是,通过非常仔细的研究它的性质以及设计相应的算法,我们往往可以让这两个集合之间的差别尽可能的小,也就是说,两者尽可能的接近,也就意味着静态时能够得到非常精确的程序将来动态行为的估计,有了精确的信息对于指导我们对程序做优化会更有帮助。

总结

(1)数据流分析通过对程序代码进行静态分析,得到关于程序数据相关的保守信息

  • 必须保证程序分析的结果是安全的

(2)根据优化的目标不同,需要进行的数据流分析也不同

接下来我们将研究两种具体的数据流分析:到达定义分析,活性分析


http://www.niftyadmin.cn/n/211254.html

相关文章

RK3568平台开发系列讲解(驱动基础篇)自动创建设备节点

🚀返回专栏总目录 文章目录 一、自动创建设备节点1.1、创建和删除类函数1.2、创建设备函数二、创建类函数三、创建设备函数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢自动创建设备节点分为两个步骤: 步骤一:使用 class_create 函数创建一个类。步骤二:使用 d…

REST风格和使用RESTful形式开发

系列文章目录 主要学习SpringMVC中REST风格的开发形式 文章目录系列文章目录前言一、REST简介二、RESTful入门案例三、REST快速开发四、案例:基于RESTful页面数据交互总结前言 本节中用到的资料 链接:https://pan.baidu.com/s/1tSUMxH7G3-BX9MNnoVSw6Q…

阿里巴巴春招的后端面经来啦~

操作系统 一个操作系统,我们在衡量它的内存占用的时候,它一般会有哪些内存的部分? 读者答:堆和栈 补充: 这个其实是问你对free命令的理解。 主机的内存做一些清理的动作。你知道这里面会涉及到对哪些内存区域进行操…

微信picker弹出之后 , 背景变成灰色是怎么做的

微信小程序在弹出picker组件时&#xff0c;会将页面背景变为半透明的灰色&#xff0c;这是通过设置一个全屏的蒙层来实现的。 具体实现方法如下&#xff1a; 在WXML文件中&#xff0c;添加一个view元素作为蒙层&#xff0c;并设置其样式和属性&#xff1a; <view class&qu…

Python基础之for循环

一&#xff1a;for循环语句 for 变量名 in 可迭代对象: 代码一代码二... 可迭代对象可以是字符串、元组、列表、字典等。 for循环可以为可迭代对象中的每一个元素执行一个语句块。 例&#xff1a; for i in [1,2,3]:print(i) # 运行结果 1 2 3 二、for循环的使用 1&…

QT背后故事之Qt创始人Eirik Chambe-Eng

Eirik Chambe-Eng是一名挪威程序员。1990 年&#xff0c;他与 Haavard Nord 一起在特隆赫姆的一家超声设备软件开发部门工作。他们不满足于跨平台软件开发工具&#xff0c;创建了 Qt。1994 年&#xff0c;他们创立了 Trolltech 公司。 2004年aKademy采访了Eirik Chambe-Eng&…

CVE漏洞复现-CVE-2022-22965-Spring-RCE漏洞

CVE-2022-22965-Spring-RCE漏洞 漏洞概况与影响 Spring framework 是Spring 里面的一个基础开源框架&#xff0c;其目的是用于简化 Java 企业级应用的开发难度和开发周期,2022年3月31日&#xff0c;VMware Tanzu发布漏洞报告&#xff0c;Spring Framework存在远程代码执行漏洞…

1mm³大小,世界首个功率破KW的单芯片激光模组诞生

近年来随着技术不断发展&#xff0c;激光雷达的体积、成本也在不断降低&#xff0c;成为了一种受到各行业关注的关键技术。它的用途越发广泛&#xff0c;可用于自动驾驶汽车、大气观测使用的LiDAR传感器&#xff0c;还可以用于医疗保健&#xff08;治疗和检查分析&#xff09;、…