[pypy-commit] pypy lightweight-finalizers: Various operations and a test
fijal
noreply at buildbot.pypy.org
Sun Oct 9 21:28:09 CEST 2011
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: lightweight-finalizers
Changeset: r47911:ad34a15783f9
Date: 2011-10-09 21:26 +0200
http://bitbucket.org/pypy/pypy/changeset/ad34a15783f9/
Log: Various operations and a test
diff --git a/pypy/translator/backendopt/finalizer.py b/pypy/translator/backendopt/finalizer.py
--- a/pypy/translator/backendopt/finalizer.py
+++ b/pypy/translator/backendopt/finalizer.py
@@ -20,7 +20,7 @@
if (op.opname.startswith('int_') or op.opname.startswith('float_')
or op.opname.startswith('cast_')):
return self.bottom_result()
- if op.opname == 'setfield':
+ if op.opname == 'setfield' or op.opname == 'bare_setfield':
TP = op.args[2].concretetype
if not isinstance(TP, lltype.Ptr) or TP.TO._gckind == 'raw':
# primitive type
diff --git a/pypy/translator/backendopt/test/test_finalizer.py b/pypy/translator/backendopt/test/test_finalizer.py
--- a/pypy/translator/backendopt/test/test_finalizer.py
+++ b/pypy/translator/backendopt/test/test_finalizer.py
@@ -3,6 +3,7 @@
from pypy.translator.backendopt.finalizer import FinalizerAnalyzer
from pypy.translator.translator import TranslationContext, graphof
from pypy.translator.backendopt.all import backend_optimizations
+from pypy.translator.unsimplify import varoftype
from pypy.rpython.lltypesystem import lltype, rffi
from pypy.conftest import option
@@ -34,7 +35,32 @@
r = self.analyze(f, [])
assert not r
+def test_various_ops():
+ from pypy.objspace.flow.model import SpaceOperation, Constant
+ X = lltype.Ptr(lltype.GcStruct('X'))
+ Z = lltype.Ptr(lltype.Struct('Z'))
+ S = lltype.GcStruct('S', ('x', lltype.Signed),
+ ('y', X),
+ ('z', Z))
+ v1 = varoftype(lltype.Bool)
+ v2 = varoftype(lltype.Signed)
+ f = FinalizerAnalyzer(None)
+ r = f.analyze(SpaceOperation('cast_int_to_bool', [v2],
+ v1))
+ assert not r
+ v1 = varoftype(lltype.Ptr(S))
+ v2 = varoftype(lltype.Signed)
+ v3 = varoftype(X)
+ v4 = varoftype(Z)
+ assert not f.analyze(SpaceOperation('bare_setfield', [v1, Constant('x'),
+ v2], None))
+ assert f.analyze(SpaceOperation('bare_setfield', [v1, Constant('y'),
+ v3], None))
+ assert not f.analyze(SpaceOperation('bare_setfield', [v1, Constant('z'),
+ v4], None))
+
+
class TestLLType(BaseFinalizerAnalyzerTests):
type_system = 'lltype'
More information about the pypy-commit
mailing list