[pypy-commit] pypy stm-jit: Improve precision.

arigo noreply at buildbot.pypy.org
Sun Aug 5 22:34:29 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: stm-jit
Changeset: r56589:0132258e4baf
Date: 2012-08-05 22:33 +0200
http://bitbucket.org/pypy/pypy/changeset/0132258e4baf/

Log:	Improve precision.

diff --git a/pypy/translator/stm/test/targetdemo2.py b/pypy/translator/stm/test/targetdemo2.py
--- a/pypy/translator/stm/test/targetdemo2.py
+++ b/pypy/translator/stm/test/targetdemo2.py
@@ -3,7 +3,7 @@
 from pypy.rlib import rstm
 from pypy.rlib.objectmodel import invoke_around_extcall, we_are_translated
 from pypy.rlib.debug import ll_assert
-from pypy.rpython.lltypesystem import rffi
+from pypy.rpython.lltypesystem import lltype, rffi
 
 
 class Node:
@@ -21,6 +21,8 @@
     othernodes  = [Node(0) for i in range(1000)]
 glob = Global()
 
+STRUCT = lltype.GcStruct('STRUCT', ('x', lltype.Signed))
+
 def add_at_end_of_chained_list(node, value, threadindex):
     x = Node(value)
     while node.next:
@@ -61,6 +63,8 @@
 
 
 class ThreadRunner(object):
+    arg = None
+
     def __init__(self, i):
         self.index = i
         self.finished_lock = ll_thread.allocate_lock()
@@ -73,6 +77,7 @@
                                      ThreadRunner, self)
             self.value = 0
             self.arg = Arg()
+            self.glob_p = lltype.malloc(STRUCT)
             rstm.perform_transaction(ThreadRunner.check_ptr_equality,
                                      ThreadRunner, self)
             rstm.perform_transaction(ThreadRunner.run_really,
@@ -97,6 +102,7 @@
         return int(self.value < glob.LENGTH)
 
     def check_ptr_equality(self, retry_counter):
+        assert self.glob_p != lltype.nullptr(STRUCT)
         res = _check_pointer(self.arg)    # 'self.arg' reads a GLOBAL object
         ll_assert(res is self.arg, "ERROR: bogus pointer equality")
         raw1 = rffi.cast(rffi.CCHARP, retry_counter)
diff --git a/pypy/translator/stm/transform.py b/pypy/translator/stm/transform.py
--- a/pypy/translator/stm/transform.py
+++ b/pypy/translator/stm/transform.py
@@ -243,6 +243,10 @@
         if T._gckind == 'raw':
             newoperations.append(op)
             return
+        if ((isinstance(op.args[0], Constant) and not op.args[0].value) or
+            (isinstance(op.args[1], Constant) and not op.args[1].value)):
+            newoperations.append(op)     # comparison with NULL
+            return
         if self.localtracker.try_ensure_local(op.args[0], op.args[1]):   # both
             newoperations.append(op)
             return


More information about the pypy-commit mailing list