Author: Maciej Fijalkowski <fij...@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): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit