[pypy-svn] r69807 - pypy/trunk/pypy/jit/metainterp
cfbolz at codespeak.net
cfbolz at codespeak.net
Tue Dec 1 15:55:09 CET 2009
Author: cfbolz
Date: Tue Dec 1 15:55:09 2009
New Revision: 69807
Modified:
pypy/trunk/pypy/jit/metainterp/optimizefindnode.py
pypy/trunk/pypy/jit/metainterp/optimizeopt.py
pypy/trunk/pypy/jit/metainterp/optimizeutil.py
Log:
kill av_newdict and av_newdict2, normal dicts are just fine. Use simpler hash
for descrlists.
Modified: pypy/trunk/pypy/jit/metainterp/optimizefindnode.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/optimizefindnode.py (original)
+++ pypy/trunk/pypy/jit/metainterp/optimizefindnode.py Tue Dec 1 15:55:09 2009
@@ -7,7 +7,7 @@
from pypy.jit.metainterp.history import AbstractValue, ConstInt, Const
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.metainterp.executor import execute_nonspec
-from pypy.jit.metainterp.optimizeutil import av_newdict, _findall, sort_descrs
+from pypy.jit.metainterp.optimizeutil import _findall, sort_descrs
from pypy.jit.metainterp.optimizeutil import InvalidLoop
# ____________________________________________________________
@@ -225,7 +225,7 @@
field = op.descr
assert isinstance(field, AbstractValue)
if instnode.curfields is None:
- instnode.curfields = av_newdict()
+ instnode.curfields = {}
instnode.curfields[field] = fieldnode
instnode.add_escape_dependency(fieldnode)
@@ -243,7 +243,7 @@
fieldnode = InstanceNode(fromstart=True)
instnode.add_escape_dependency(fieldnode)
if instnode.origfields is None:
- instnode.origfields = av_newdict()
+ instnode.origfields = {}
instnode.origfields[field] = fieldnode
else:
return # nothing to be gained from tracking the field
@@ -366,7 +366,7 @@
if d is not None:
d = d.copy()
else:
- d = av_newdict()
+ d = {}
for ofs in orig:
d.setdefault(ofs, self.node_escaped)
if d is not None:
@@ -448,7 +448,7 @@
def make_instance_node(self):
instnode = InstanceNode()
instnode.knownclsbox = self.known_class
- instnode.curfields = av_newdict()
+ instnode.curfields = {}
for ofs, subspecnode in self.fields:
instnode.curfields[ofs] = subspecnode.make_instance_node()
return instnode
Modified: pypy/trunk/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/trunk/pypy/jit/metainterp/optimizeopt.py Tue Dec 1 15:55:09 2009
@@ -9,7 +9,7 @@
from pypy.jit.metainterp.specnode import VirtualInstanceSpecNode
from pypy.jit.metainterp.specnode import VirtualArraySpecNode
from pypy.jit.metainterp.specnode import VirtualStructSpecNode
-from pypy.jit.metainterp.optimizeutil import av_newdict2, _findall, sort_descrs
+from pypy.jit.metainterp.optimizeutil import _findall, sort_descrs
from pypy.jit.metainterp.optimizeutil import descrlist_dict
from pypy.jit.metainterp.optimizeutil import InvalidLoop
from pypy.jit.metainterp import resume, compile
@@ -186,7 +186,7 @@
def __init__(self, optimizer, keybox, source_op=None):
AbstractVirtualValue.__init__(self, optimizer, keybox, source_op)
- self._fields = av_newdict2()
+ self._fields = {}
self._cached_sorted_fields = None
def getfield(self, ofs, default):
@@ -840,9 +840,6 @@
def __init__(self, optimizer):
self.optimizer = optimizer
# cached OptValues for each field descr
- # NOTE: it is important that this is not a av_newdict2 dict!
- # we want more precision to prevent mixing up of unrelated fields, just
- # because they are at the same offset (but in a different struct type)
self.cached_fields = {}
# cached OptValues for each field descr
Modified: pypy/trunk/pypy/jit/metainterp/optimizeutil.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/optimizeutil.py (original)
+++ pypy/trunk/pypy/jit/metainterp/optimizeutil.py Tue Dec 1 15:55:09 2009
@@ -10,20 +10,6 @@
# ____________________________________________________________
# Misc. utilities
-def av_eq(self, other):
- return self.sort_key() == other.sort_key()
-
-def av_hash(self):
- return self.sort_key()
-
-def av_newdict():
- return r_dict(av_eq, av_hash)
-
-def av_newdict2():
- # another implementation of av_newdict(), allowing different types for
- # the values...
- return r_dict(av_eq, av_hash)
-
def _findall(Class, name_prefix):
result = []
for value, name in resoperation.opname.items():
@@ -56,14 +42,9 @@
def descrlist_hash(l):
res = 0x345678
- mult = 1000003
- z = len(l)
for descr in l:
y = compute_identity_hash(descr)
- res = (res ^ y) * mult
- z -= 1
- mult += 82520 + z + z
- res += 97531
+ res = intmask((1000003 * res) ^ y)
return res
def descrlist_eq(l1, l2):
More information about the Pypy-commit
mailing list