@@ -347,10 +347,11 @@ def _(iet):
347347def _ (iet ):
348348 # SubDimensions in the main loop nests
349349 mapper = {}
350- mds = {}
350+
351+ trees = retrieve_iteration_tree (iet )
351352 # Build a mapper replacing SubDimension names with respective root dimension
352353 # names where possible
353- for tree in retrieve_iteration_tree ( iet ) :
354+ for tree in trees :
354355 # Rename SubDimensions present as indices in innermost loop
355356 mapper .update (_rename_subdims (tree .inner , tree .dimensions ))
356357
@@ -359,16 +360,12 @@ def _(iet):
359360 dims = [d for d in dims if d .is_Incr and d .parent in mapper ]
360361 mapper .update ({d : d ._rebuild (parent = mapper [d .parent ]) for d in dims })
361362
362- # Update parents of CIRE-generated ModuloDimensions. Search once per
363- # outermost Iteration, as each tree would otherwise rescan the outer loops
364- try :
365- candidates = mds [tree .root ]
366- except KeyError :
367- candidates = mds [tree .root ] = [
368- d for d in FindSymbols ('dimensions' ).visit (tree .root ) if d .is_Modulo
369- ]
370- dims = [d for d in candidates if d .parent in mapper ]
371- mapper .update ({d : d ._rebuild (parent = mapper [d .parent ]) for d in dims })
363+ # Update parents of CIRE-generated ModuloDimensions
364+ roots = {tree .root for tree in trees }
365+ mds = {d for root in roots for d in FindSymbols ('dimensions' ).visit (root )
366+ if d .is_Modulo }
367+ mapper .update ({d : d ._rebuild (parent = mapper [d .parent ])
368+ for d in mds if d .parent in mapper })
372369
373370 return Uxreplace (mapper , nested = True ).visit (iet )
374371
0 commit comments