Skip to content

Commit

Permalink
Merge pull request chenzomi12#272 from Alfrredgy/fix-lcm
Browse files Browse the repository at this point in the history
fix lcm
  • Loading branch information
chenzomi12 authored Jul 10, 2024
2 parents e735ad9 + 71b591f commit d3b2898
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions 03Compiler/03Frontend/08CSE.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ $$

从公式上看,可能下沉表达式集合分为两部分。若表达式 $e\in Earliest(i,j)$,则表达式 e 一定是可能下沉的表达式,而另一部分的表达式来自于 从 $b_i$ 下沉下来的表达式,这些表达式满足在 $b_i$ 的入口处是可下沉的,并且这些表达式在 $b_i$ 不是向上展示的表达式,因为如果表达式 $e\in UEExpr(i)$,则表明表达式在 $b_i$ 中被求值,如果下沉,那么下沉的这个表达式则成为冗余表达式。

#### 重新代码
#### 重写代码

最后一步使用 $LaterIn(n)$ 和 $Later(i,j)$ 生成额外的集合指导编译器重写代码,额外集合包括 $Insert(i,j)$ 和 $Delete(i)$ 集合。

Expand All @@ -149,7 +149,7 @@ $$
插入规则为:

- 如果 $b_i$ 只有一个后继节点 $b_j$,则将 $Insert(i,j)$ 中的表达式插入到 $b_i$ 的出口处。
- 如果 $b_j$ 只有一个前趋节点 $b_i$,则将 $Insert(i,j)$ 中的表达式插入到 $b_i$ 的入口处。
- 如果 $b_j$ 只有一个前趋节点 $b_i$,则将 $Insert(i,j)$ 中的表达式插入到 $b_j$ 的入口处。
- 若前两个条件都不满足,则在边 {i->j} 上新建一个基本块,将 $Insert(i,j)$ 中的表达式插入到该基本块中。

需要注意的是,由于插入的是新的赋值语句,所以插入后,有一些表达式冗余了。比如对于一个基本块的向上展示的表达式。因此编译器对每个基本块都需要维护一个删除集合,记为 $Delete(i)$。其定义如下:
Expand Down

0 comments on commit d3b2898

Please sign in to comment.