[pypy-svn] pypy fold_intadd: Forgot to fix this one.

ademan commits-noreply at bitbucket.org
Wed Mar 16 08:41:33 CET 2011


Author: Daniel Roberts <Ademan555 at gmail.com>
Branch: fold_intadd
Changeset: r42694:831f61259229
Date: 2011-03-16 00:39 -0700
http://bitbucket.org/pypy/pypy/changeset/831f61259229/

Log:	Forgot to fix this one.

diff --git a/pypy/jit/metainterp/optimizeopt/__init__.py b/pypy/jit/metainterp/optimizeopt/__init__.py
--- a/pypy/jit/metainterp/optimizeopt/__init__.py
+++ b/pypy/jit/metainterp/optimizeopt/__init__.py
@@ -2,43 +2,67 @@
 from pypy.jit.metainterp.optimizeopt.rewrite import OptRewrite
 from pypy.jit.metainterp.optimizeopt.intbounds import OptIntBounds
 from pypy.jit.metainterp.optimizeopt.virtualize import OptVirtualize
-from pypy.jit.metainterp.optimizeopt.fold_intadd import OptAddition
 from pypy.jit.metainterp.optimizeopt.heap import OptHeap
 from pypy.jit.metainterp.optimizeopt.string import OptString
 from pypy.jit.metainterp.optimizeopt.unroll import optimize_unroll, OptInlineShortPreamble
+from pypy.jit.metainterp.optimizeopt.fficall import OptFfiCall
+from pypy.jit.metainterp.optimizeopt.simplify import OptSimplify
+from pypy.rlib.jit import PARAMETERS
+from pypy.rlib.unroll import unrolling_iterable
 
-def optimize_loop_1(metainterp_sd, loop, unroll=True,
+ALL_OPTS = [('intbounds', OptIntBounds),
+            ('rewrite', OptRewrite),
+            ('virtualize', OptVirtualize),
+            ('string', OptString),
+            ('heap', OptHeap),
+            ('ffi', OptFfiCall),
+            ('unroll', None)]
+# no direct instantiation of unroll
+unroll_all_opts = unrolling_iterable(ALL_OPTS)
+
+ALL_OPTS_DICT = dict.fromkeys([name for name, _ in ALL_OPTS])
+
+ALL_OPTS_NAMES = ':'.join([name for name, _ in ALL_OPTS])
+PARAMETERS['enable_opts'] = ALL_OPTS_NAMES
+
+def optimize_loop_1(metainterp_sd, loop, enable_opts,
                     inline_short_preamble=True, retraced=False):
     """Optimize loop.operations to remove internal overheadish operations. 
     """
-    opt_str = OptString()
-    optimizations = [
-                     OptAddition(),
-                     OptIntBounds(),
-                     OptRewrite(),
-                     OptVirtualize(),
-                     opt_str,
-                     OptHeap(),
-                    ]
+    optimizations = []
+    unroll = 'unroll' in enable_opts
+    for name, opt in unroll_all_opts:
+        if name in enable_opts:
+            if opt is not None:
+                o = opt()
+                if unroll and name == 'string':
+                    o.enabled = False
+                # FIXME: Workaround to disable string optimisation
+                # during preamble but to keep it during the loop
+                optimizations.append(o)
+
+    if 'rewrite' not in enable_opts or 'virtualize' not in enable_opts:
+        optimizations.append(OptSimplify())
+    
     if inline_short_preamble:
-        optimizations = [OptInlineShortPreamble(retraced)] +  optimizations
-        
-    if metainterp_sd.jit_ffi:
-        from pypy.jit.metainterp.optimizeopt.fficall import OptFfiCall
-        optimizations = optimizations + [
-                     OptFfiCall(),
-                    ]
+        optimizations = [OptInlineShortPreamble(retraced)] + optimizations
 
     if unroll:
-        opt_str.enabled = False # FIXME: Workaround to disable string optimisation
-                                # during preamble but to keep it during the loop
         optimize_unroll(metainterp_sd, loop, optimizations)
     else:
         optimizer = Optimizer(metainterp_sd, loop, optimizations)
         optimizer.propagate_all_forward()
 
-def optimize_bridge_1(metainterp_sd, bridge, inline_short_preamble=True,
-                      retraced=False):
+def optimize_bridge_1(metainterp_sd, bridge, enable_opts,
+                      inline_short_preamble=True, retraced=False):
     """The same, but for a bridge. """
-    optimize_loop_1(metainterp_sd, bridge, False, inline_short_preamble,
-                    retraced)
+    enable_opts = enable_opts.copy()
+    try:
+        del enable_opts['unroll']
+    except KeyError:
+        pass
+    optimize_loop_1(metainterp_sd, bridge, enable_opts,
+                    inline_short_preamble, retraced)
+
+if __name__ == '__main__':
+    print ALL_OPTS_NAMES


More information about the Pypy-commit mailing list