Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r50008:7db85588c567 Date: 2011-11-30 13:18 +0100 http://bitbucket.org/pypy/pypy/changeset/7db85588c567/
Log: Kill dependency on "isstartblock". diff --git a/pypy/translator/backendopt/test/test_malloc.py b/pypy/translator/backendopt/test/test_malloc.py --- a/pypy/translator/backendopt/test/test_malloc.py +++ b/pypy/translator/backendopt/test/test_malloc.py @@ -50,7 +50,8 @@ # we do the loop ourselves instead of calling remove_simple_mallocs() while True: progress = remover.remove_mallocs_once(graph) - simplify.transform_dead_op_vars_in_blocks(list(graph.iterblocks())) + simplify.transform_dead_op_vars_in_blocks(list(graph.iterblocks()), + [graph]) if progress and option.view: t.view() if expected_result is not Ellipsis: diff --git a/pypy/translator/simplify.py b/pypy/translator/simplify.py --- a/pypy/translator/simplify.py +++ b/pypy/translator/simplify.py @@ -397,7 +397,8 @@ def transform_dead_op_vars(graph, translator=None): """Remove dead operations and variables that are passed over a link but not used in the target block. Input is a graph.""" - return transform_dead_op_vars_in_blocks(list(graph.iterblocks()), translator) + return transform_dead_op_vars_in_blocks(list(graph.iterblocks()), + [graph], translator) # the set of operations that can safely be removed # (they have no side effects, at least in R-Python) @@ -419,12 +420,19 @@ hasattr: True, } -def transform_dead_op_vars_in_blocks(blocks, translator=None): +def find_start_blocks(graphs): + start_blocks = set() + for graph in graphs: + start_blocks.add(graph.startblock) + return start_blocks + +def transform_dead_op_vars_in_blocks(blocks, graphs, translator=None): """Remove dead operations and variables that are passed over a link but not used in the target block. Input is a set of blocks""" read_vars = {} # set of variables really used variable_flow = {} # map {Var: list-of-Vars-it-depends-on} set_of_blocks = set(blocks) + start_blocks = find_start_blocks(graphs) def canremove(op, block): if op.opname not in CanRemove: @@ -466,7 +474,7 @@ read_vars[arg] = True # an input block's inputargs should not be modified, even if some # of the function's input arguments are not actually used - if block.isstartblock: + if block in start_blocks: for arg in block.inputargs: read_vars[arg] = True diff --git a/pypy/translator/transform.py b/pypy/translator/transform.py --- a/pypy/translator/transform.py +++ b/pypy/translator/transform.py @@ -115,7 +115,7 @@ # to kill dead (never-followed) links, # which can possibly remove more variables. from pypy.translator.simplify import transform_dead_op_vars_in_blocks - transform_dead_op_vars_in_blocks(block_subset) + transform_dead_op_vars_in_blocks(block_subset, self.translator.graphs) def transform_dead_code(self, block_subset): """Remove dead code: these are the blocks that are not annotated at all _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit