[pypy-commit] pypy inline-dict-ops: fix pyjitpl.py and fix tests. the last test is less relevant now

fijal noreply at buildbot.pypy.org
Fri Jul 1 15:34:07 CEST 2011


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: inline-dict-ops
Changeset: r45227:5cecfca503ca
Date: 2011-07-01 15:41 +0200
http://bitbucket.org/pypy/pypy/changeset/5cecfca503ca/

Log:	fix pyjitpl.py and fix tests. the last test is less relevant now

diff --git a/pypy/jit/backend/llgraph/runner.py b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -409,37 +409,28 @@
         assert isinstance(fielddescr, Descr)
         return llimpl.do_getfield_raw_float(struct, fielddescr.ofs)
 
-    def bh_getinteriorfield_gc_i(self, array, index, arraydescr, fielddescr):
-        assert isinstance(arraydescr, Descr)
-        assert isinstance(fielddescr, Descr)
-        return llimpl.do_getinteriorfield_gc_int(array, index, fielddescr.ofs)
-    def bh_getinteriorfield_gc_r(self, array, index, arraydescr, fielddescr):
-        assert isinstance(arraydescr, Descr)
-        assert isinstance(fielddescr, Descr)
-        return llimpl.do_getinteriorfield_gc_ptr(array, index, fielddescr.ofs)
-    def bh_getinteriorfield_gc_f(self, array, index, arraydescr, fielddescr):
-        assert isinstance(arraydescr, Descr)
-        assert isinstance(fielddescr, Descr)
-        return llimpl.do_getinteriorfield_gc_float(array, index, fielddescr.ofs)
+    def bh_getinteriorfield_gc_i(self, array, index, descr):
+        assert isinstance(descr, Descr)
+        return llimpl.do_getinteriorfield_gc_int(array, index, descr.ofs)
+    def bh_getinteriorfield_gc_r(self, array, index, descr):
+        assert isinstance(descr, Descr)
+        return llimpl.do_getinteriorfield_gc_ptr(array, index, descr.ofs)
+    def bh_getinteriorfield_gc_f(self, array, index, descr):
+        assert isinstance(descr, Descr)
+        return llimpl.do_getinteriorfield_gc_float(array, index, descr.ofs)
 
-    def bh_setinteriorfield_gc_i(self, array, index, arraydescr, fielddescr,
-                                 value):
-        assert isinstance(arraydescr, Descr)
-        assert isinstance(fielddescr, Descr)
-        return llimpl.do_setinteriorfield_gc_int(array, index, fielddescr.ofs,
+    def bh_setinteriorfield_gc_i(self, array, index, descr, value):
+        assert isinstance(descr, Descr)
+        return llimpl.do_setinteriorfield_gc_int(array, index, descr.ofs,
                                                  value)
-    def bh_setinteriorfield_gc_r(self, array, index, arraydescr, fielddescr,
-                                 value):
-        assert isinstance(arraydescr, Descr)
-        assert isinstance(fielddescr, Descr)
-        return llimpl.do_setinteriorfield_gc_ptr(array, index, fielddescr.ofs,
+    def bh_setinteriorfield_gc_r(self, array, index, descr, value):
+        assert isinstance(descr, Descr)
+        return llimpl.do_setinteriorfield_gc_ptr(array, index, descr.ofs,
                                                  value)
-    def bh_setinteriorfield_gc_f(self, array, index, arraydescr, fielddescr,
-                                 value):
-        assert isinstance(arraydescr, Descr)
-        assert isinstance(fielddescr, Descr)
-        return llimpl.do_setinteriorfield_gc_float(array, index, fielddescr.ofs,
-                                                 value)
+    def bh_setinteriorfield_gc_f(self, array, index, descr, value):
+        assert isinstance(descr, Descr)
+        return llimpl.do_setinteriorfield_gc_float(array, index, descr.ofs,
+                                                   value)
 
     def bh_new(self, sizedescr):
         assert isinstance(sizedescr, Descr)
diff --git a/pypy/jit/metainterp/blackhole.py b/pypy/jit/metainterp/blackhole.py
--- a/pypy/jit/metainterp/blackhole.py
+++ b/pypy/jit/metainterp/blackhole.py
@@ -3,10 +3,9 @@
 from pypy.rlib.rarithmetic import intmask, LONG_BIT, r_uint, ovfcheck
 from pypy.rlib.objectmodel import we_are_translated
 from pypy.rlib.debug import debug_start, debug_stop
-from pypy.rlib.debug import make_sure_not_resized, fatalerror
+from pypy.rlib.debug import make_sure_not_resized
 from pypy.rpython.lltypesystem import lltype, llmemory, rclass
 from pypy.rpython.lltypesystem.lloperation import llop
-from pypy.rpython.llinterp import LLException
 from pypy.jit.codewriter.jitcode import JitCode, SwitchDictDescr
 from pypy.jit.codewriter import heaptracker, longlong
 from pypy.jit.metainterp.jitexc import JitException, get_llexception, reraise
@@ -1114,16 +1113,25 @@
         array = cpu.bh_getfield_gc_r(vable, fdescr)
         return cpu.bh_arraylen_gc(adescr, array)
 
-    @arguments("cpu", "r", "i", "d", "d", returns="i")
-    def bhimpl_getinteriorfield_gc_i(cpu, array, index, arraydescr, fielddescr):
-        return cpu.bh_getinteriorfield_gc_i(array, index, arraydescr,
-                                            fielddescr)
+    @arguments("cpu", "r", "i", "d", returns="i")
+    def bhimpl_getinteriorfield_gc_i(cpu, array, index, descr):
+        return cpu.bh_getinteriorfield_gc_i(array, index, descr)
+    @arguments("cpu", "r", "i", "d", returns="r")
+    def bhimpl_getinteriorfield_gc_r(cpu, array, index, descr):
+        return cpu.bh_getinteriorfield_gc_r(array, index, descr)
+    @arguments("cpu", "r", "i", "d", returns="f")
+    def bhimpl_getinteriorfield_gc_f(cpu, array, index, descr):
+        return cpu.bh_getinteriorfield_gc_f(array, index, descr)
 
-    @arguments("cpu", "r", "i", "d", "i", "d")
-    def bhimpl_setinteriorfield_gc_i(cpu, array, index, arraydescr,
-                                     fielddescr, value):
-        cpu.bh_setinteriorfield_gc_i(array, index, arraydescr, fielddescr,
-                                     value)
+    @arguments("cpu", "r", "i", "d", "i")
+    def bhimpl_setinteriorfield_gc_i(cpu, array, index, descr, value):
+        cpu.bh_setinteriorfield_gc_i(array, index, descr, value)
+    @arguments("cpu", "r", "i", "d", "r")
+    def bhimpl_setinteriorfield_gc_r(cpu, array, index, descr, value):
+        cpu.bh_setinteriorfield_gc_r(array, index, descr, value)
+    @arguments("cpu", "r", "i", "d", "f")
+    def bhimpl_setinteriorfield_gc_f(cpu, array, index, descr, value):
+        cpu.bh_setinteriorfield_gc_f(array, index, descr, value)
 
     @arguments("cpu", "r", "d", returns="i")
     def bhimpl_getfield_gc_i(cpu, struct, fielddescr):
diff --git a/pypy/jit/metainterp/executor.py b/pypy/jit/metainterp/executor.py
--- a/pypy/jit/metainterp/executor.py
+++ b/pypy/jit/metainterp/executor.py
@@ -120,31 +120,27 @@
     else:
         cpu.bh_setarrayitem_raw_i(arraydescr, array, index, itembox.getint())
 
-def do_getinteriorfield_gc(cpu, _, arraybox, indexbox, arraydescr, fielddescr):
+def do_getinteriorfield_gc(cpu, _, arraybox, indexbox, descr):
     array = arraybox.getref_base()
     index = indexbox.getint()
-    if fielddescr.is_pointer_field():
-        return BoxPtr(cpu.bh_getinteriorfield_gc_r(array, index, arraydescr,
-                                                   fielddescr))
-    elif fielddescr.is_float_field():
-        return BoxFloat(cpu.bh_getinteriorfield_gc_f(array, index, arraydescr,
-                                                     fielddescr))
+    if descr.is_pointer_field():
+        return BoxPtr(cpu.bh_getinteriorfield_gc_r(array, index, descr))
+    elif descr.is_float_field():
+        return BoxFloat(cpu.bh_getinteriorfield_gc_f(array, index, descr))
     else:
-        return BoxInt(cpu.bh_getinteriorfield_gc_i(array, index, arraydescr,
-                                                     fielddescr))
+        return BoxInt(cpu.bh_getinteriorfield_gc_i(array, index, descr))
 
-def do_setinteriorfield_gc(cpu, _, arraybox, indexbox, valuebox, arraydescr,
-                           fielddescr):
+def do_setinteriorfield_gc(cpu, _, arraybox, indexbox, valuebox, descr):
     array = arraybox.getref_base()
     index = indexbox.getint()
-    if fielddescr.is_pointer_field():
-        cpu.bh_setinteriorfield_gc_r(array, index, arraydescr, fielddescr,
+    if descr.is_pointer_field():
+        cpu.bh_setinteriorfield_gc_r(array, index, descr,
                                      valuebox.getref_base())
-    elif fielddescr.is_float_field():
-        cpu.bh_setinteriorfield_gc_f(array, index, arraydescr, fielddescr,
+    elif descr.is_float_field():
+        cpu.bh_setinteriorfield_gc_f(array, index, descr,
                                      valuebox.getfloatstorage())
     else:
-        cpu.bh_setinteriorfield_gc_i(array, index, arraydescr, fielddescr,
+        cpu.bh_setinteriorfield_gc_i(array, index, descr,
                                      valuebox.getint())
 
 def do_getfield_gc(cpu, _, structbox, fielddescr):
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -512,11 +512,10 @@
     opimpl_getfield_gc_r_pure = _opimpl_getfield_gc_pure_any
     opimpl_getfield_gc_f_pure = _opimpl_getfield_gc_pure_any
 
-    @arguments("box", "box", "descr", "descr")
-    def _opimpl_getinteriorfield_gc_any(self, array, index, arraydescr,
-                                        fielddescr):
-        return self.execute_with_descr(rop.GETINTERIORFIELD_GC, fielddescr,
-                                array, index, arraydescr)
+    @arguments("box", "box", "descr")
+    def _opimpl_getinteriorfield_gc_any(self, array, index, descr):
+        return self.execute_with_descr(rop.GETINTERIORFIELD_GC, descr,
+                                       array, index)
     opimpl_getinteriorfield_gc_i = _opimpl_getinteriorfield_gc_any
     opimpl_getinteriorfield_gc_f = _opimpl_getinteriorfield_gc_any
     opimpl_getinteriorfield_gc_r = _opimpl_getinteriorfield_gc_any
@@ -544,11 +543,10 @@
     opimpl_setfield_gc_r = _opimpl_setfield_gc_any
     opimpl_setfield_gc_f = _opimpl_setfield_gc_any
 
-    @arguments("box", "box", "box", "descr", "descr")
-    def _opimpl_setinteriorfield_gc_any(self, array, index, value, arraydescr,
-                                        fielddescr):
-        self.execute_with_descr(rop.SETINTERIORFIELD_GC, fielddescr,
-                                array, index, value, arraydescr)
+    @arguments("box", "box", "box", "descr")
+    def _opimpl_setinteriorfield_gc_any(self, array, index, value, descr):
+        self.execute_with_descr(rop.SETINTERIORFIELD_GC, descr,
+                                array, index, value)
     opimpl_setinteriorfield_gc_i = _opimpl_setinteriorfield_gc_any
     opimpl_setinteriorfield_gc_f = _opimpl_setinteriorfield_gc_any
     opimpl_setinteriorfield_gc_r = _opimpl_setinteriorfield_gc_any
diff --git a/pypy/jit/metainterp/test/test_dict.py b/pypy/jit/metainterp/test/test_dict.py
--- a/pypy/jit/metainterp/test/test_dict.py
+++ b/pypy/jit/metainterp/test/test_dict.py
@@ -92,7 +92,7 @@
         res1 = f(100)
         res2 = self.meta_interp(f, [100], listops=True)
         assert res1 == res2
-        self.check_loops(int_mod=1) # the hash was traced
+        self.check_loops(int_mod=3) # the hash was traced and eq
 
     def test_dict_setdefault(self):
         myjitdriver = JitDriver(greens = [], reds = ['total', 'dct'])
@@ -129,7 +129,7 @@
         assert f(100) == 50
         res = self.meta_interp(f, [100], listops=True)
         assert res == 50
-        self.check_loops(int_mod=1)
+        self.check_loops(int_mod=3) # key + eq
 
     def test_repeated_lookup(self):
         myjitdriver = JitDriver(greens = [], reds = ['n', 'd'])
@@ -154,14 +154,7 @@
 
         res = self.meta_interp(f, [100], listops=True)
         assert res == f(50)
-        # XXX: ideally there would be 7 calls here, but repeated CALL_PURE with
-        # the same arguments are not folded, because we have conflicting
-        # definitions of pure, once strhash can be appropriately folded
-        # this should be decreased to seven.
-        self.check_loops({"call": 8, "guard_false": 1, "guard_no_exception": 5,
-                          "guard_true": 1, "int_and": 1, "int_gt": 1,
-                          "int_is_true": 1, "int_sub": 1, "jump": 1,
-                          "new_with_vtable": 1, "setfield_gc": 1})
+        self.check_loops(call=4)
 
 
 class TestOOtype(DictTests, OOJitMixin):


More information about the pypy-commit mailing list