[pypy-commit] pypy ssa-flow: Don't pass unchanged Variable objects through links

rlamy noreply at buildbot.pypy.org
Wed Nov 12 19:43:12 CET 2014


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: ssa-flow
Changeset: r74490:43ff4ed9e9ec
Date: 2013-08-15 20:19 +0100
http://bitbucket.org/pypy/pypy/changeset/43ff4ed9e9ec/

Log:	Don't pass unchanged Variable objects through links

	Remove incorrect hack in SSA_to_SSI

diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py
--- a/rpython/flowspace/flowcontext.py
+++ b/rpython/flowspace/flowcontext.py
@@ -111,12 +111,11 @@
 
     def guessbool(self, ctx, w_condition):
         block = self.crnt_block
-        vars = block.getvariables()
         links = []
         for case in [False, True]:
-            egg = EggBlock(vars, block, case)
+            egg = EggBlock([], block, case)
             ctx.pendingblocks.append(egg)
-            link = Link(vars, egg, case)
+            link = Link([], egg, case)
             links.append(link)
 
         block.exitswitch = w_condition
@@ -133,16 +132,16 @@
         links = []
         for case in [None] + list(cases):
             if case is not None:
-                assert block.operations[-1].result is bvars[-1]
-                vars = bvars[:-1]
-                vars2 = bvars[:-1]
                 if case is Exception:
                     last_exc = Variable('last_exception')
                 else:
                     last_exc = Constant(case)
                 last_exc_value = Variable('last_exc_value')
-                vars.extend([last_exc, last_exc_value])
-                vars2.extend([Variable(), Variable()])
+                vars = [last_exc, last_exc_value]
+                vars2 = [Variable(), Variable()]
+            else:
+                vars = []
+                vars2 = []
             egg = EggBlock(vars2, block, case)
             ctx.pendingblocks.append(egg)
             link = Link(vars, egg, case)
diff --git a/rpython/translator/backendopt/ssa.py b/rpython/translator/backendopt/ssa.py
--- a/rpython/translator/backendopt/ssa.py
+++ b/rpython/translator/backendopt/ssa.py
@@ -138,15 +138,6 @@
     other's variables directly, without having to pass and rename them along
     links).
     """
-    seen = set()
-    for link in graph.iterlinks():
-        mapping = {}
-        seen.update(link.args)
-        for arg in link.target.inputargs:
-            if arg in seen and isinstance(arg, Variable):
-                mapping[arg] = Variable(arg)
-        link.target.renamevariables(mapping)
-
     entrymap = mkentrymap(graph)
     del entrymap[graph.startblock]
     builder = DataFlowFamilyBuilder(graph)
diff --git a/rpython/translator/simplify.py b/rpython/translator/simplify.py
--- a/rpython/translator/simplify.py
+++ b/rpython/translator/simplify.py
@@ -75,10 +75,12 @@
                 outputargs = []
                 for v in exit.args:
                     if isinstance(v, Variable):
-                        # this variable is valid in the context of block1
-                        # but it must come from 'link'
-                        i = block1.inputargs.index(v)
-                        v = link.args[i]
+                        try:
+                            i = block1.inputargs.index(v)
+                            v = link.args[i]
+                        except ValueError:
+                            # the variable was passed implicitly to block1
+                            pass
                     outputargs.append(v)
                 link.args = outputargs
                 link.target = exit.target


More information about the pypy-commit mailing list