[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