[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