[pypy-commit] extradoc extradoc: merge

cfbolz noreply at buildbot.pypy.org
Fri Aug 17 13:51:11 CEST 2012


Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: extradoc
Changeset: r4669:e6cb979d4a9c
Date: 2012-08-17 12:27 +0200
http://bitbucket.org/pypy/extradoc/changeset/e6cb979d4a9c/

Log:	merge

diff --git a/talk/dls2012/paper.tex b/talk/dls2012/paper.tex
--- a/talk/dls2012/paper.tex
+++ b/talk/dls2012/paper.tex
@@ -424,7 +424,7 @@
             set($p_{5}$, intval, $i_{4}$)
 jump($L_0$, $p_{0}$, $p_{5}$)
 \end{lstlisting}
-\caption{An Unoptimized Trace of the Example Interpreter}
+\caption{An Unoptimized Trace of the example interpreter}
 \label{fig:unopt-trace}
 \end{figure}
 
@@ -742,6 +742,17 @@
 In the optimized trace $J$ is replaced by $\hat J$ and $K$ by $\hat
 K$.
 
+It is interesting to note that the described approach automatically deals with
+implicit control dependencies correctly, whereas in other approaches this needs
+to be carefully programmed in. A commonly used example for a control dependency
+is a division operation that needs to be preceded by a check for the second
+argument being 0. In a trace, such a check would be done with a guard. The
+division operation must not be moved before that guard, and indeed, this is
+never done. If the division is loop invariant, the result computed in copy of
+the division operation in the preamble is reused. This division operation is
+preceded by a copy of the non-null guard, which ensures that it can be executed
+correctly.
+
 \subsection{Allocation Removal}
 \label{sub:allocation}
 
@@ -870,7 +881,7 @@
     $i_{8}$ = $i_{4}+i_{3}$
 jump($L_1$, $p_{0}$, $i_{3}$, $i_8$)
 \end{lstlisting}
-\caption{The fully optimized loop of the Example Interpreter}
+\caption{The fully optimized loop of the example interpreter}
 \label{fig:opt-trace}
 \end{figure}
 


More information about the pypy-commit mailing list