Author: Hakan Ardo <[email protected]>
Branch: 
Changeset: r54839:8cc6f87c034b
Date: 2012-05-01 11:22 +0200
http://bitbucket.org/pypy/pypy/changeset/8cc6f87c034b/

Log:    When unrolling is emabled OptSimplify should not touch LABEL and
        JUMP ops

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
@@ -51,7 +51,7 @@
     if ('rewrite' not in enable_opts or 'virtualize' not in enable_opts
         or 'heap' not in enable_opts or 'unroll' not in enable_opts
         or 'pure' not in enable_opts):
-        optimizations.append(OptSimplify())
+        optimizations.append(OptSimplify(unroll))
 
     return optimizations, unroll
 
diff --git a/pypy/jit/metainterp/optimizeopt/simplify.py 
b/pypy/jit/metainterp/optimizeopt/simplify.py
--- a/pypy/jit/metainterp/optimizeopt/simplify.py
+++ b/pypy/jit/metainterp/optimizeopt/simplify.py
@@ -4,8 +4,9 @@
 from pypy.jit.metainterp.history import TargetToken, JitCellToken
 
 class OptSimplify(Optimization):
-    def __init__(self):
+    def __init__(self, unroll):
         self.last_label_descr = None
+        self.unroll = unroll
         
     def optimize_CALL_PURE(self, op):
         args = op.getarglist()
@@ -35,24 +36,26 @@
         pass
 
     def optimize_LABEL(self, op):
-        descr = op.getdescr()
-        if isinstance(descr, JitCellToken):
-            return self.optimize_JUMP(op.copy_and_change(rop.JUMP))
-        self.last_label_descr = op.getdescr()
+        if not self.unroll:
+            descr = op.getdescr()
+            if isinstance(descr, JitCellToken):
+                return self.optimize_JUMP(op.copy_and_change(rop.JUMP))
+            self.last_label_descr = op.getdescr()
         self.emit_operation(op)
         
     def optimize_JUMP(self, op):
-        descr = op.getdescr()
-        assert isinstance(descr, JitCellToken)
-        if not descr.target_tokens:
-            assert self.last_label_descr is not None
-            target_token = self.last_label_descr
-            assert isinstance(target_token, TargetToken)
-            assert target_token.targeting_jitcell_token is descr
-            op.setdescr(self.last_label_descr)
-        else:
-            assert len(descr.target_tokens) == 1
-            op.setdescr(descr.target_tokens[0])
+        if not self.unroll:
+            descr = op.getdescr()
+            assert isinstance(descr, JitCellToken)
+            if not descr.target_tokens:
+                assert self.last_label_descr is not None
+                target_token = self.last_label_descr
+                assert isinstance(target_token, TargetToken)
+                assert target_token.targeting_jitcell_token is descr
+                op.setdescr(self.last_label_descr)
+            else:
+                assert len(descr.target_tokens) == 1
+                op.setdescr(descr.target_tokens[0])
         self.emit_operation(op)
 
 dispatch_opt = make_dispatcher_method(OptSimplify, 'optimize_',
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to