From 0db848fcd4fe9b48d4b57f400981c08a671ef290 Mon Sep 17 00:00:00 2001 From: JDBetteridge Date: Mon, 22 Jun 2026 18:53:03 +0000 Subject: [PATCH 1/2] compiler: Add buffer to kwargs --- devito/passes/clusters/buffering.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/devito/passes/clusters/buffering.py b/devito/passes/clusters/buffering.py index 5f72b8d746..716aaa8f3e 100644 --- a/devito/passes/clusters/buffering.py +++ b/devito/passes/clusters/buffering.py @@ -431,7 +431,7 @@ def generate_buffers(clusters, key, sregistry, options, **kwargs): buffer, = buffers xd = buffer.indices[dim] # The new buffer is derived from `buffer`, so it inherits its padding policy - extra_kwargs = {'is_autopaddable': buffer.is_autopaddable} + extra_kwargs = {'is_autopaddable': buffer.is_autopaddable, 'buffer': buffer} else: size = infer_buffer_size(f, dim, clusters) @@ -459,6 +459,7 @@ def generate_buffers(clusters, key, sregistry, options, **kwargs): dimensions[dimensions.index(dim)] = xd # Finally create the actual buffer + ## Better refactor: stash callback on original `f` cls = callback or Array name = sregistry.make_name(prefix=f'{f.name}b') mapper[f] = cls(name=name, dimensions=dimensions, dtype=f.dtype, From 6a2a225399640c189871e76c821f5964f0a55409 Mon Sep 17 00:00:00 2001 From: JDBetteridge Date: Thu, 16 Jul 2026 14:55:25 +0000 Subject: [PATCH 2/2] compiler: Use buffer indices if available --- devito/passes/clusters/buffering.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/devito/passes/clusters/buffering.py b/devito/passes/clusters/buffering.py index 716aaa8f3e..ba6f30a1ce 100644 --- a/devito/passes/clusters/buffering.py +++ b/devito/passes/clusters/buffering.py @@ -176,7 +176,12 @@ def callback(self, clusters, prefix): accesses = chain(*[c.scope[v.f] for c in v.clusters]) index_mapper = {i: mds[(v.xd, i)] for i in v.indices} for a in accesses: - subs[a.access] = b.indexed[[index_mapper.get(i, i) for i in a]] + indices = [index_mapper.get(i, i) for i in a] + try: + indices = b._buffer_indices(indices) + except AttributeError: + pass + subs[a.access] = b.indexed[indices] processed = [] for c in clusters: