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

arigo at codespeak.net arigo at codespeak.net
Tue Jul 21 20:08:29 CEST 2009


Author: arigo
Date: Tue Jul 21 20:08:28 2009
New Revision: 66489

Modified:
   pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py
   pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/oparser.py
   pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py
Log:
Test GETFIELD_GC_PURE.  Implemented just by calling GETFIELD_GC (see comment).


Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py	(original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py	Tue Jul 21 20:08:28 2009
@@ -339,8 +339,9 @@
             value.make_nonnull()
             self.optimize_default(op)
 
-    def optimize_GETFIELD_PURE_GC(self, op):
-        xxx # optimize_GETFIELD_GC
+    # note: the following line does not mean that the two operations are
+    # completely equivalent, because GETFIELD_GC_PURE is_always_pure().
+    optimize_GETFIELD_GC_PURE = optimize_GETFIELD_GC
 
     def optimize_SETFIELD_GC(self, op):
         value = self.getvalue(op.args[0])

Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/oparser.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/oparser.py	(original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/oparser.py	Tue Jul 21 20:08:28 2009
@@ -108,6 +108,12 @@
                     return ConstPtr(ConstPtr.value)
                 else:
                     return ConstObj(ConstObj.value)
+            elif arg.startswith('ConstPtr('):
+                name = arg[len('ConstPtr('):-1]
+                if self.type_system == 'lltype':
+                    return ConstPtr(self.boxkinds[name])
+                else:
+                    return ConstObj(self.boxkinds[name])
             return self.vars[arg]
 
     def parse_op(self, line):

Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py	(original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py	Tue Jul 21 20:08:28 2009
@@ -533,6 +533,43 @@
         expected = ops
         self.optimize_loop(ops, 'Not, Not', expected)
 
+    def test_getfield_gc_pure_1(self):
+        ops = """
+        [i]
+        p1 = new_with_vtable(ConstClass(node_vtable), descr=nodesize)
+        setfield_gc(p1, i, descr=valuedescr)
+        i1 = getfield_gc_pure(p1, descr=valuedescr)
+        jump(i1)
+        """
+        expected = """
+        [i]
+        jump(i)
+        """
+        self.optimize_loop(ops, 'Not', expected)
+
+    def test_getfield_gc_pure_2(self):
+        ops = """
+        [i]
+        i1 = getfield_gc_pure(ConstPtr(myptr), descr=valuedescr)
+        jump(i1)
+        """
+        expected = """
+        [i]
+        jump(5)
+        """
+        self.optimize_loop(ops, 'Not', expected, i1=5,
+                           boxkinds={'myptr': self.nodebox.value})
+
+    def test_getfield_gc_nonpure_2(self):
+        ops = """
+        [i]
+        i1 = getfield_gc(ConstPtr(myptr), descr=valuedescr)
+        jump(i1)
+        """
+        expected = ops
+        self.optimize_loop(ops, 'Not', expected, i1=5,
+                           boxkinds={'myptr': self.nodebox.value})
+
 
 class TestLLtype(BaseTestOptimizeOpt, LLtypeMixin):
     pass



More information about the Pypy-commit mailing list