[pypy-commit] pypy array-overallocation-in-nursery: Start adapting the codewriter for the new rlist.py format
arigo
noreply at buildbot.pypy.org
Mon Nov 4 18:10:51 CET 2013
Author: Armin Rigo <arigo at tunes.org>
Branch: array-overallocation-in-nursery
Changeset: r67831:dc207f7dffcb
Date: 2013-11-04 18:10 +0100
http://bitbucket.org/pypy/pypy/changeset/dc207f7dffcb/
Log: Start adapting the codewriter for the new rlist.py format
diff --git a/rpython/jit/codewriter/jtransform.py b/rpython/jit/codewriter/jtransform.py
--- a/rpython/jit/codewriter/jtransform.py
+++ b/rpython/jit/codewriter/jtransform.py
@@ -1449,7 +1449,6 @@
descrs = ()
else:
descrs = (self.cpu.arraydescrof(ARRAY),
- self.cpu.fielddescrof(LIST, 'length'),
self.cpu.fielddescrof(LIST, 'items'),
self.cpu.sizeof(LIST))
else:
@@ -1487,7 +1486,7 @@
fast = '_fast' in func.func_name
return non_negative or fast
- def _prepare_list_getset(self, op, descr, args, checkname):
+ def _prepare_list_getset(self, op, args, checkname, *descrs):
non_negative = self._get_list_nonneg_canraise_flags(op)
if non_negative:
return args[1], []
@@ -1495,8 +1494,8 @@
v_posindex = Variable('posindex')
v_posindex.concretetype = lltype.Signed
op0 = SpaceOperation('-live-', [], None)
- op1 = SpaceOperation(checkname, [args[0], args[1],
- descr], v_posindex)
+ op1 = SpaceOperation(checkname, [args[0], args[1]] + list(descrs),
+ v_posindex)
return v_posindex, [op0, op1]
def _prepare_void_list_getset(self, op):
@@ -1555,8 +1554,9 @@
SpaceOperation('getarrayitem_vable_%s' % kind[0],
[v_base, args[1], arrayfielddescr,
arraydescr], op.result)]
- v_index, extraop = self._prepare_list_getset(op, arraydescr, args,
- 'check_neg_index')
+ v_index, extraop = self._prepare_list_getset(op, args,
+ 'check_neg_index',
+ arraydescr)
extra = getkind(op.result.concretetype)[0]
if pure:
extra += '_pure'
@@ -1576,8 +1576,9 @@
SpaceOperation('setarrayitem_vable_%s' % kind[0],
[v_base, args[1], args[2],
arrayfielddescr, arraydescr], None)]
- v_index, extraop = self._prepare_list_getset(op, arraydescr, args,
- 'check_neg_index')
+ v_index, extraop = self._prepare_list_getset(op, args,
+ 'check_neg_index',
+ arraydescr)
kind = getkind(args[2].concretetype)[0]
op = SpaceOperation('setarrayitem_gc_%s' % kind,
[args[0], v_index, args[2], arraydescr], None)
@@ -1594,46 +1595,47 @@
# ---------- resizable lists ----------
- def do_resizable_newlist(self, op, args, arraydescr, lengthdescr,
+ def do_resizable_newlist(self, op, args, arraydescr,
itemsdescr, structdescr):
v_length = self._get_initial_newlist_length(op, args)
return SpaceOperation('newlist',
- [v_length, structdescr, lengthdescr, itemsdescr,
+ [v_length, structdescr, itemsdescr, arraydescr],
+ op.result)
+
+ def do_resizable_newlist_hint(self, op, args, arraydescr,
+ itemsdescr, structdescr):
+ v_hint = self._get_initial_newlist_length(op, args)
+ return SpaceOperation('newlist_hint',
+ [v_hint, structdescr, itemsdescr,
arraydescr],
op.result)
- def do_resizable_newlist_hint(self, op, args, arraydescr, lengthdescr,
+ def do_resizable_list_getitem(self, op, args, arraydescr,
itemsdescr, structdescr):
- v_hint = self._get_initial_newlist_length(op, args)
- return SpaceOperation('newlist_hint',
- [v_hint, structdescr, lengthdescr, itemsdescr,
- arraydescr],
- op.result)
-
- def do_resizable_list_getitem(self, op, args, arraydescr, lengthdescr,
- itemsdescr, structdescr):
- v_index, extraop = self._prepare_list_getset(op, lengthdescr, args,
- 'check_resizable_neg_index')
+ v_index, extraop = self._prepare_list_getset(op, args,
+ 'check_resizable_neg_index',
+ itemsdescr, arraydescr)
kind = getkind(op.result.concretetype)[0]
op = SpaceOperation('getlistitem_gc_%s' % kind,
[args[0], v_index, itemsdescr, arraydescr],
op.result)
return extraop + [op]
- def do_resizable_list_setitem(self, op, args, arraydescr, lengthdescr,
+ def do_resizable_list_setitem(self, op, args, arraydescr,
itemsdescr, structdescr):
- v_index, extraop = self._prepare_list_getset(op, lengthdescr, args,
- 'check_resizable_neg_index')
+ v_index, extraop = self._prepare_list_getset(op, args,
+ 'check_resizable_neg_index',
+ itemsdescr, arraydescr)
kind = getkind(args[2].concretetype)[0]
op = SpaceOperation('setlistitem_gc_%s' % kind,
[args[0], v_index, args[2],
itemsdescr, arraydescr], None)
return extraop + [op]
- def do_resizable_list_len(self, op, args, arraydescr, lengthdescr,
+ def do_resizable_list_len(self, op, args, arraydescr,
itemsdescr, structdescr):
- return SpaceOperation('getfield_gc_i',
- [args[0], lengthdescr], op.result)
+ return SpaceOperation('getlistlen',
+ [args[0], itemsdescr, arraydescr], op.result)
def do_resizable_void_list_getitem(self, op, args):
self._prepare_void_list_getset(op)
diff --git a/rpython/jit/codewriter/test/test_list.py b/rpython/jit/codewriter/test/test_list.py
--- a/rpython/jit/codewriter/test/test_list.py
+++ b/rpython/jit/codewriter/test/test_list.py
@@ -11,9 +11,10 @@
# ____________________________________________________________
FIXEDLIST = lltype.Ptr(lltype.GcArray(lltype.Signed))
+OVERLIST = lltype.Ptr(lltype.GcArray(lltype.Signed,
+ hints={'overallocated': True}))
VARLIST = lltype.Ptr(lltype.GcStruct('VARLIST',
- ('length', lltype.Signed),
- ('items', FIXEDLIST),
+ ('items', OVERLIST),
adtmeths={"ITEM": lltype.Signed}))
class FakeCPU:
@@ -25,6 +26,7 @@
return '<ArrayDescr>'
class fielddescrof(AbstractDescr):
def __init__(self, STRUCT, fieldname):
+ assert hasattr(STRUCT, fieldname)
self.STRUCT = STRUCT
self.fieldname = fieldname
def __repr__(self):
@@ -167,8 +169,7 @@
# Resizable lists
def test_resizable_newlist():
- alldescrs = ("<SizeDescr>, <FieldDescr length>,"
- " <FieldDescr items>, <ArrayDescr>")
+ alldescrs = "<SizeDescr>, <FieldDescr items>, <ArrayDescr>"
builtin_test('newlist', [], VARLIST,
"""newlist $0, """+alldescrs+""" -> %r0""")
builtin_test('newlist', [Constant(5, lltype.Signed)], VARLIST,
@@ -195,7 +196,7 @@
[varoftype(VARLIST), varoftype(lltype.Signed)],
lltype.Signed, """
-live-
- check_resizable_neg_index %r0, %i0, <FieldDescr length> -> %i1
+ check_resizable_neg_index %r0, %i0, <FieldDescr items>, <ArrayDescr> -> %i1
getlistitem_gc_i %r0, %i1, <FieldDescr items>, <ArrayDescr> -> %i2
""")
@@ -211,13 +212,13 @@
varoftype(lltype.Signed)],
lltype.Void, """
-live-
- check_resizable_neg_index %r0, %i0, <FieldDescr length> -> %i1
+ check_resizable_neg_index %r0, %i0, <FieldDescr items>, <ArrayDescr> -> %i1
setlistitem_gc_i %r0, %i1, %i2, <FieldDescr items>, <ArrayDescr>
""")
def test_resizable_len():
builtin_test('list.len', [varoftype(VARLIST)], lltype.Signed,
- """getfield_gc_i %r0, <FieldDescr length> -> %i0""")
+ """getlistlen %r0, <FieldDescr items>, <ArrayDescr> -> %i0""")
def test_resizable_unsupportedop():
builtin_test('list.foobar', [varoftype(VARLIST)], lltype.Signed,
More information about the pypy-commit
mailing list