[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