diff options
-rw-r--r-- | cibic.tex | 23 | ||||
-rw-r--r-- | ssa.c | 4 |
2 files changed, 25 insertions, 2 deletions
@@ -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 @@ -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); |