[pypy-svn] r79727 - pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt

hakanardo at codespeak.net hakanardo at codespeak.net
Wed Dec 1 21:46:36 CET 2010


Author: hakanardo
Date: Wed Dec  1 21:46:33 2010
New Revision: 79727

Modified:
   pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py
Log:
Replacements mode that replaces the long preamble with the short now working again

Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py	(original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py	Wed Dec  1 21:46:33 2010
@@ -101,12 +101,20 @@
                 if False:
                     # FIXME: This should save some memory but requires
                     # a lot of tests to be fixed...
-                    loop.preamble.operations = short
-                    short_loop = loop.preamble
-                else:
-                    short_loop = TreeLoop('short preamble')
-                    short_loop.inputargs = loop.preamble.inputargs[:]
-                    short_loop.operations = short
+                    loop.preamble.operations = short[:]
+                    
+                # Turn guards into conditional jumps to the preamble
+                for i in range(len(short)):
+                    op = short[i]
+                    if op.is_guard():
+                        op = op.clone()
+                        op.setfailargs(loop.preamble.inputargs)
+                        op.setjumptarget(loop.preamble.token)
+                        short[i] = op
+
+                short_loop = TreeLoop('short preamble')
+                short_loop.inputargs = loop.preamble.inputargs[:]
+                short_loop.operations = short
 
                 assert isinstance(loop.preamble.token, LoopToken)
                 if loop.preamble.token.short_preamble:
@@ -269,6 +277,7 @@
                                 "at position: ", preamble_i)
                     return None
                 short_preamble.append(op)
+                
             state.update(op)
             preamble_i += 1
 
@@ -317,15 +326,6 @@
             if op.result:
                 seen[op.result] = True
         
-        # Turn guards into conditional jumps to the preamble
-        for i in range(len(short_preamble)):
-            op = short_preamble[i]
-            if op.is_guard():
-                op = op.clone()
-                op.setfailargs(preamble.inputargs)
-                op.setjumptarget(preamble.token)
-                short_preamble[i] = op
-
         return short_preamble
 
 class ExeState(object):



More information about the Pypy-commit mailing list