【论文研读】Detection of redundant expressions: A precise, efficient, and pragmatic algorithm in SSA.

继续研读GVN领域的文章,又是一篇重要的文章,此文提出的算法已经在LLVM中实现为NewGVN。能够找到所有Herbrand等值关系且时间复杂度为polynomial。

目录

  • Introduction
  • The Problem
  • Terminology
  • Basic Concept
  • Algorithm
  • Correctness proof and complexity analysis
  • Experimental results
  • Related Work
  • Conclusion

Introduction

此文定义的precise是能找到所有的Herbrand equivalence, 和Kildall算法能找到的一样,同时保持Polynomial-time。文中把值可用(也即冗余情况)分为两类,一种是完全冗余,一种是部分冗余。区别在于是all-path上的equivalence,还是respective path上的equivalence,本质是考察表达式相关的基本块之间的支配关系。

The Problem

本部分分别介绍了上述的两种情况,并且分析了Kildall算法的复杂度。
When computational complexity is considered, the algorithm is less desirable as it takes exponential time due to the way the join operation is defined. A join of two input pools can result in a pool whose size is quadratic in size of the input pools(where the size of a pool is measured in terms of number of equivalence classes). Hence a join of n input pools may result in a pool whose size is exponential in size of input pools.
此文把等值类划分称为expression pools。上述引用的一段讲述了为什么Kaildall算法是指数复杂度的。
在proposed solution部分通过因此vpf(value phi function)解决上述问题。

Terminology

介绍使用到的相关术语。
注意本文使用小写字母表示point,大写字母表示path.且value number和value expression的定义也很重要,前者表示对变量的值编号,后者表示对表达式的值编号。

Basic Concept

介绍算法的大致思想,思路还是比较清晰的,且下一章节会具体介绍算法实现。

Algorithm

【论文研读】Detection of redundant expressions: A precise, efficient, and pragmatic algorithm in SSA._第1张图片
Join函数主要是为了解决两个Partition在某个交汇点的基本块处的Partition,也即根据Predecessor的POUT计算当前基本块的PIN。
【论文研读】Detection of redundant expressions: A precise, efficient, and pragmatic algorithm in SSA._第2张图片结合文中给出的例子进行分析,此处根据P1和P2计算P3,此时的k即为block3。首先P1和P2分别包含3个class,共有9种情况,分别对应标号为 l 1 , l 2 , l 3 l_1, l_2, l_3 l1,l2,l3 r 1 , r 2 , r 3 r_1, r_2, r_3 r1,r2,r3,其中只有 l 1 l_1 l1 r 1 r_1 r1 l 2 l_2 l2 r 2 r_2 r2 l 3 l_3 l3 r 3 r_3 r3三种情况获得的集合交集不是空集。分别为 { x 3 } , { y 3 } , { z 3 } \{x_3\}, \{y_3\},\{z_3\} {x3},{y3},{z3},且均不是value number,因为value number不相等。这种情况反映在代码的第5行,会重新分配一个value number。

【论文研读】Detection of redundant expressions: A precise, efficient, and pragmatic algorithm in SSA._第3张图片
熟悉数据流分析框架的应该对状态转移函数比较敏感。
【论文研读】Detection of redundant expressions: A precise, efficient, and pragmatic algorithm in SSA._第4张图片
【论文研读】Detection of redundant expressions: A precise, efficient, and pragmatic algorithm in SSA._第5张图片
上述图是对状态转移函数中的细节函数进行展示,主要是为了分析和标记vpf。
【论文研读】Detection of redundant expressions: A precise, efficient, and pragmatic algorithm in SSA._第6张图片
在这里插入图片描述
一个很基本的数据流分析框架。

【论文研读】Detection of redundant expressions: A precise, efficient, and pragmatic algorithm in SSA._第7张图片

Correctness proof and complexity analysis

Experimental results

嘎嘎薄纱

Related Work

唯一的意外竟然是提到了Nie JT的一篇文章,是北大的大佬。

Conclusion

竟然没有后续工作展望。。。
谁不知道本文很牛呀,LLVM里面都有的优化。

你可能感兴趣的:(编程语言,c++,编译器,值编号,程序优化,LLVM)