[pypy-commit] pypy jit-counter: Fix for tests

arigo noreply at buildbot.pypy.org
Wed Oct 30 19:48:09 CET 2013


Author: Armin Rigo <arigo at tunes.org>
Branch: jit-counter
Changeset: r67750:7ab619834c25
Date: 2013-10-30 19:47 +0100
http://bitbucket.org/pypy/pypy/changeset/7ab619834c25/

Log:	Fix for tests

diff --git a/rpython/jit/metainterp/compile.py b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -583,7 +583,7 @@
                 intval = metainterp_sd.cpu.get_int_value(deadframe, index)
             elif typetag == self.TY_REF:
                 refval = metainterp_sd.cpu.get_ref_value(deadframe, index)
-                intval = current_object_addr_as_int(refval)
+                intval = lltype.cast_ptr_to_int(refval)
             elif typetag == self.TY_FLOAT:
                 floatval = metainterp_sd.cpu.get_float_value(deadframe, index)
                 intval = longlong.gethash_fast(floatval)
diff --git a/rpython/jit/metainterp/counter.py b/rpython/jit/metainterp/counter.py
--- a/rpython/jit/metainterp/counter.py
+++ b/rpython/jit/metainterp/counter.py
@@ -30,7 +30,7 @@
             return 0.0   # no increment, never reach 1.0
         if threshold < 2:
             threshold = 2
-        return 1.0 / threshold   # the number is at most 0.5
+        return 1.0 / (threshold - 0.001)   # the number is at most 0.500xx
 
     def get_index(self, hash):
         """Return the index (< self.size) from a hash value.  This keeps
@@ -110,3 +110,21 @@
 pypy__decay_jit_counters = rffi.llexternal(
     "pypy__decay_jit_counters", [rffi.FLOATP, lltype.Float, lltype.Signed],
     lltype.Void, compilation_info=eci, _nowrapper=True, sandboxsafe=True)
+
+
+# ____________________________________________________________
+#
+# A non-RPython version that avoids issues with rare random collisions,
+# which make all tests brittle
+
+class DeterministicJitCounter(JitCounter):
+    def __init__(self):
+        from collections import defaultdict
+        JitCounter.__init__(self, size=8)
+        zero = r_singlefloat(0.0)
+        self.timetable = defaultdict(lambda: zero)
+        self.celltable = defaultdict(lambda: None)
+
+    def get_index(self, hash):
+        "NOT_RPYTHON"
+        return hash
diff --git a/rpython/jit/metainterp/warmspot.py b/rpython/jit/metainterp/warmspot.py
--- a/rpython/jit/metainterp/warmspot.py
+++ b/rpython/jit/metainterp/warmspot.py
@@ -205,8 +205,11 @@
         vrefinfo = VirtualRefInfo(self)
         self.codewriter.setup_vrefinfo(vrefinfo)
         #
-        from rpython.jit.metainterp.counter import JitCounter
-        self.jitcounter = JitCounter()
+        from rpython.jit.metainterp import counter
+        if self.cpu.translate_support_code:
+            self.jitcounter = counter.JitCounter()
+        else:
+            self.jitcounter = counter.DeterministicJitCounter()
         #
         self.hooks = policy.jithookiface
         self.make_virtualizable_infos()


More information about the pypy-commit mailing list