1. 基于谓词的IF转换

1.1if转换的实现过程需要考虑两个方面的问题
(1)如何为每个基本块分配谓词
(2)将谓词定义指令放在程序的什么位置
程序段的代码都可以根据其自身的控制依赖,表示为相关的程序依赖图(PDG),图中每个顶点表示一个基本块,每条边,代表了一个可能的控制转移。因此每个基本块的谓词由它所在的分支路径和PDG中的分支条件决定,所以第一个问题就相当于如何为PDG中每个顶点指定谓词。第二个问题需要考虑分支转移的最早位置。
当前有关的if转换都是基于一个经典的IF转换算法,它能够将谓词的使用和谓词定义指令的数目最小化
1、 计算后必经节点;
2、 计算指令间的控制依赖;
3、 将控制依赖分解成R,K,函数;
4、 根据R,K函数分配谓词并用对应的限定谓词将指令转换为谓词指令;
5、 合并谓词定义指令;
6、 减少谓词数目
我们通过两个函数来解决,R规定了每个块的赋值命名和相关谓词,K规定了使用中的每个谓词的位置指示,而位置取决于(1)谓词操作的语义(2)执行风格

2. 计算后必经节点信息

必经节点:如果控制流图节点d是节点i的必经节点,记作d dom i,如果从entry节点到i的每一条可能执行的路径都包括d,显然d是自反的(每个节点都是自己的必经节点)、传递的(a dom b 且b dom c,则a dom c)、和反对称的(a dom b 且b dom a,则a=b),任何节点的必经节点是一个集合。
后必经节点:节点p是节点i的后必经节点记作p pdom i,如果从节点i到节点exit,每一条可能路径都包含节点p,即在逆转所有的遍并且交换entry节点和exit节点而得到的流图中,i dom p。若x pdom y ,且y !=x,则称x是y的严格后必经节点记作x spdom y。x pdom y,不存在节点z,使x pdom z,z pdom y,则x为y的直接后继,记作x ipdom y.



如下所示代码:
if(b<0)
{
if(c>0) b=b+1;
else b=c+1;
d=d+1;
}
else
e++;
a++;


3. 控制依赖

PDG(程序控制依赖图)将程序表示为一个图,其中节点是语句和谓词表达式(或运算符和操作数)以及与节点表示节点操作所依赖的两个数据值以及操作执行所依赖的控制条件。一个程序的所有依赖项的集合可以看作是一个程序中语句和谓词的偏序。
什么是控制依赖CD简单地说就是if语句中的block y是受if语句所在的block x 所控制的,此时CD(y)=x,称为y控制依赖于x.
基于控制流图和后必经节点的概念,控制依赖如下定义:
CFG中的两个节点X、Y,如果满足如下条件,则称节点Y控制依赖于节点X;
(1)Y是X的某些后继的后必经节点;
(2)Y不是X的所有后记的后必经节点
3.1计算CD的算法:

pdom(x) = {y in N: y pdom x}
ipdom(x) = {y in N: y ipdom x}

for [x,y,label] in E such that y not in pdom(x)
{
Lub = ipdom(x);
if !label
x = -x
t = y;
while(t!=Lub)
{
CD(t) = CD(t) U {x}//U表示求并集
t = ipdom(t);
}
}

3.2计算R&K
R是将N中的每个节点x映射到P的函数 P=R(x)
K是将每个类P映射到CD(x)的函数 K§->CD(x)
p = 1;
for x in N
t = CD(x);
if(t!=null)
{
if t in K
{
//性质2
R(x) = q such that K(q) = t;
}
else
{
K§ = t;
R(x) = p++;
}
}
性质1:每一个block x有且仅有一个对应的p = R(x)
性质2:对于两个不同的block,如果它们的控制依赖都为k§,则这两个block对应的寄存器都为p(对应上述算法中的if语句)

4. 谓词操作

4.1谓词操作的语义
我们假设体系结构提供了一组谓词寄存器,每个寄存器的长度为1位,以及两个定义操作:
Py=stuff(tx) &px,and (1)
Py=stuffbar(tx) &px (2)
其中Px是源谓词寄存器,Py是目标谓词寄存器,而tx“表示对块x的分支条件求值的结果”。
stuff操作的语义是使用自明表示法(一种公理化的风格):
if(px.old)py.new=tx.old
else py.new=py.old
tx.new=tx.old
px.new=px.old
4.2谓词操作的执行风格
位置问题(函数K)取决于这种风格的选择。为了便于我们的讨论,考虑图1中所示的图表。在图中,谓词对块的分配是用简写表示的:
Bx(tx)&Py:表示(1)block B与分支条件t相关联,(2)B的每个操作(包括谓词定义操作,如果有的话)都用谓词py来做谓语。例如,B3(t3) & p5声明将谓词寄存器p5分配给带有分支条件t3的块B3。
以这种方式消除控制流

2021-07-11谓词执行相关推荐

  1. 2021/07/11 老男孩带你21周搞定Go语言 (二)

    P30 回顾,运算符和数组 var [30]int 长度30 int类型的数组 [30]int就代表类型 声明变量做初始化 [-]代表用后面的初始化,让go主机去数长度 数组遍历两种方式,一种是长度, ...

  2. 2021/07/11 老男孩带你21周搞定Go语言 (一)

    P1 为什么要学习go go语言设计之初就考虑到多核CPU了,编译好执行,有几个核就跑满几个核 etcd代替zookeeper P2 课上所有物料介绍 typora的笔记里偏好设置,图片到当前的.as ...

  3. 2021.07.11 【ABAP随笔】采购订单Message输出打印

    Title 采购订单Message输出打印 很多业务中需要在完成订单的时候来进行单据打印的输出操作,比如新建采购订单的时候,需要输出采购订单的PDF或者使用邮件功能来将采购订单发送给制定人员 SAP ...

  4. Neovim开发环境搭建(2021.07.01)

    Neovim开发环境搭建(2021.07.01) 一.搭建环境 Ubuntu 21.04 Neovim 0.4.4 二.Neovim安装 # 下载 neovim,如遇网络问题可以采用 https:// ...

  5. 2021双11上云狂欢节 | 爆款产品底价全面开售

    一年一度的双11狂欢节终于来啦!怎样用最少的钱获得最多的福利?下面这份攻略收藏好,这波活动快冲! 双11主会场:http://click.aliyun.com/m/1000304310/ 01 领取双 ...

  6. 抑郁症最新研究进展(2021年11月)

    ​​推荐阅读:<AD.hi v.癌症.新药.基因编辑.CAR-t等最新进展合集(每周更新)> 据估计,全球有3.5亿人受到抑郁症的折磨,目前我国有超过9500万抑郁症患者,这种疾病会严重影 ...

  7. 武林大会之国产数据库风云榜-2021年11月

    神秘能量篇: 话说在盘古开天之后,有一种神秘的能量出现于天地,后人称之为"数据",人们先后利用骨制品.绳结.纸张.算盘等工具尝试存储并使用这股神秘的力量,又在计算机发明之后,信息可 ...

  8. 关于2021年11月28日PMI认证考试的报名通知

    尊敬的各位考生: 经PMI和中国国际人才交流基金会研究决定,中国大陆地区2021年全国第二期PMI认证考试于11月28日举办,相关事项通知如下. 一.时间安排和举办地区 (一)考试时间:2021年11 ...

  9. 2021.07.07 宇信科技

    2021.07.07 宇信科技 宇信科技          晚上电话面 问了一堆java基础,离谱,jd上也没要求java:简历筛选扣工资! java小白,凭借c语言基础简单回答了一哈,面试官估计在电 ...

  10. 2021年11月_IEEE Transactions on Geoscience and Remote Sensing_科技前言热点调查表

    IEEE Transactions on Geoscience and Remote Sensing文献跟踪 2021年11月 •  59卷 • 第11期 可视化分析: 文献名/代码开源/推荐 研究部 ...

最新文章

  1. skimage 学习笔记
  2. python 笔记:csv 读写
  3. 编程之美-蚂蚁爬杆方法整理
  4. 【Linux】一步一步学Linux——bunzip2命令(66)
  5. 【我所认知的BIOS】— uEFI AHCI Driver(8) — Pci.Read()
  6. 如何使用Apache Camel,Quarkus和GraalVM快速运行100个骆驼
  7. sql双表查询java代码_原生sql 多表查询
  8. python全栈计划_Python 全栈学习视频教程,包含了从 0-99天的全栈学习计划,估计可以学习 1024 小时。...
  9. 如何在vs2010中使用ConfigurationManager
  10. Eclipse快捷键之搜索
  11. (Origin)设置图例位置
  12. 《高翔视觉slam十四讲》学习笔记 第六讲 非线性优化
  13. Spring学习之路——简单入门HelloWorld
  14. 将World中的向下箭头替换为回车符
  15. Python基础简答题
  16. 数据结构与算法(零)-前言
  17. 瑞尔森大学计算机科学研究生,瑞尔森大学计算机科学硕士申请.pdf
  18. 如何清除计算机搜索框内的搜索历史记录,如何清除搜索框中的网站访问历史记录...
  19. 【HBase 进阶】-- Region 过多的影响 合理分区数量
  20. 视频合并技巧,如何将多个视频合并在一起

热门文章

  1. ERP系统维护工作浅谈
  2. Terminated due to memory error
  3. bs架构 mysql_bs架构是什么意思?
  4. 计算机专业ps社会实践报告模板,社会实践调查报告范文_个人陈述(PS)写作注意_沪江英语...
  5. 分数加减法(Java)acm.sdut
  6. 中国手机显示屏产业运作状况与发展格局分析报告2022版
  7. seo专用推送神器免费使用
  8. oracle对日期字符串动态分区,oracle 11g分区表新特性---interval分区 的坑
  9. SAR信号处理之窗函数9——凯泽(Kaiser)窗
  10. VLC Media Player的简介