Skip to content

Commit 37af191

Browse files
committed
compiler: patch multi-subdim isapce handling
1 parent c1544b8 commit 37af191

2 files changed

Lines changed: 14 additions & 6 deletions

File tree

devito/passes/clusters/implicit.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,17 @@ def callback(self, clusters, prefix):
175175

176176
# Make sure the "implicit expressions" are scheduled in
177177
# the innermost loop such that the thicknesses can be computed
178-
edims = set(retrieve_dimensions(mapper.values(), deep=True))
179-
if dim not in edims or not edims.issubset(prefix.dimensions):
178+
def key(tkn):
179+
edims = set(retrieve_dimensions(tkn, deep=True))
180+
return dim._defines & edims and edims.issubset(prefix.dimensions)
181+
182+
mapper = {k: v for k, v in mapper.items() if key(v)}
183+
if not mapper:
180184
continue
181185

182186
found[d.functions].clusters.append(c)
183187
found[d.functions].mapper = reduce(found[d.functions].mapper,
184-
mapper, edims, prefix)
188+
mapper, {dim}, prefix)
185189

186190
# Turn the reduced mapper into a list of equations
187191
processed = []
@@ -262,7 +266,7 @@ def reduce(m0, m1, edims, prefix):
262266
def key(i):
263267
try:
264268
return i.indices[d]
265-
except AttributeError:
269+
except (KeyError, AttributeError):
266270
return i
267271

268272
mapper = {}

devito/symbolics/inspection.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from devito.symbolics.extended_sympy import (CallFromPointer, Cast,
1414
DefFunction, ReservedWord)
1515
from devito.symbolics.queries import q_routine
16-
from devito.tools import as_tuple, prod
16+
from devito.tools import as_tuple, prod, is_integer
1717
from devito.tools.dtypes_lowering import infer_dtype
1818

1919
__all__ = ['compare_ops', 'estimate_cost', 'has_integer_args', 'sympy_dtype']
@@ -287,13 +287,17 @@ def has_integer_args(*args):
287287
try:
288288
return np.issubdtype(args[0].dtype, np.integer)
289289
except AttributeError:
290-
return args[0].is_integer
290+
return is_integer(args[0])
291291

292292
res = True
293293
for a in args:
294294
try:
295295
if isinstance(a, INT):
296296
res = res and True
297+
elif is_integer(a):
298+
res = res and True
299+
elif has_integer_args(a):
300+
res = res and True
297301
elif len(a.args) > 0:
298302
res = res and has_integer_args(*a.args)
299303
else:

0 commit comments

Comments
 (0)