From 3f57702baa4d05e80bebb70d8052e9a6f5a41640 Mon Sep 17 00:00:00 2001 From: Edward Caunt Date: Fri, 9 Oct 2026 12:24:55 +0100 Subject: [PATCH 1/2] compiler: Cache modulodimensions in abridge_dim_names rather than repeatedly searching IET --- devito/passes/iet/misc.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/devito/passes/iet/misc.py b/devito/passes/iet/misc.py index 1b404daca1..171b4bf25d 100644 --- a/devito/passes/iet/misc.py +++ b/devito/passes/iet/misc.py @@ -347,6 +347,7 @@ def _(iet): def _(iet): # SubDimensions in the main loop nests mapper = {} + mds = {} # Build a mapper replacing SubDimension names with respective root dimension # names where possible for tree in retrieve_iteration_tree(iet): @@ -358,9 +359,15 @@ def _(iet): dims = [d for d in dims if d.is_Incr and d.parent in mapper] mapper.update({d: d._rebuild(parent=mapper[d.parent]) for d in dims}) - # Update parents of CIRE-generated ModuloDimensions - dims = FindSymbols('dimensions').visit(tree) - dims = [d for d in dims if d.is_Modulo and d.parent in mapper] + # Update parents of CIRE-generated ModuloDimensions. Search once per + # outermost Iteration, as each tree would otherwise rescan the outer loops + try: + candidates = mds[tree.root] + except KeyError: + candidates = mds[tree.root] = [ + d for d in FindSymbols('dimensions').visit(tree.root) if d.is_Modulo + ] + dims = [d for d in candidates if d.parent in mapper] mapper.update({d: d._rebuild(parent=mapper[d.parent]) for d in dims}) return Uxreplace(mapper, nested=True).visit(iet) From 14cb20b998930a289566329bde89a6a72527117f Mon Sep 17 00:00:00 2001 From: Edward Caunt Date: Thu, 22 Oct 2026 11:08:43 +0100 Subject: [PATCH 2/2] compiler: Refactor ModuloDimension handling in abridge_dim_names --- devito/passes/iet/misc.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/devito/passes/iet/misc.py b/devito/passes/iet/misc.py index 171b4bf25d..4facf6646d 100644 --- a/devito/passes/iet/misc.py +++ b/devito/passes/iet/misc.py @@ -347,10 +347,11 @@ def _(iet): def _(iet): # SubDimensions in the main loop nests mapper = {} - mds = {} + + trees = retrieve_iteration_tree(iet) # Build a mapper replacing SubDimension names with respective root dimension # names where possible - for tree in retrieve_iteration_tree(iet): + for tree in trees: # Rename SubDimensions present as indices in innermost loop mapper.update(_rename_subdims(tree.inner, tree.dimensions)) @@ -359,16 +360,12 @@ def _(iet): dims = [d for d in dims if d.is_Incr and d.parent in mapper] mapper.update({d: d._rebuild(parent=mapper[d.parent]) for d in dims}) - # Update parents of CIRE-generated ModuloDimensions. Search once per - # outermost Iteration, as each tree would otherwise rescan the outer loops - try: - candidates = mds[tree.root] - except KeyError: - candidates = mds[tree.root] = [ - d for d in FindSymbols('dimensions').visit(tree.root) if d.is_Modulo - ] - dims = [d for d in candidates if d.parent in mapper] - mapper.update({d: d._rebuild(parent=mapper[d.parent]) for d in dims}) + # Update parents of CIRE-generated ModuloDimensions + roots = {tree.root for tree in trees} + mds = {d for root in roots for d in FindSymbols('dimensions').visit(root) + if d.is_Modulo} + mapper.update({d: d._rebuild(parent=mapper[d.parent]) + for d in mds if d.parent in mapper}) return Uxreplace(mapper, nested=True).visit(iet)