Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions 30-optimize.tex
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,7 @@ \subsubsection{支配树构建算法}
根据每个节点的直接支配节点,我们可以建构支配树。每个节点的直接支配节点到对应节点连边。
由于除入口节点外的每个节点入度都为 1,这样的图构成一棵支配树。


\subsubsection{确定支配边界}

根据支配边界的定义,一个节点 X 是节点 Y 的支配边界,当且仅当 Y 在 X 的一个控制流前驱节点的支配集中但 Y 不在 X 的支配集中。
Expand Down Expand Up @@ -365,7 +366,7 @@ \subsection{\texttt{phi} 指令放置算法}
直到没有新的支配边界或者对应块的支配边界已经预留了对应变量的 \texttt{phi} 指令。

\texttt{phi} 指令放置完毕后,我们需要对变量的使用进行重命名,即维护好之前提到的变量的 “版本”。
重命名的过程包括:为所有的 use 替换变量名、确定 \texttt{phi} 指令中不同块进入对应的值。一种可行的方式是为每个变量名开一个栈。这一步骤,我们可以在支配树上完成。具体的操作为
重命名的过程包括:为所有的 use 替换变量名、确定 \texttt{phi} 指令中不同块进入对应的值。一种可行的方式是为每个变量名开一个栈。这一步骤,我们可以在CFG上完成。具体的操作为
\begin{itemize}
\item 在每个基本块中,首先应当对入口顶部的 \texttt{phi} 指令进行处理。我们要为这些\texttt{phi} 指令指定一个合适的\texttt{obj}名。然后,我们需要把这个\texttt{obj}名,压入这条\texttt{phi} 指令对应的 \texttt{alloca} 指令对应变量的对应栈中。对于每一个\texttt{alloca}指令对应的变量,我们都应该创建一个栈。栈顶就是当前的变量值。
\item 在基本块中所有的操作都已经重写之后,我们将使用当前的形式名重写程序块在 CFG 中各后继节点中的适当 \texttt{phi} 指令的参数,即用当前对应栈的栈顶元素更新之。
Expand Down Expand Up @@ -838,4 +839,4 @@ \subsection{改进 —— SCCP}
对于无条件跳转 \text{br} 语句,我们需要把 “当前块” 到 “跳往块” 的边加入控制流队列。对于条件跳转 \text{br} 语句,
如果条件被标记为 “未定义”,则不操作。如果被标记为 “常量”,则根据条件跳转的结果,
把 “当前块” 到 “跳往块” 的那条边加入控制流队列。否则,需要将两条边都加入控制流队列。
特别地,当一个表达式的标记更新的时候,我们需要把所有使用这个表达式的地方加入表达式队列。
特别地,当一个表达式的标记更新的时候,我们需要把所有使用这个表达式的地方加入表达式队列。
8 changes: 8 additions & 0 deletions reference.bib
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@ @book{DragonBook
isbn = {9787111251217},
}

@book{register,
author = {华保健},
title = {寄存器分配引论},
publisher = {中国科学技术大学出版社},
year = {2022},
isbn = {9787312053184},
}

@book{EngineeringACompiler,
author = {Keith D. Cooper and Linda Torczon},
title = {Engineering a Compiler (2nd Edition)},
Expand Down