[pypy-commit] pypy default: backout c8e9da1478dc, broke translation

bdkearns noreply at buildbot.pypy.org
Thu May 1 20:13:07 CEST 2014


Author: Brian Kearns <bdkearns at gmail.com>
Branch: 
Changeset: r71145:7b0b1b52601d
Date: 2014-05-01 14:11 -0400
http://bitbucket.org/pypy/pypy/changeset/7b0b1b52601d/

Log:	backout c8e9da1478dc, broke translation

diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -347,21 +347,6 @@
     def forget_numberings(self, box):
         self.optimizer.forget_numberings(box)
 
-    def _can_optimize_call_pure(self, op):
-        arg_consts = []
-        for i in range(op.numargs()):
-            arg = op.getarg(i)
-            const = self.get_constant_box(arg)
-            if const is None:
-                return None
-            arg_consts.append(const)
-        else:
-            # all constant arguments: check if we already know the result
-            try:
-                return self.optimizer.call_pure_results[arg_consts]
-            except KeyError:
-                return None
-
 
 class Optimizer(Optimization):
 
diff --git a/rpython/jit/metainterp/optimizeopt/pure.py b/rpython/jit/metainterp/optimizeopt/pure.py
--- a/rpython/jit/metainterp/optimizeopt/pure.py
+++ b/rpython/jit/metainterp/optimizeopt/pure.py
@@ -57,16 +57,6 @@
             self.emit_operation(nextop)
 
     def optimize_CALL_PURE(self, op):
-        # Step 1: check if all arguments are constant
-        result = self._can_optimize_call_pure(op)
-        if result is not None:
-            # this removes a CALL_PURE with all constant arguments.
-            self.make_constant(op.result, result)
-            self.last_emitted_operation = REMOVED
-            return
-
-        # Step 2: check if all arguments are the same as a previous
-        # CALL_PURE.
         args = self.optimizer.make_args_key(op)
         oldop = self.pure_operations.get(args, None)
         if oldop is not None and oldop.getdescr() is op.getdescr():
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -516,13 +516,24 @@
         return False
 
     def optimize_CALL_PURE(self, op):
-        # this removes a CALL_PURE with all constant arguments.
-        # Note that it's also done in pure.py.  For now we need both...
-        result = self._can_optimize_call_pure(op)
-        if result is not None:
-            self.make_constant(op.result, result)
-            self.last_emitted_operation = REMOVED
-            return
+        arg_consts = []
+        for i in range(op.numargs()):
+            arg = op.getarg(i)
+            const = self.get_constant_box(arg)
+            if const is None:
+                break
+            arg_consts.append(const)
+        else:
+            # all constant arguments: check if we already know the result
+            try:
+                result = self.optimizer.call_pure_results[arg_consts]
+            except KeyError:
+                pass
+            else:
+                # this removes a CALL_PURE with all constant arguments.
+                self.make_constant(op.result, result)
+                self.last_emitted_operation = REMOVED
+                return
         self.emit_operation(op)
 
     def optimize_GUARD_NO_EXCEPTION(self, op):
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -5164,6 +5164,7 @@
         self.optimize_strunicode_loop(ops, expected)
 
     def test_call_pure_vstring_const(self):
+        py.test.skip("implement me")
         ops = """
         []
         p0 = newstr(3)


More information about the pypy-commit mailing list