[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