Skip to content

Commit d6fcbd9

Browse files
committed
compiler: Avoid CSE across Reserved keywords
1 parent cc4a53f commit d6fcbd9

3 files changed

Lines changed: 23 additions & 9 deletions

File tree

devito/passes/clusters/cse.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@
1313

1414
from devito.finite_differences.differentiable import IndexDerivative
1515
from devito.ir import Cluster, Scope, cluster_pass
16-
from devito.symbolics import estimate_cost, q_leaf, q_terminal
16+
from devito.symbolics import Reserved, estimate_cost, q_leaf, q_terminal, search
1717
from devito.symbolics.manipulation import _uxreplace
18-
from devito.symbolics.search import search
1918
from devito.tools import DAG, as_list, as_tuple, extract_dtype, frozendict
2019
from devito.types import Eq, Symbol, Temp
2120

@@ -399,6 +398,7 @@ def _(expr):
399398

400399
@_catch.register(Indexed)
401400
@_catch.register(Symbol)
401+
@_catch.register(Reserved)
402402
def _(expr):
403403
"""
404404
Handler for objects preventing CSE to propagate through their arguments.

devito/symbolics/extended_sympy.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
from devito.types.basic import Basic
2020

2121
__all__ = ['CondEq', 'CondNe', 'BitwiseNot', 'BitwiseXor', 'BitwiseAnd', # noqa
22-
'LeftShift', 'RightShift', 'IntDiv', 'CallFromPointer',
22+
'LeftShift', 'RightShift', 'IntDiv', 'CallFromPointer',
2323
'CallFromComposite', 'FieldFromPointer', 'FieldFromComposite',
2424
'ListInitializer', 'Byref', 'IndexedPointer', 'Cast', 'DefFunction',
25-
'MathFunction', 'InlineIf', 'ReservedWord', 'Keyword', 'String',
26-
'Macro', 'Class', 'MacroArgument', 'Deref', 'Namespace', 'Rvalue',
27-
'Null', 'SizeOf', 'rfunc', 'BasicWrapperMixin', 'ValueLimit',
25+
'MathFunction', 'InlineIf', 'Reserved', 'ReservedWord', 'Keyword',
26+
'String', 'Macro', 'Class', 'MacroArgument', 'Deref', 'Namespace',
27+
'Rvalue', 'Null', 'SizeOf', 'rfunc', 'BasicWrapperMixin', 'ValueLimit',
2828
'VectorAccess']
2929

3030

@@ -533,7 +533,21 @@ def __str__(self):
533533
__reduce_ex__ = Pickable.__reduce_ex__
534534

535535

536-
class ReservedWord(sympy.Atom, Pickable):
536+
class Reserved(Pickable):
537+
538+
"""
539+
A base class for all reserved words used throughout the lowering process,
540+
including the final stage of code generation itself.
541+
542+
Reserved objects have the following properties:
543+
544+
* `estimate_cost(o) = 0`, where `o` is an instance of Reserved
545+
"""
546+
547+
pass
548+
549+
550+
class ReservedWord(sympy.Atom, Reserved):
537551

538552
"""
539553
A `ReservedWord` carries a value that has special meaning in the

devito/symbolics/inspection.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from devito.logger import warning
1212
from devito.symbolics.extended_dtypes import INT
1313
from devito.symbolics.extended_sympy import (
14-
CallFromPointer, Cast, DefFunction, ReservedWord
14+
CallFromPointer, Cast, DefFunction, Reserved
1515
)
1616
from devito.symbolics.queries import q_routine
1717
from devito.tools import as_tuple, is_integer, prod
@@ -179,7 +179,7 @@ def _(expr, estimate, seen):
179179

180180
@_estimate_cost.register(ImaginaryUnit)
181181
@_estimate_cost.register(Number)
182-
@_estimate_cost.register(ReservedWord)
182+
@_estimate_cost.register(Reserved)
183183
def _(expr, estimate, seen):
184184
return 0, False
185185

0 commit comments

Comments
 (0)