[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