Skip to content

Canonicalize

canonicalize

CanonicalizationRewritePattern

Bases: RewritePattern

Rewrite pattern that applies a canonicalization pattern.

Source code in xdsl/transforms/canonicalize.py
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class CanonicalizationRewritePattern(RewritePattern):
    """Rewrite pattern that applies a canonicalization pattern."""

    def match_and_rewrite(self, op: Operation, rewriter: PatternRewriter, /):
        traits = op.get_traits_of_type(HasCanonicalizationPatternsTrait)
        if not traits:
            return
        patterns = tuple(
            pattern for trait in traits for pattern in trait.get_patterns(type(op))
        )
        if len(patterns) == 1:
            patterns[0].match_and_rewrite(op, rewriter)
            return
        GreedyRewritePatternApplier(list(patterns)).match_and_rewrite(op, rewriter)

match_and_rewrite(op: Operation, rewriter: PatternRewriter)

Source code in xdsl/transforms/canonicalize.py
18
19
20
21
22
23
24
25
26
27
28
def match_and_rewrite(self, op: Operation, rewriter: PatternRewriter, /):
    traits = op.get_traits_of_type(HasCanonicalizationPatternsTrait)
    if not traits:
        return
    patterns = tuple(
        pattern for trait in traits for pattern in trait.get_patterns(type(op))
    )
    if len(patterns) == 1:
        patterns[0].match_and_rewrite(op, rewriter)
        return
    GreedyRewritePatternApplier(list(patterns)).match_and_rewrite(op, rewriter)

CanonicalizePass dataclass

Bases: ModulePass

Applies all canonicalization patterns.

Source code in xdsl/transforms/canonicalize.py
31
32
33
34
35
36
37
38
39
40
41
42
class CanonicalizePass(ModulePass):
    """
    Applies all canonicalization patterns.
    """

    name = "canonicalize"

    def apply(self, ctx: Context, op: builtin.ModuleOp) -> None:
        pattern = GreedyRewritePatternApplier(
            [RemoveUnusedOperations(), CanonicalizationRewritePattern()]
        )
        PatternRewriteWalker(pattern, post_walk_func=region_dce).rewrite_module(op)

name = 'canonicalize' class-attribute instance-attribute

apply(ctx: Context, op: builtin.ModuleOp) -> None

Source code in xdsl/transforms/canonicalize.py
38
39
40
41
42
def apply(self, ctx: Context, op: builtin.ModuleOp) -> None:
    pattern = GreedyRewritePatternApplier(
        [RemoveUnusedOperations(), CanonicalizationRewritePattern()]
    )
    PatternRewriteWalker(pattern, post_walk_func=region_dce).rewrite_module(op)