代码优化- 中间表示上的优化

news2024/9/21 12:47:20

中间表示上的代码优化依赖于具体所使用的中间表示:控制流图(CFG)、控制依赖图(CDG)、静态单赋值形式(SSA)、后续传递风格(CPS)等

共同的特点是需要进行程序分析,优化是全局进行的,而不是局部,通用的模式是:程序分析->程序重写

在这部分中,我们将基于控制流图进行讨论,但类似的技术可以用于其他类型的中间表示。

优化的一般模式

(1)程序分析:控制流分析,数据流分析,依赖分析等,得到被优化程序的静态保守信息(是对动态运行行为的近似) 

(2)程序重写:以上一步得到的信息制导对程序的重写

 

常量传播

先进行到达定义分析,如果这个定义"x = 3"是唯一能够到达使用"a = x"的定义,那么可以进行这个替换。

常量传播算法

const_prop(Prog_t p)
{
    // 第一步:程序分析
    reaching_definition(p);
    // 第二步:程序改写
    foreach(stm s in p: y = x1, ..., xn)
        foreach(use of xi in s)
            if (the reaching def of xi is unique: xi = n)
                y = x1, ..., xi - 1, n, xi + 1, ..., xn
}

注:针对程序p做到达定义分析后,就会在每个语句前面都有一组能够到达这个语句的一组对变量的定义,这个信息会指导第二步的程序改写

 (注:上图右侧的集合为每个语句前面能够到达这个语句的定义)

拷贝传播

先进行到达定义分析,如果这个定义"x = y"是唯一能够到达使用"a = x"的定义,那么可以进行这个替换。

拷贝传播算法

copy_prop(Prog_t p)
{
    // 第一步:程序分析
    reaching_definition(p);
    // 第二步:程序改写
    foreach(stm s in p: y = x1, ..., xn)
        foreach(use of xi in s)
            if (the reaching def of xi is unique: xi = z)
                y = x1, ..., xi - 1, z, xi + 1, ..., xn
}

死代码删除

需要进行活性分析,如果x不是该语句的live_out(什么叫语句的live_out?就是x变量的值,在这个语句在后面会用到),则可以将该语句移除。

死代码删除算法

dead_code(Prog_t p)
    // 第一步:程序分析
    liveness_analysis(p);
    // 第二步:程序改写
    foreach (stm s in p: y = ...)
        if (y is NOT in live_out[s])
            remove(s);

经过活性分析后就会得到每个语句的out[s],是活着出去的那些变量,是在它后面活跃的变量的集合,根据这样的信息再对程序进行改写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7 ADC(一)

7 ADC ADC简介 ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁 12位(0-2^(12-1))逐次逼近型ADC,1us转换时间…

HTTP连接要考虑超时,重试和并发之原因

一、原因(why) 连接超时配置得特别长,比如 60 秒。一般来说,TCP 三次握手建立连接需要的时间非常短,通常在毫秒级最多到秒级,不可能需要十几秒甚至几十秒。如果很久都无法建连,很可能是网络或防火墙配置的…

光纤网卡传输速率和它的应用领域有哪些呢?通常用会到有哪些型号网络变压器呢?

Hqst盈盛(华强盛)电子导读:常有客户问起光纤网卡该如何选用到合适的产品,选用时要注意到哪些事项,这节将结合配合到的网络变压器和大家一起探讨,希望对大家有些帮助。 1.光纤网卡传输速率与网络…

AlgoC++第三课:C++世界观

目录 C世界观前言1. 程序逻辑2. 内存的逻辑3. 调度的逻辑4. 编译的逻辑5. 作用域的逻辑6. 命名空间的逻辑7. 生命周期的逻辑8. C类的逻辑9. 编译时和运行时的逻辑总结 C世界观 前言 手写AI推出的全新面向AI算法的C课程 Algo C,链接。记录下个人学习笔记&#xff0c…

如何查看CPU的L2、L3缓存的容量

可以用CPU-Z,不过需要下载。 可以用命令: wmic cpu get L2CacheSize,L3CacheSize结果:

Golang微服务一把嗦 用户微服务集成主流最新go技术栈

声明:此文章为博主个人学习记录,仅供学习和交流,如有侵权请联系博主。 前言 前段时间,因为本地k8s环境一直出问题,线上云环境也用不起,(后面搞定了再慢慢学习)所以就暂时搁置了k8s学…

SQL Server基础 第二章 表结构管理

目录 一、数据类型 1,字符类数据类型 2,数值型数据类型 3,日期/时间型数据类型 二、主键(Primary key) 三、默认值 四、唯一键(Unique) 五、自增标识 六、约束 七、外键 一、数据类型 …

node+vue+mysql+java健身房网站管理系统

通过大数据管理的方法对健身房管理系统进行了详细的设计说明以及介绍,对健身房管理系统进行了开发和实践。作为一个健身房网站,它为用户提供了一个良好的求知平台。让用户能更好地了解健身带来的好处。前端技术:nodejsvueelementui,视图层其实…

3D智能四向穿梭车在电商物流中的应用|HEGERLS箱式四向穿梭车系统在服装制造仓的创新应用

四向穿梭车技术是物流仓储系统中的革命性技术,也由于四向穿梭车对于场地的适应性非常强的特性,可实现前后、左右、上下六维运行,结合提升机的布置和输送系统的布局,灵活调整四向车的空间布局,使某些不规则场地和闲置空…

NXP公司LPC21xx+热敏电阻实现温度检测

LPC2131/32/34/36/38微控制器基于16位/32位Arm7TDMI-S™CPU,支持实时仿真和嵌入式跟踪,具有尺寸小,功耗低,多个32位定时器、单/双10位8通道ADC、10位DAC、PWM通道、47个GPIO线(它们拥有多达9个边沿或电平触发的外部中断…

SpringCloud 项目如何方便 maven 打包以及本地开发

一、背景 springcloud-alibaba ,使用 nacos 做配置中心,maven 作为构建工具。为了防止 test 、prod 环境配置文件覆盖问题,使用 mvn -P 命令。 二、项目 pom 文件 1. 利用 resources 标签来指定目录,build > resources 标签&a…

【轴承故障检测】滚动轴承中进行基于振动的故障诊断研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

110.【十万字带你深入学习23种设计模式】

Java 23种设计模式 (一)、设计模式相关内容介绍1.软件设计模式概述(1).软件设计模式的产生背景(2).软件设计模式的概念(3).学习设计模式的重要性(4).设计模式分类 2.UML图(1).类图概述(2).类图的作用(3).类图表示法 3.软件设计原则(1).开闭原则 (重写不修改)(2).里氏代换原则 (…

Node内置模块 【https模块】

文章目录 🌟前言🌟https模块🌟https原理🌟SSL🌟使用https🌟搭建HTTPS服务器🌟写在最后 🌟前言 哈喽小伙伴们,新的专栏 Node 已开启;这个专栏里边会收录一些N…

不得不说的结构型模式-组合模式

组合模式是一种结构型设计模式,它允许您将对象组合成树形结构,并以统一的方式处理它们。该模式基于递归组合的想法,其中一个组件可以由许多更小的组件组成,这些更小的组件可以由更小的组件组成,以此类推。 在组合模式中…

Latex安装与简介

文章目录 Latex一.步入Latex的两种方式:1.下载安装与Vscode集成2.在线的编辑器: overleaf 二.解决中文输入的问题三.简单介绍 Latex 一.步入Latex的两种方式: 1.下载安装与Vscode集成 texlive下载与安装参考: https://blog.csdn.net/weixin_47581344/article/details/1243560…

Midjourney 提示词工具(10 个国内外最好最推荐的)

Midjourney,是一个革命性的基于人工智能的艺术生成器,可以从被称为提示的简单文本描述中生成令人惊叹的图像。Midjourney已经迅速成为艺术家、设计师和营销人员的首选工具(包括像我这样根本不会设计任何东西的无能之辈)。 为了帮…

前端优化的分析

前端优化的分析 目录概述需求: 设计思路实现思路分析渲染层性能更好的API 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,cha…

强化学习技巧

此软件包处于维护模式,请使用Stable-Baselines3 (SB3)获取最新版本。您可以在 SB3 文档中找到迁移指南。 本节的目的是帮助您进行强化学习实验。它涵盖了有关 RL 的一般建议(从哪里开始、选择哪种算法、如何评估算法等),以及使用自…

嵌入式QT (Qt 信号与槽)

一、Qt 信号与槽机制 因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。 信号(Signal)就是在特定情况下被发射的事件。 GUI 程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道…