[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