Skip to content

Commit

Permalink
update midend docs
Browse files Browse the repository at this point in the history
  • Loading branch information
Ksitta committed Sep 5, 2024
1 parent 9d18af0 commit 573a7d4
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
10 changes: 5 additions & 5 deletions docs/contest/midend/cp.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# 常量传播

<!--
## 原理
常量传播的目的在于发掘代码中可能存在的常量,尽量用对常量的引用替代对虚拟寄存器的引用(虚拟寄存器和变量是同一个概念,以下都使用变量),并尽量计算出可以计算的常量表达式。
Expand Down Expand Up @@ -29,8 +29,8 @@
- 如果一个基本块末尾处它是常量,另一个基本块结尾处它是$UNDEF$,则交汇结果为**这个常量**
- 一旦出现了这样的情形,可能意味着后续程序中有使用未赋初值就使用一个变量的行为,优化器可以依据"未赋初值的变量可以有任何取值",认为这个取值就是另一个基本块的常量值,从而就回到了前一种情形
- 如果两个基本块末尾处它都是$UNDEF$,则交汇结果为$UNDEF$
- 否则,交汇结果为$NAC$

这个交汇操作用格图表示如下:
- 否则,交汇结果为$NAC$ -->

![int_lattice](./pic/int_lattice.png)
<!-- 这个交汇操作用格图表示如下: -->
<!--
![int_lattice](./pic/int_lattice.png) -->
6 changes: 3 additions & 3 deletions docs/contest/midend/dce.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
死代码消除即无用代码消除,死代码和不可达代码是两个概念。前者指的是执行之后没有任何作用的代码(例如:多余的计算),后者指的是永远无法被执行到的代码。

活跃变量分析为每个程序点计算出所有变量的集合的子集,用于表示该点处活跃的变量,所以数据流分析的值集为所有变量的集合的幂集。"活跃"的含义是在程序执行过这一点**之后**,这个变量**当前的值**会被使用到,所以数据流分析是后向的。对于单个语句$S$,传递函数要根据$S$之后活跃的变量计算$S$之前活跃的变量,计算方法为:所有$S$用到的变量在$S$之前都是活跃的,所有$S$之后活跃的变量,如果没有在$S$中被定值,证明未来的那次使用用的还是$S$之前的值,所以也是活跃的。

综合得,传递函数定义为:$f_S(x) = (x - def_S) \cup use_S$。其中$def_S$是$S$中定值的所有变量的集合,$use_S$是$S$中使用的所有变量的集合。
<!--
综合得,传递函数定义为:$f_S(x) = (x - def_S) \cup use_S$。其中 $def_S$ 是$S$中定值的所有变量的集合,$use_S$是$S$中使用的所有变量的集合。
基本块$B$的传递函数定义为:
Expand All @@ -24,7 +24,7 @@ $$
再看$def_B$和$Def$,其实很容易可以看出这两个集合并不相同,$def_B$包含了被定值的所有变量,而$Def$要求定值之前没有引用过,所以$Def \subseteq def_B$。然而这个区别不会影响任何计算结果:如果变量$x$满足$x \in def_B, x \notin Def$,则意味着它定值之前被引用过,则$x \in use_B, x \in LiveUse$,则它一定在这一步的结果集合中。
> 所以,$Def$这样的定义是冗余的,只会加大计算$Def$时的计算量,使用$def_B$的定义就会简单一些,而且不会影响最终结果。
> 所以,$Def$这样的定义是冗余的,只会加大计算$Def$时的计算量,使用$def_B$的定义就会简单一些,而且不会影响最终结果。 -->

这里讲一下几个常见的需要注意的点:

Expand Down

0 comments on commit 573a7d4

Please sign in to comment.