Skip to content

X86 infer broadcast

x86_infer_broadcast

DS_VpbroadcastqOpScalarLoad

Bases: RewritePattern

Source code in xdsl/transforms/x86_infer_broadcast.py
15
16
17
18
19
20
21
22
23
24
25
26
class DS_VpbroadcastqOpScalarLoad(RewritePattern):
    @op_type_rewrite_pattern
    def match_and_rewrite(
        self, op: x86.DS_VpbroadcastqOp, rewriter: PatternRewriter
    ) -> None:
        if isinstance(mov_op := op.source.owner, x86.ops.DM_MovOp):
            rewriter.replace_op(
                op,
                x86.DM_VbroadcastsdOp(
                    mov_op.memory, mov_op.memory_offset, destination=op.destination.type
                ),
            )

match_and_rewrite(op: x86.DS_VpbroadcastqOp, rewriter: PatternRewriter) -> None

Source code in xdsl/transforms/x86_infer_broadcast.py
16
17
18
19
20
21
22
23
24
25
26
@op_type_rewrite_pattern
def match_and_rewrite(
    self, op: x86.DS_VpbroadcastqOp, rewriter: PatternRewriter
) -> None:
    if isinstance(mov_op := op.source.owner, x86.ops.DM_MovOp):
        rewriter.replace_op(
            op,
            x86.DM_VbroadcastsdOp(
                mov_op.memory, mov_op.memory_offset, destination=op.destination.type
            ),
        )

X86InferBroadcast dataclass

Bases: ModulePass

Rewrites a scalar load + broadcast to a broadcast load operation.

Source code in xdsl/transforms/x86_infer_broadcast.py
29
30
31
32
33
34
35
36
37
38
39
40
41
@dataclass(frozen=True)
class X86InferBroadcast(ModulePass):
    """
    Rewrites a scalar load + broadcast to a broadcast load operation.
    """

    name = "x86-infer-broadcast"

    def apply(self, ctx: Context, op: ModuleOp) -> None:
        PatternRewriteWalker(
            DS_VpbroadcastqOpScalarLoad(),
            apply_recursively=False,
        ).rewrite_module(op)

name = 'x86-infer-broadcast' class-attribute instance-attribute

__init__() -> None

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

Source code in xdsl/transforms/x86_infer_broadcast.py
37
38
39
40
41
def apply(self, ctx: Context, op: ModuleOp) -> None:
    PatternRewriteWalker(
        DS_VpbroadcastqOpScalarLoad(),
        apply_recursively=False,
    ).rewrite_module(op)