Author: Armin Rigo <[email protected]>
Branch: stm-gc
Changeset: r52652:a5a9bfcc9aeb
Date: 2012-02-19 20:22 +0100
http://bitbucket.org/pypy/pypy/changeset/a5a9bfcc9aeb/
Log: Go through "hint" operations that are not related to stm.
diff --git a/pypy/translator/stm/gcsource.py b/pypy/translator/stm/gcsource.py
--- a/pypy/translator/stm/gcsource.py
+++ b/pypy/translator/stm/gcsource.py
@@ -45,7 +45,9 @@
for block in graph.iterblocks():
for op in block.operations:
#
- if op.opname in COPIES_POINTER:
+ if (op.opname in COPIES_POINTER or
+ (op.opname == 'hint' and
+ 'stm_write' not in op.args[1].value)):
if _is_gc(op.result) and _is_gc(op.args[0]):
resultlist.append((op.args[0], op.result))
continue
diff --git a/pypy/translator/stm/test/test_gcsource.py
b/pypy/translator/stm/test/test_gcsource.py
--- a/pypy/translator/stm/test/test_gcsource.py
+++ b/pypy/translator/stm/test/test_gcsource.py
@@ -2,6 +2,7 @@
from pypy.translator.stm.gcsource import GcSource
from pypy.objspace.flow.model import SpaceOperation, Constant
from pypy.rpython.lltypesystem import lltype
+from pypy.rlib.jit import hint
class X:
@@ -130,3 +131,21 @@
v_result = gsrc.translator.graphs[0].getreturnvar()
s = gsrc[v_result]
assert list(s) == ['last_exc_value']
+
+def test_hint_xyz():
+ def main(n):
+ return hint(X(n), xyz=True)
+ gsrc = gcsource(main, [int])
+ v_result = gsrc.translator.graphs[0].getreturnvar()
+ s = gsrc[v_result]
+ assert len(s) == 1
+ assert list(s)[0].opname == 'malloc'
+
+def test_hint_stm_write():
+ def main(n):
+ return hint(X(n), stm_write=True)
+ gsrc = gcsource(main, [int])
+ v_result = gsrc.translator.graphs[0].getreturnvar()
+ s = gsrc[v_result]
+ assert len(s) == 1
+ assert list(s)[0].opname == 'hint'
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit