[pypy-commit] pypy inline-dict-ops: add caching to interiorfielddescr
fijal
noreply at buildbot.pypy.org
Fri Oct 21 07:22:05 CEST 2011
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: inline-dict-ops
Changeset: r48294:5c8426aeee4f
Date: 2011-10-21 07:20 +0200
http://bitbucket.org/pypy/pypy/changeset/5c8426aeee4f/
Log: add caching to interiorfielddescr
diff --git a/pypy/jit/backend/llsupport/descr.py b/pypy/jit/backend/llsupport/descr.py
--- a/pypy/jit/backend/llsupport/descr.py
+++ b/pypy/jit/backend/llsupport/descr.py
@@ -20,6 +20,7 @@
self._cache_field = {}
self._cache_array = {}
self._cache_call = {}
+ self._cache_interiorfield = {}
def init_size_descr(self, STRUCT, sizedescr):
assert isinstance(STRUCT, lltype.GcStruct)
@@ -240,6 +241,17 @@
NonGcPtrArrayNoLengthDescr, 'ArrayNoLength', 'get_item_size',
'_is_array_of_floats', '_is_item_signed')
+def get_interiorfield_descr(gc_ll_descr, ARRAY, FIELDTP, name):
+ cache = gc_ll_descr._cache_interiorfield
+ try:
+ return cache[(ARRAY, FIELDTP, name)]
+ except KeyError:
+ arraydescr = get_array_descr(gc_ll_descr, ARRAY)
+ fielddescr = get_field_descr(gc_ll_descr, FIELDTP, name)
+ descr = InteriorFieldDescr(arraydescr, fielddescr)
+ cache[(ARRAY, FIELDTP, name)] = descr
+ return descr
+
def get_array_descr(gccache, ARRAY):
cache = gccache._cache_array
try:
diff --git a/pypy/jit/backend/llsupport/llmodel.py b/pypy/jit/backend/llsupport/llmodel.py
--- a/pypy/jit/backend/llsupport/llmodel.py
+++ b/pypy/jit/backend/llsupport/llmodel.py
@@ -11,7 +11,7 @@
from pypy.jit.backend.llsupport.descr import (get_size_descr,
get_field_descr, BaseFieldDescr, get_array_descr, BaseArrayDescr,
get_call_descr, BaseIntCallDescr, GcPtrCallDescr, FloatCallDescr,
- VoidCallDescr, InteriorFieldDescr)
+ VoidCallDescr, InteriorFieldDescr, get_interiorfield_descr)
from pypy.jit.backend.llsupport.asmmemmgr import AsmMemoryManager
@@ -236,9 +236,7 @@
return get_array_descr(self.gc_ll_descr, A)
def interiorfielddescrof(self, A, fieldname):
- arraydescr = get_array_descr(self.gc_ll_descr, A)
- fielddescr = get_field_descr(self.gc_ll_descr, A.OF, fieldname)
- return InteriorFieldDescr(arraydescr, fielddescr)
+ return get_interiorfield_descr(self.gc_ll_descr, A, A.OF, fieldname)
def unpack_arraydescr(self, arraydescr):
assert isinstance(arraydescr, BaseArrayDescr)
More information about the pypy-commit
mailing list