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