Skip to content

Commit e376a0d

Browse files
Merge pull request #2633 from devitocodes/safe-cse-sort
compiler: Make cse toposort stable
2 parents ed3585a + 904ac28 commit e376a0d

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

devito/passes/clusters/cse.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,10 @@ def _toposort(exprs):
258258
"""
259259
Ensure the expression list is topologically sorted.
260260
"""
261+
if not any(isinstance(e.lhs, CTemp) for e in exprs):
262+
# No CSE temps, no need to topological sort
263+
return exprs
264+
261265
dag = DAG(exprs)
262266

263267
for e0 in exprs:
@@ -269,9 +273,13 @@ def _toposort(exprs):
269273
dag.add_edge(e0, e1, force_add=True)
270274

271275
def choose_element(queue, scheduled):
272-
# Try to honor temporary names as much as possible
273-
first = sorted(queue, key=lambda i: str(i.lhs)).pop(0)
274-
queue.remove(first)
276+
tmps = [i for i in queue if isinstance(i.lhs, CTemp)]
277+
if tmps:
278+
# Try to honor temporary names as much as possible
279+
first = sorted(tmps, key=lambda i: i.lhs.name).pop(0)
280+
queue.remove(first)
281+
else:
282+
first = queue.pop()
275283
return first
276284

277285
processed = dag.topological_sort(choose_element)

0 commit comments

Comments
 (0)