[pypy-svn] r4370 - pypy/trunk/src/pypy/translator
arigo at codespeak.net
arigo at codespeak.net
Tue May 11 16:50:08 CEST 2004
Author: arigo
Date: Tue May 11 16:50:07 2004
New Revision: 4370
Modified:
pypy/trunk/src/pypy/translator/annrpython.py
pypy/trunk/src/pypy/translator/transform.py
Log:
A new transformation (dead operation elimination).
Modified: pypy/trunk/src/pypy/translator/annrpython.py
==============================================================================
--- pypy/trunk/src/pypy/translator/annrpython.py (original)
+++ pypy/trunk/src/pypy/translator/annrpython.py Tue May 11 16:50:07 2004
@@ -164,7 +164,7 @@
def simplify(self):
# Generic simpliciations
from pypy.translator import transform
- transform.transform_simple_call(self)
+ transform.transform_graph(self)
#___ flowing annotations in blocks _____________________
Modified: pypy/trunk/src/pypy/translator/transform.py
==============================================================================
--- pypy/trunk/src/pypy/translator/transform.py (original)
+++ pypy/trunk/src/pypy/translator/transform.py Tue May 11 16:50:07 2004
@@ -96,8 +96,32 @@
block.operations = operations
+def transform_dead_operations(self):
+ """Remove dead operations."""
+ # the set of operations that can safely be removed (no side effects)
+ CanRemove = {'newtuple': True,
+ 'newlist': True,
+ 'newdict': True}
+ for block in self.annotated:
+ # figure out which variables are ever read
+ read_vars = {}
+ for op in block.operations:
+ for arg in op.args:
+ read_vars[arg] = True
+ for link in block.exits:
+ for arg in link.args:
+ read_vars[arg] = True
+ # look for removable operations whose result is never used
+ for i in range(len(block.operations)-1, -1, -1):
+ op = block.operations[i]
+ if op.opname in CanRemove and op.result not in read_vars:
+ del block.operations[i]
+
def transform_graph(ann):
"""Apply set of transformations available."""
transform_allocate(ann)
transform_slice(ann)
transform_simple_call(ann)
+ # do this last, after the previous transformations had a
+ # chance to remove dependency on certain variables
+ transform_dead_operations(ann)
More information about the Pypy-commit
mailing list