Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r79047:ccf6168de8e8
Date: 2015-08-19 11:09 +0200
http://bitbucket.org/pypy/pypy/changeset/ccf6168de8e8/

Log:    some docs about unrolling

diff --git a/rpython/jit/metainterp/optimizeopt/unrolling.rst 
b/rpython/jit/metainterp/optimizeopt/unrolling.rst
new file mode 100644
--- /dev/null
+++ b/rpython/jit/metainterp/optimizeopt/unrolling.rst
@@ -0,0 +1,42 @@
+
+nomenclature:
+
+Unrolling follows that order of operations:
+
+* optimize one version of a loop, call it <preamble>. At the end of <preamble>,
+  we gather virtual state by visiting the status of optimized boxes as
+  presented in the arguments to JUMP. Virtual state then can produce
+  a number of inputargs from a list
+
+* gather all the operations that can be produced in the short preamble. 
They're,
+  as far as I can tell:
+
+  - jump arguments, as generated from the virtual state
+
+  - pure operations, including pure calls
+
+  - call_loopinvariant
+
+  - heap cache
+
+  or the combination of the above. Note that some operations can be produced
+  in more than one way. In those cases we keep both.
+
+* the optimizer state is influenced by replaying all the short boxes producing
+  operations. This populates the heap cache and the pure operation cache.
+
+* import the values of the inputargs (so e.g. constantness, intbounds, etc.)
+
+* we optimize normally, using extra boxes from the optimizer state
+
+* we import all the boxes that were not generated during this optimization
+  phase. This means, they have to:
+
+  * be added to the start label
+
+  * be added to the end jump
+
+  * be added to the short preamble
+
+* we close the loop, which creates correct boxes in the jump (from 
virtualstate)
+  
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to