Author: Maciej Fijalkowski <[email protected]>
Branch: improve-consecutive-dict-lookups
Changeset: r70012:cc34a5b32a04
Date: 2014-03-17 15:10 +0200
http://bitbucket.org/pypy/pypy/changeset/cc34a5b32a04/
Log: fix for ordereddicts too
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
@@ -403,7 +403,8 @@
prepare = self._handle_math_sqrt_call
elif oopspec_name.startswith('rgc.'):
prepare = self._handle_rgc_call
- elif oopspec_name == 'dict.lookup':
+ elif oopspec_name.endswith('dict.lookup'):
+ # also ordereddict.lookup
prepare = self._handle_dict_lookup_call
else:
prepare = self.prepare_builtin_call
diff --git a/rpython/jit/metainterp/test/test_dict.py
b/rpython/jit/metainterp/test/test_dict.py
--- a/rpython/jit/metainterp/test/test_dict.py
+++ b/rpython/jit/metainterp/test/test_dict.py
@@ -212,6 +212,28 @@
self.check_simple_loop(call=1, getinteriorfield_gc=2,
guard_no_exception=1)
+
+ def test_ordered_dict_two_lookups(self):
+ driver = JitDriver(greens = [], reds = 'auto')
+ d = OrderedDict()
+ d['a'] = 3
+ d['b'] = 4
+ indexes = ['a', 'b']
+
+ def f(n):
+ s = 0
+ while n > 0:
+ driver.jit_merge_point()
+ s += d[indexes[n & 1]]
+ s += d[indexes[n & 1]]
+ n -= 1
+ return s
+
+ self.meta_interp(f, [10])
+ # XXX should be one getinteriorfield_gc
+ self.check_simple_loop(call=1, getinteriorfield_gc=2,
+ guard_no_exception=1)
+
def test_dict_insert_invalidates_caches(self):
driver = JitDriver(greens = [], reds = 'auto')
indexes = ['aa', 'b', 'cc']
diff --git a/rpython/rtyper/lltypesystem/rbuilder.py
b/rpython/rtyper/lltypesystem/rbuilder.py
--- a/rpython/rtyper/lltypesystem/rbuilder.py
+++ b/rpython/rtyper/lltypesystem/rbuilder.py
@@ -85,6 +85,7 @@
ll_builder.used = needed
@staticmethod
+ @enforceargs(None, lltype.Char)
def ll_append_char(ll_builder, char):
if ll_builder.used == ll_builder.allocated:
ll_builder.grow(ll_builder, 1)
diff --git a/rpython/rtyper/lltypesystem/rordereddict.py
b/rpython/rtyper/lltypesystem/rordereddict.py
--- a/rpython/rtyper/lltypesystem/rordereddict.py
+++ b/rpython/rtyper/lltypesystem/rordereddict.py
@@ -709,6 +709,7 @@
@jit.look_inside_iff(lambda d, key, hash, store_flag, T:
jit.isvirtual(d) and jit.isconstant(key))
[email protected]('ordereddict.lookup(d, key, hash, store_flag, T)')
def ll_dict_lookup(d, key, hash, store_flag, T):
INDEXES = _ll_ptr_to_array_of(T)
entries = d.entries
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit