[pypy-svn] r28582 - pypy/dist/pypy/translator/backendopt/test

mwh at codespeak.net mwh at codespeak.net
Fri Jun 9 13:31:17 CEST 2006


Author: mwh
Date: Fri Jun  9 13:31:15 2006
New Revision: 28582

Modified:
   pypy/dist/pypy/translator/backendopt/test/test_support.py
Log:
(mwh, pedronis)
add another test and some comments about what we're testing.


Modified: pypy/dist/pypy/translator/backendopt/test/test_support.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/test/test_support.py	(original)
+++ pypy/dist/pypy/translator/backendopt/test/test_support.py	Fri Jun  9 13:31:15 2006
@@ -14,9 +14,13 @@
     return var
 
 def test_nclc_should_be_true():
+    # this is testing a block like:
+    # +--- inputargs: pointer_to_gc
+    # | v0 <- op_getsubstruct pointer_to_gc 'b'
+    # +--- exitargs: v0 (i.e. pointer to non-gc)
     llops = LowLevelOpList()
     ptr_a = varoftype(lltype.Ptr(GcA))
-    v_res = llops.genop("getfield", [ptr_a, model.Constant('b', lltype.Void)],
+    v_res = llops.genop("getsubstruct", [ptr_a, model.Constant('b', lltype.Void)],
                         resulttype=lltype.Ptr(NonGcB))
     block = model.Block([ptr_a])
     block.operations.extend(llops)
@@ -24,9 +28,12 @@
     assert needs_conservative_livevar_calculation(block)
 
 def test_nclc_nongc_not_passed_on():
+    # +--- inputargs: pointer_to_gc
+    # | v0 <- op_getsubstruct pointer_to_gc 'b'
+    # +--- exitargs: pointer_to_gc (i.e. the pointer to non-gc doesn't leave the block)
     llops = LowLevelOpList()
     ptr_a = varoftype(lltype.Ptr(GcA))
-    v_res = llops.genop("getfield", [ptr_a, model.Constant('b', lltype.Void)],
+    v_res = llops.genop("getsubstruct", [ptr_a, model.Constant('b', lltype.Void)],
                         resulttype=lltype.Ptr(NonGcB))
     block = model.Block([ptr_a])
     block.operations.extend(llops)
@@ -34,6 +41,12 @@
     assert not needs_conservative_livevar_calculation(block)
 
 def test_nclc_ignore_functype():
+    # +--- inputargs: pointer_to_gc
+    # | v0 <- op_getfield pointer_to_gc 'c'
+    # +--- exitargs: v0 (i.e. a pointer to function)
+    # pointers to functions are 'not gc' but functions are also
+    # immortal so you don't need to muck around inserting keepalives
+    # so *they* don't die!
     llops = LowLevelOpList()
     ptr_a = varoftype(lltype.Ptr(GcA))
     v_res = llops.genop("getfield", [ptr_a, model.Constant('c', lltype.Void)],
@@ -44,6 +57,9 @@
     assert not needs_conservative_livevar_calculation(block)
 
 def test_sbwk_should_insert_keepalives():
+    # this is testing something like:
+    # v0 <- op_producing_non_gc
+    # v1 <- op_using_v0        <- split here
     llops = LowLevelOpList()
     ptr_a = varoftype(lltype.Ptr(GcA))
     v_res = llops.genop("getfield", [ptr_a, model.Constant('b', lltype.Void)],
@@ -55,4 +71,24 @@
     block.closeblock(model.Link([], None))
     link = split_block_with_keepalive(block, 1)
     assert 'keepalive' in [op.opname for op in link.target.operations]
-    
+
+def test_sbwk_should_insert_keepalives_2():
+    # this is testing something like:
+    # v0 <- op_producing_non_gc
+    # v1 <- op_not_using_v0        <- split here
+    # v2 <- op_using_v0
+    llops = LowLevelOpList()
+    ptr_a = varoftype(lltype.Ptr(GcA))
+    v_res = llops.genop("getfield", [ptr_a, model.Constant('b', lltype.Void)],
+                        resulttype=lltype.Ptr(NonGcB))
+    llops.genop("direct_call", [model.Constant(None, lltype.Void)],
+                resulttype=lltype.Void)
+    llops.genop("direct_call", [model.Constant(None, lltype.Void), v_res],
+                resulttype=lltype.Void)
+    block = model.Block([ptr_a])
+    block.operations.extend(llops)
+    block.closeblock(model.Link([], None))
+    link = split_block_with_keepalive(block, 1)
+    assert 'keepalive' in [op.opname for op in link.target.operations]
+
+



More information about the Pypy-commit mailing list