|
@@ -3236,12 +3236,13 @@ conditional control flow.
|
|
|
\label{sec:r2-lang}
|
|
|
|
|
|
The syntax of the $R_2$ language is defined in
|
|
|
-Figure~\ref{fig:r2-syntax}. It includes all of $R_1$ (shown in gray) ,
|
|
|
+Figure~\ref{fig:r2-syntax}. It includes all of $R_1$ (shown in gray),
|
|
|
the Boolean literals \code{\#t} and \code{\#f}, and the conditional
|
|
|
-\code{if} expression. Also, we expand the operators to include
|
|
|
-\key{and} and \key{not}, the \key{eq?} operations for
|
|
|
-comparing two integers or two Booleans, and the \key{<}, \key{<=},
|
|
|
-\key{>}, and \key{>=} operations for comparing integers.
|
|
|
+\code{if} expression. Also, we expand the operators to include
|
|
|
+subtraction, \key{and}, \key{or} and \key{not}, the \key{eq?}
|
|
|
+operations for comparing two integers or two Booleans, and the
|
|
|
+\key{<}, \key{<=}, \key{>}, and \key{>=} operations for comparing
|
|
|
+integers.
|
|
|
|
|
|
\begin{figure}[tp]
|
|
|
\centering
|
|
@@ -3999,7 +4000,10 @@ if_end21289:
|
|
|
\node (R2) at (0,2) {\large $R_2$};
|
|
|
\node (R2-2) at (3,2) {\large $R_2$};
|
|
|
\node (R2-3) at (6,2) {\large $R_2$};
|
|
|
-\node (C1-1) at (3,0) {\large $C_1$};
|
|
|
+\node (R2-4) at (9,2) {\large $R_2$};
|
|
|
+\node (R2-5) at (12,2) {\large $R_2$};
|
|
|
+\node (C1-1) at (6,0) {\large $C_1$};
|
|
|
+\node (C1-2) at (3,0) {\large $C_1$};
|
|
|
|
|
|
\node (x86-2) at (3,-2) {\large $\text{x86}^{*}$};
|
|
|
\node (x86-3) at (6,-2) {\large $\text{x86}^{*}$};
|
|
@@ -4011,9 +4015,12 @@ if_end21289:
|
|
|
\node (x86-2-2) at (6,-4) {\large $\text{x86}^{*}$};
|
|
|
|
|
|
\path[->,bend left=15] (R2) edge [above] node {\ttfamily\footnotesize\color{red} typecheck} (R2-2);
|
|
|
-\path[->,bend left=15] (R2-2) edge [above] node {\ttfamily\footnotesize uniquify} (R2-3);
|
|
|
-\path[->,bend left=15] (R2-3) edge [right] node {\ttfamily\footnotesize\color{red} flatten} (C1-1);
|
|
|
-\path[->,bend right=15] (C1-1) edge [left] node {\ttfamily\footnotesize\color{red} select-instr.} (x86-2);
|
|
|
+\path[->,bend left=15] (R2-2) edge [above] node {\ttfamily\footnotesize shrink} (R2-3);
|
|
|
+\path[->,bend left=15] (R2-3) edge [above] node {\ttfamily\footnotesize uniquify} (R2-4);
|
|
|
+\path[->,bend left=15] (R2-4) edge [above] node {\ttfamily\footnotesize remove-complex.} (R2-5);
|
|
|
+\path[->,bend left=15] (R2-5) edge [right] node {\ttfamily\footnotesize\color{red} explicate-control} (C1-1);
|
|
|
+\path[->,bend right=15] (C1-1) edge [above] node {\ttfamily\footnotesize uncover-locals} (C1-2);
|
|
|
+\path[->,bend right=15] (C1-2) edge [left] node {\ttfamily\footnotesize\color{red} select-instr.} (x86-2);
|
|
|
\path[->,bend left=15] (x86-2) edge [right] node {\ttfamily\footnotesize\color{red} uncover-live} (x86-2-1);
|
|
|
\path[->,bend right=15] (x86-2-1) edge [below] node {\ttfamily\footnotesize build-inter.} (x86-2-2);
|
|
|
\path[->,bend right=15] (x86-2-2) edge [right] node {\ttfamily\footnotesize allocate-reg.} (x86-3);
|