[pypy-svn] r52242 - pypy/branch/jit-refactoring/pypy/jit/rainbow
arigo at codespeak.net
arigo at codespeak.net
Fri Mar 7 11:29:50 CET 2008
Author: arigo
Date: Fri Mar 7 11:29:49 2008
New Revision: 52242
Modified:
pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py
Log:
Share identical lists between JitCodes.
Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py (original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py Fri Mar 7 11:29:49 2008
@@ -127,6 +127,14 @@
self.num_global_mergepoints = 0
self.ptr_to_jitcode = {}
self.transformer = GraphTransformer(hannotator)
+ self._listcache = {}
+
+ def sharelist(self, name):
+ lst = getattr(self, name)
+ # 'lst' is typically a list of descs or low-level pointers.
+ # It's safer to compare its items by identity.
+ key = (name,) + tuple([id(x) for x in lst])
+ return self._listcache.setdefault(key, lst)
def can_raise(self, op):
return self.raise_analyzer.analyze(op)
@@ -207,23 +215,23 @@
code = assemble_labelpos(labelpos, self.interpreter, *self.assembler)
bytecode.__init__(graph.name,
code,
- self.constants,
- self.typekinds,
- self.redboxclasses,
- self.keydescs,
- self.structtypedescs,
- self.fielddescs,
- self.arrayfielddescs,
- self.interiordescs,
- self.exceptioninstances,
- self.oopspecdescs,
- self.promotiondescs,
- self.called_bytecodes,
+ self.sharelist("constants"),
+ self.sharelist("typekinds"),
+ self.sharelist("redboxclasses"),
+ self.sharelist("keydescs"),
+ self.sharelist("structtypedescs"),
+ self.sharelist("fielddescs"),
+ self.sharelist("arrayfielddescs"),
+ self.sharelist("interiordescs"),
+ self.sharelist("exceptioninstances"),
+ self.sharelist("oopspecdescs"),
+ self.sharelist("promotiondescs"),
+ self.sharelist("called_bytecodes"),
self.num_local_mergepoints,
self.graph_color,
- self.calldescs,
- self.metacalldescs,
- self.indirectcalldescs,
+ self.sharelist("calldescs"),
+ self.sharelist("metacalldescs"),
+ self.sharelist("indirectcalldescs"),
self.is_portal)
bytecode._source = self.assembler
bytecode._interpreter = self.interpreter
Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py (original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py Fri Mar 7 11:29:49 2008
@@ -29,13 +29,9 @@
promotiondescs, called_bytecodes, num_mergepoints,
graph_color, calldescs, metacalldescs,
indirectcalldescs, is_portal):
- # XXX quite a lot of lists of descs here... We should at least
- # try to share the empty lists between the numberous prebuilt
- # JitCode instances. A better approach memory-wise could be
- # to have a single list of descs and use 'assert isinstance'
- # checks; or move these lists to the Interpreter class and
- # do something about the fact that some of these lists could
- # then have more than 65536 items.
+ # XXX quite a lot of lists of descs here... At least we
+ # share identical lists between the numberous prebuilt
+ # JitCode instances.
self.name = name
self.code = code
self.constants = constants
More information about the Pypy-commit
mailing list