[pypy-commit] pypy result-in-resops: fix ESCAPE_OP
fijal
noreply at buildbot.pypy.org
Sun Sep 23 20:41:55 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r57490:35c8b7cdaaf6
Date: 2012-09-23 20:41 +0200
http://bitbucket.org/pypy/pypy/changeset/35c8b7cdaaf6/
Log: fix ESCAPE_OP
diff --git a/pypy/jit/metainterp/optimizeopt/rewrite.py b/pypy/jit/metainterp/optimizeopt/rewrite.py
--- a/pypy/jit/metainterp/optimizeopt/rewrite.py
+++ b/pypy/jit/metainterp/optimizeopt/rewrite.py
@@ -97,14 +97,16 @@
self.pure(rop.INT_SUB, op.getarg(1).getint(), op.getarg(0), op)
def optimize_INT_ADD(self, op):
- v1 = self.getvalue(op.getarg(0))
- v2 = self.getvalue(op.getarg(1))
+ arg1 = op.getarg(0)
+ arg2 = op.getarg(1)
+ v1 = self.getvalue(arg1)
+ v2 = self.getvalue(arg2)
# If one side of the op is 0 the result is the other side.
if v1.is_constant() and v1.box.getint() == 0:
- self.make_equal_to(op, v2)
+ self.replace(op, arg2)
elif v2.is_constant() and v2.box.getint() == 0:
- self.make_equal_to(op, v1)
+ self.replace(op, arg1)
else:
self.emit_operation(op)
# Synthesize the reverse op for optimize_default to reuse
diff --git a/pypy/jit/tool/oparser.py b/pypy/jit/tool/oparser.py
--- a/pypy/jit/tool/oparser.py
+++ b/pypy/jit/tool/oparser.py
@@ -27,6 +27,24 @@
def getopnum(cls):
return cls.OPNUM
+ def copy_if_modified_by_optimization(self, opt):
+ newargs = None
+ for i, arg in enumerate(self._args):
+ new_arg = opt.get_value_replacement(arg)
+ if new_arg is not None:
+ if newargs is None:
+ newargs = []
+ for k in range(i):
+ newargs.append(self._args[k])
+ self._args[:i]
+ newargs.append(new_arg)
+ elif newargs is not None:
+ newargs.append(arg)
+ if newargs is None:
+ return self
+ return ESCAPE_OP(self.OPNUM, newargs, self.getresult(),
+ self.getdescr())
+
class FORCE_SPILL(UnaryOp, ResOpNone, PlainResOp):
OPNUM = -124
More information about the pypy-commit
mailing list