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