Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult
Changeset: r77910:f03f53422028
Date: 2015-06-05 15:12 +0200
http://bitbucket.org/pypy/pypy/changeset/f03f53422028/

Log:    the specialization seems to be an overkill

diff --git a/rpython/jit/backend/llsupport/rewrite.py 
b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -86,20 +86,24 @@
         return op
 
     def emit_op(self, op):
+        op = self.get_box_replacement(op)
+        orig_op = op
+        replaced = False
+        for i in range(op.numargs()):
+            orig_arg = op.getarg(i)
+            arg = self.get_box_replacement(orig_arg)
+            if orig_arg is not arg:
+                if not replaced:
+                    op = op.copy_and_change(op.getopnum())
+                    orig_op.set_forwarded(op)
+                    replaced = True
+                op.setarg(i, arg)
         if op.is_guard():
-            newop = op.get_replacement_for_rewrite()
-            if newop is op:
-                newop = op.copy_and_change(op.getopnum())
-                op.set_forwarded(newop)
-            _newfailargs = []
-            for arg in op.getfailargs():
-                if arg is not None:
-                    arg = arg.get_replacement_for_rewrite()
-                _newfailargs.append(arg)
-            newop.setfailargs(_newfailargs)
-            op = newop
-        else:
-            op = op.get_replacement_for_rewrite()
+            if not replaced:
+                op = op.copy_and_change(op.getopnum())
+                orig_op.set_forwarded(op)
+            op.setfailargs([self.get_box_replacement(a, True)
+                            for a in op.getfailargs()])
         self._newops.append(op)
 
     def replace_op_with(self, op, newop):
diff --git a/rpython/jit/metainterp/history.py 
b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -204,9 +204,6 @@
     def constbox(self):
         return self
 
-    def get_replacement_for_rewrite(self):
-        return self
-
     def same_box(self, other):
         return self.same_constant(other)
 
diff --git a/rpython/jit/metainterp/resoperation.py 
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -24,9 +24,6 @@
     def get_forwarded(self):
         return None
 
-    def get_replacement(self):
-        return self
-
     def set_forwarded(self, forwarded_to):
         raise Exception("oups")
 
@@ -77,11 +74,6 @@
     def get_forwarded(self):
         return self._forwarded
 
-    def get_replacement(self):
-        if self._forwarded:
-            return self._forwarded.get_replacement()
-        return self
-
     def set_forwarded(self, forwarded_to):
         self._forwarded = forwarded_to
 
@@ -427,12 +419,6 @@
     def get_forwarded(self):
         return self._forwarded
 
-    # this is for rewrite.py, we can have several versions depending on
-    # invariants
-    def get_replacement_for_rewrite(self):
-        assert self._forwarded is None
-        return self
-
     def set_forwarded(self, forwarded_to):
         self._forwarded = forwarded_to
 
@@ -478,9 +464,6 @@
     def initarglist(self, args):
         assert len(args) == 0
 
-    def get_replacement_for_rewrite(self):
-        return self.get_replacement()
-
     def getarglist(self):
         return []
 
@@ -502,19 +485,6 @@
         assert len(args) == 1
         self._arg0, = args
 
-    def get_replacement_for_rewrite(self):
-        if self._forwarded:
-            return self._forwarded.get_replacement_for_rewrite()
-        arg0 = self._arg0.get_replacement()
-        if arg0 is not self._arg0:
-            op = self.__class__()
-            if isinstance(self, ResOpWithDescr):
-                op.setdescr(self.getdescr())
-            op._arg0 = arg0
-            self.set_forwarded(op)
-            return op
-        return self
-
     def getarglist(self):
         return [self._arg0]
 
@@ -562,21 +532,6 @@
         else:
             raise IndexError
 
-    def get_replacement_for_rewrite(self):
-        if self._forwarded:
-            return self._forwarded.get_replacement_for_rewrite()
-        arg0 = self._arg0.get_replacement()
-        arg1 = self._arg1.get_replacement()
-        if arg0 is not self._arg0 or arg1 is not self._arg1:
-            op = self.__class__()
-            if isinstance(self, ResOpWithDescr):
-                op.setdescr(self.getdescr())
-            op._arg0 = arg0
-            op._arg1 = arg1
-            self.set_forwarded(op)
-            return op
-        return self
-
     def getarglist(self):
         return [self._arg0, self._arg1]
 
@@ -607,24 +562,6 @@
         else:
             raise IndexError
 
-    def get_replacement_for_rewrite(self):
-        if self._forwarded:
-            return self._forwarded.get_replacement_for_rewrite()
-        arg0 = self._arg0.get_replacement()
-        arg1 = self._arg1.get_replacement()
-        arg2 = self._arg2.get_replacement()
-        if (arg0 is not self._arg0 or arg1 is not self._arg1 or
-            arg2 is not self._arg2):
-            op = self.__class__()
-            if isinstance(self, ResOpWithDescr):
-                op.setdescr(self.getdescr())
-            op._arg0 = arg0
-            op._arg1 = arg1
-            op._arg2 = arg2
-            self.set_forwarded(op)
-            return op
-        return self
-
     def setarg(self, i, box):
         if i == 0:
             self._arg0 = box
@@ -646,21 +583,6 @@
                self.__class__.__name__.startswith('FINISH'):   # XXX remove me
             assert len(args) <= 1      # FINISH operations take 0 or 1 arg now
 
-    def get_replacement_for_rewrite(self):
-        if self._forwarded:
-            return self._forwarded.get_replacement_for_rewrite()
-        for arg in self._args:
-            if arg is not arg.get_replacement():
-                break
-        else:
-            return self
-        op = self.__class__()
-        self.set_forwarded(op)
-        op._args = [arg.get_replacement() for arg in self._args]
-        if isinstance(self, ResOpWithDescr):
-            op.setdescr(self.getdescr())
-        return op
-
     def getarglist(self):
         return self._args
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to