[pypy-svn] r62896 - pypy/branch/pyjitpl5/pypy/jit/metainterp
fijal at codespeak.net
fijal at codespeak.net
Thu Mar 12 18:26:20 CET 2009
Author: fijal
Date: Thu Mar 12 18:26:17 2009
New Revision: 62896
Modified:
pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/specnode.py
Log:
Use r_dicts in place of regular dicts and remove some old code.
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/optimize.py Thu Mar 12 18:26:17 2009
@@ -3,22 +3,18 @@
ResOperation, AbstractDescr,
Options, AbstractValue, ConstPtr)
from pypy.jit.metainterp.specnode import (FixedClassSpecNode,
- #FixedListSpecNode,
VirtualInstanceSpecNode,
VirtualizableSpecNode,
NotSpecNode,
DelayedSpecNode,
SpecNodeWithBox,
DelayedFixedListSpecNode,
- #DelayedListSpecNode,
VirtualFixedListSpecNode,
- #VirtualListSpecNode,
)
from pypy.jit.metainterp import executor
from pypy.rlib.objectmodel import we_are_translated
from pypy.rpython.lltypesystem import lltype, llmemory
-#from pypy.jit.metainterp.codewriter import ListDescr
-
+from pypy.rlib.objectmodel import r_dict
class FixedList(AbstractValue):
def __init__(self, arraydescr):
@@ -105,6 +101,18 @@
liveboxes.append(box)
return res
+def av_eq(self, other):
+ return self.sort_key() == other.sort_key()
+
+def av_hash(self):
+ return self.sort_key()
+
+def av_list_in(lst, key):
+ for l in lst:
+ if key.sort_key() == l.sort_key():
+ return True
+ return False
+
class InstanceNode(object):
def __init__(self, source, escaped=True, startbox=False, const=False):
if isinstance(source, Const):
@@ -117,11 +125,11 @@
self.const = const
self.nonzero = False # NB. never set to True so far
self.cls = None
- self.origfields = {}
- self.curfields = {}
- self.cleanfields = {}
- self.dirtyfields = {}
- self.expanded_fields = {}
+ self.origfields = r_dict(av_eq, av_hash)
+ self.curfields = r_dict(av_eq, av_hash)
+ self.cleanfields = r_dict(av_eq, av_hash)
+ self.dirtyfields = r_dict(av_eq, av_hash)
+ self.expanded_fields = r_dict(av_eq, av_hash)
self.cursize = -1
self.vdesc = None # for virtualizables
@@ -142,7 +150,7 @@
node.escape_if_startbox(memo)
else:
for key, node in self.curfields.items():
- if self.vdesc is not None and key not in self.vdesc:
+ if self.vdesc is not None and not av_list_in(self.vdesc, key):
esc_self = True
else:
esc_self = False
@@ -151,7 +159,7 @@
# if they're not marked specifically as ones that does not escape
for key, node in self.origfields.items():
if key not in self.curfields:
- if self.vdesc is not None and key not in self.vdesc:
+ if self.vdesc is not None and not av_list_in(self.vdesc, key):
esc_self = True
else:
esc_self = False
@@ -163,7 +171,7 @@
if ofs in other.curfields:
node.add_to_dependency_graph(other.curfields[ofs], dep_graph)
if (self.virtualized and self.vdesc is not None and
- ofs in self.vdesc):
+ av_list_in(self.vdesc, ofs)):
node.add_to_dependency_graph(other.origfields[ofs], dep_graph)
def intersect(self, other, nodes):
@@ -545,7 +553,6 @@
instnode = self.nodes[box]
assert not instnode.virtual
box = instnode.source
- #assert isinstance(box, Const) or box in self.ready_results
newboxes.append(box)
return newboxes
@@ -557,8 +564,6 @@
def optimize_getfield(self, instnode, ofs, box):
assert isinstance(ofs, AbstractValue)
if instnode.virtual or instnode.virtualized:
-## if ofs < 0:
-## ofs = instnode.cursize + ofs
assert ofs in instnode.curfields
return True # this means field is never actually
elif ofs in instnode.cleanfields:
@@ -571,8 +576,6 @@
def optimize_setfield(self, instnode, ofs, valuenode, valuebox):
assert isinstance(ofs, AbstractValue)
if instnode.virtual or instnode.virtualized:
-## if ofs < 0:
-## ofs = instnode.cursize + ofs
instnode.curfields[ofs] = valuenode
else:
assert not valuenode.virtual
@@ -580,14 +583,6 @@
instnode.dirtyfields[ofs] = self.nodes[valuebox]
# we never perform this operation here, note
-## def optimize_insert(self, instnode, field, valuenode, valuebox):
-## assert instnode.virtual
-## for ofs, node in instnode.curfields.items():
-## if ofs >= field:
-## instnode.curfields[ofs + 1] = node
-## instnode.curfields[field] = valuenode
-## instnode.cursize += 1
-
def optimize_loop(self):
newoperations = []
exception_might_have_happened = False
@@ -784,8 +779,8 @@
assert isinstance(ofs, AbstractDescr)
newoperations.append(ResOperation(rop.SETFIELD_GC,
[node.source, valuenode.source], None, ofs))
- node.dirtyfields = {}
- node.cleanfields = {}
+ node.dirtyfields = r_dict(av_eq, av_hash)
+ node.cleanfields = r_dict(av_eq, av_hash)
def match_exactly(self, old_loop):
old_operations = old_loop.operations
@@ -866,11 +861,6 @@
boxes_from_frame, index_in_alloc)
metainterp.execute_and_record(rop.SETARRAYITEM_GC,
[box, ofs, itembox], ad)
-## if storage.setitems:
-## #history.execute_and_record('guard_no_exception', [], 'void', False)
-## # XXX this needs to check for exceptions somehow
-## # create guard_no_excpetion somehow, needs tests
-## pass
newboxes = []
for index in storage.indices:
if index < 0:
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/specnode.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/specnode.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/specnode.py Thu Mar 12 18:26:17 2009
@@ -83,8 +83,11 @@
self.fields = fields
def mutate_nodes(self, instnode):
+ from pypy.jit.metainterp.optimize import av_eq, av_hash
+ from pypy.rlib.objectmodel import r_dict
+
FixedClassSpecNode.mutate_nodes(self, instnode)
- curfields = {}
+ curfields = r_dict(av_eq, av_hash)
for ofs, subspecnode in self.fields:
subinstnode = instnode.origfields[ofs]
# should really be there
More information about the Pypy-commit
mailing list