aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cibic.tex23
-rw-r--r--ssa.c4
2 files changed, 25 insertions, 2 deletions
diff --git a/cibic.tex b/cibic.tex
index d8b1aa3..fdcd47f 100644
--- a/cibic.tex
+++ b/cibic.tex
@@ -584,6 +584,29 @@ a_0[8] = t12
to guide the final translation. Of course, the code above does produce
correct result compiled by CIBIC.
\end{enumerate}
+
+\begin{figure}[H]
+ \centering
+ \RecustomVerbatimEnvironment{Verbatim}{BVerbatim}{}
+ \begin{minted}{c}
+calc_dominance_frontier();
+/* build SSA */
+insert_phi(vars);
+renaming_vars(oprs);
+/* optimization on SSA */
+const_propagation();
+subexp_elimination();
+const_propagation();
+strength_reduction();
+deadcode_elimination();
+/* out of SSA */
+mark_insts();
+build_intervals();
+register_alloc();
+ \end{minted}
+ \caption{Workflow of CIBIC IR}
+\end{figure}
+
\subsection{Single Static Assignment Form}
CIBIC makes good use of SSA (Single Static Assignment) form. SSA form is a
property of an IR, which says that each variable is assigned \textbf{exactly
diff --git a/ssa.c b/ssa.c
index af1311f..ba76a2b 100644
--- a/ssa.c
+++ b/ssa.c
@@ -1414,7 +1414,7 @@ int intersect(int b1, int b2) {
return b1;
}
-void calc_dominant_frontier(void) {
+void calc_dominance_frontier(void) {
int i;
int ch = 1;
ocnt = 0;
@@ -2706,7 +2706,7 @@ void ssa_func(CType_t func) {
}
cpset_destroy(avs);
cpset_destroy(vs);
- calc_dominant_frontier();
+ calc_dominance_frontier();
/* build SSA */
insert_phi(vars);
renaming_vars(oprs);