Skip to content

Commit 1331eb5

Browse files
committed
compiler: Refactor func table specialization to use a visitor
1 parent 1910bc3 commit 1331eb5

1 file changed

Lines changed: 14 additions & 17 deletions

File tree

devito/ir/iet/visitors.py

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1526,6 +1526,18 @@ def __init__(self, mapper, nested=False):
15261526
f"specialization. Value {v} was supplied for symbol "
15271527
f"{k}, but is of type {type(v)}.")
15281528

1529+
def visit_OrderedDict(self, o):
1530+
return OrderedDict((k, self._visit(v)) for k, v in o.items())
1531+
1532+
def visit_MetaCall(self, o):
1533+
root = self._visit(o.root)
1534+
return MetaCall(root=root, local=o.local)
1535+
1536+
def visit_Callable(self, o):
1537+
body = self._visit(o.body)
1538+
parameters = [i for i in o.parameters if i not in self.mapper]
1539+
return o._rebuild(body=body, parameters=parameters)
1540+
15291541
def visit_KernelLaunch(self, o):
15301542
# Remove kernel args if they are to be hardcoded
15311543
arguments = [i for i in o.arguments if i not in self.mapper]
@@ -1554,23 +1566,8 @@ def visit_Operator(self, o, **kwargs):
15541566
state = o.__getstate__()
15551567
state['parameters'] = parameters
15561568
state['body'] = body
1557-
1558-
# TODO: Also rebuild the _func_table for the Operator
1559-
# TODO: This is somewhat incongruent with the visitor and should be refactored
1560-
1561-
func_table = OrderedDict()
1562-
for k, v in o._func_table.items():
1563-
root = v.root
1564-
local = v.local
1565-
1566-
body = self._visit(root.body)
1567-
parameters = tuple(i for i in root.parameters if i not in self.mapper)
1568-
1569-
new_root = root._rebuild(body=body, parameters=parameters)
1570-
1571-
func_table[k] = MetaCall(root=new_root, local=local)
1572-
1573-
state['_func_table'] = func_table
1569+
# Modify the _func_table to ensure callbacks are specialized
1570+
state['_func_table'] = self._visit(o._func_table)
15741571

15751572
try:
15761573
state.pop('ccode')

0 commit comments

Comments
 (0)