Author: Alex Gaynor <[email protected]>
Branch:
Changeset: r44487:61d8d6aa6218
Date: 2011-05-25 13:38 -0700
http://bitbucket.org/pypy/pypy/changeset/61d8d6aa6218/
Log: Allow inlining of ll_append and ll_extend, now don't inline the
_resize_ge method. This will play nicer with virtual arrays.
diff --git a/pypy/jit/metainterp/test/test_list.py
b/pypy/jit/metainterp/test/test_list.py
--- a/pypy/jit/metainterp/test/test_list.py
+++ b/pypy/jit/metainterp/test/test_list.py
@@ -236,4 +236,8 @@
return a * b
res = self.meta_interp(f, [37])
assert res == f(37)
- self.check_loops(getfield_gc=1, everywhere=True)
+ # There is the one actual field on a, plus 2 getfield's from the list
+ # itself, 1 to get the length (which is then incremented and passed to
+ # the resize func), and then a read of the items field to actually
+ # perform the setarrayitem on
+ self.check_loops(getfield_gc=5, everywhere=True)
diff --git a/pypy/rpython/lltypesystem/rlist.py
b/pypy/rpython/lltypesystem/rlist.py
--- a/pypy/rpython/lltypesystem/rlist.py
+++ b/pypy/rpython/lltypesystem/rlist.py
@@ -237,6 +237,7 @@
l.length = newsize
else:
_ll_list_resize_really(l, newsize)
+_ll_list_resize_ge.oopspec = 'list._resize_ge(l, newsize)'
def _ll_list_resize_le(l, newsize):
if newsize >= (len(l.items) >> 1) - 5:
diff --git a/pypy/rpython/rlist.py b/pypy/rpython/rlist.py
--- a/pypy/rpython/rlist.py
+++ b/pypy/rpython/rlist.py
@@ -568,7 +568,6 @@
length = l.ll_length()
l._ll_resize_ge(length+1) # see "a note about overflows" above
l.ll_setitem_fast(length, newitem)
-ll_append.oopspec = 'list.append(l, newitem)'
# this one is for the special case of insert(0, x)
def ll_prepend(l, newitem):
@@ -793,7 +792,6 @@
raise MemoryError
l1._ll_resize_ge(newlength)
ll_arraycopy(l2, l1, 0, len1, len2)
-ll_extend.oopspec = 'list.extend(l1, l2)'
def ll_extend_with_str(lst, s, getstrlen, getstritem):
return ll_extend_with_str_slice_startonly(lst, s, getstrlen, getstritem, 0)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit