Skip to content

Commit 2b90cd6

Browse files
committed
compiler: make cse toposort stable
1 parent 2a0076f commit 2b90cd6

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

devito/passes/clusters/cse.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,10 @@ def _toposort(exprs):
244244
"""
245245
Ensure the expression list is topologically sorted.
246246
"""
247+
if not any(isinstance(e.lhs, CTemp) for e in exprs):
248+
# Not CSE temps, no need to topologically sort
249+
return exprs
250+
247251
dag = DAG(exprs)
248252

249253
for e0 in exprs:
@@ -256,8 +260,12 @@ def _toposort(exprs):
256260

257261
def choose_element(queue, scheduled):
258262
# Try to honor temporary names as much as possible
259-
first = sorted(queue, key=lambda i: str(i.lhs)).pop(0)
260-
queue.remove(first)
263+
tmps = [i for i in queue if isinstance(i.lhs, CTemp)]
264+
if tmps:
265+
first = sorted(tmps, key=lambda i: str(i.lhs)).pop(0)
266+
queue.remove(first)
267+
else:
268+
first = queue.pop()
261269
return first
262270

263271
processed = dag.topological_sort(choose_element)

0 commit comments

Comments
 (0)