Author: Ronan Lamy <[email protected]>
Branch: ssa-flow
Changeset: r74538:b754a290822e
Date: 2014-11-16 18:22 +0000
http://bitbucket.org/pypy/pypy/changeset/b754a290822e/

Log:    make variable ordering deterministic in SSA_to_SSI()

diff --git a/rpython/jit/codewriter/test/test_flatten.py 
b/rpython/jit/codewriter/test/test_flatten.py
--- a/rpython/jit/codewriter/test/test_flatten.py
+++ b/rpython/jit/codewriter/test/test_flatten.py
@@ -197,10 +197,10 @@
             int_gt %i2, $0 -> %i4
             goto_if_not %i4, L2
             -live- L2
-            int_copy %i3 -> %i5
-            int_copy %i2 -> %i6
-            int_add %i5, %i6 -> %i7
-            int_sub %i6, $1 -> %i8
+            int_copy %i2 -> %i5
+            int_copy %i3 -> %i6
+            int_add %i6, %i5 -> %i7
+            int_sub %i5, $1 -> %i8
             int_copy %i8 -> %i2
             int_copy %i7 -> %i3
             goto L1
@@ -221,10 +221,10 @@
             L1:
             goto_if_not_int_gt %i2, $0, L2
             -live- L2
-            int_copy %i3 -> %i4
-            int_copy %i2 -> %i5
-            int_add %i4, %i5 -> %i6
-            int_sub %i5, $1 -> %i7
+            int_copy %i2 -> %i4
+            int_copy %i3 -> %i5
+            int_add %i5, %i4 -> %i6
+            int_sub %i4, $1 -> %i7
             int_copy %i7 -> %i2
             int_copy %i6 -> %i3
             goto L1
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
@@ -145,17 +145,26 @@
     del builder
 
     pending = []     # list of (block, var-used-but-not-defined)
-    for block in entrymap:
+    for block in graph.iterblocks():
+        if block not in entrymap:
+            continue
         variables_created = variables_created_in(block)
-        variables_used = set()
+        seen = set(variables_created)
+        variables_used = []
+        def record_used_var(v):
+            if v not in seen:
+                variables_used.append(v)
+                seen.add(v)
         for op in block.operations:
-            variables_used.update(op.args)
-        variables_used.add(block.exitswitch)
+            for arg in op.args:
+                record_used_var(arg)
+        record_used_var(block.exitswitch)
         for link in block.exits:
-            variables_used.update(link.args)
+            for arg in link.args:
+                record_used_var(arg)
 
         for v in variables_used:
-            if (isinstance(v, Variable) and v not in variables_created and
+            if (isinstance(v, Variable) and
                     v._name not in ('last_exception_', 'last_exc_value_')):
                 pending.append((block, v))
 
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to