[pypy-svn] r67056 - in pypy/branch/pyjitpl5/pypy/jit/metainterp: . test

arigo at codespeak.net arigo at codespeak.net
Fri Aug 21 12:50:22 CEST 2009


Author: arigo
Date: Fri Aug 21 12:50:21 2009
New Revision: 67056

Modified:
   pypy/branch/pyjitpl5/pypy/jit/metainterp/optimizeopt.py
   pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimizeopt.py
Log:
(iko, arigo)
Optimize SETFIELD_GC/GETFIELD_GC pairs.


Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/optimizeopt.py	(original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/optimizeopt.py	Fri Aug 21 12:50:21 2009
@@ -646,6 +646,11 @@
         else:
             value.make_nonnull()
             self.optimize_default(op)
+            # remember the result of future reads of the field
+            if value._fields is None:
+                value._fields = av_newdict2()
+            value._fields[op.descr] = self.getvalue(op.args[1])
+            self.values_to_clean.append(value)
 
     def optimize_NEW_WITH_VTABLE(self, op):
         self.make_virtual(op.args[0], op.result, op)

Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimizeopt.py	(original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimizeopt.py	Fri Aug 21 12:50:21 2009
@@ -968,7 +968,6 @@
         self.optimize_loop(ops, 'Not', expected)
 
     def test_duplicate_getfield_2(self):
-        py.test.skip("in-progress")
         ops = """
         [p1, i1]
         setfield_gc(p1, i1, descr=valuedescr)
@@ -977,12 +976,12 @@
         jump(p1, i1)
         """
         expected = """
-        [p1]
+        [p1, i1]
         setfield_gc(p1, i1, descr=valuedescr)
         escape(i1)
-        jump(p1)
+        jump(p1, i1)
         """
-        self.optimize_loop(ops, 'Not', expected)
+        self.optimize_loop(ops, 'Not, Not', expected)
 
     def test_duplicate_getfield_3(self):
         py.test.skip("in-progress")
@@ -1018,7 +1017,6 @@
         self.optimize_loop(ops, 'Not', ops)
 
     def test_duplicate_getfield_sideeffects_2(self):
-        py.test.skip("in-progress")
         ops = """
         [p1, i1]
         setfield_gc(p1, i1, descr=valuedescr)
@@ -1027,7 +1025,7 @@
         escape(i2)
         jump(p1, i1)
         """
-        self.optimize_loop(ops, 'Not', ops)
+        self.optimize_loop(ops, 'Not, Not', ops)
 
     # ----------
 



More information about the Pypy-commit mailing list