xref: /llvm-project/mlir/test/python/dialects/transform_bufferization_ext.py (revision 6bf043e7433680c6f4e36393734ef83699b30f14)
1a13c715aSIngo Müller# RUN: %PYTHON %s | FileCheck %s
2a13c715aSIngo Müller
3a13c715aSIngo Müllerfrom mlir.ir import *
4a13c715aSIngo Müllerfrom mlir.dialects import transform
5a13c715aSIngo Müllerfrom mlir.dialects.transform import bufferization
692233062Smaxfrom mlir.dialects.bufferization import LayoutMapOption
7a13c715aSIngo Müller
8a13c715aSIngo Müller
9a13c715aSIngo Müllerdef run(f):
10a13c715aSIngo Müller    with Context(), Location.unknown():
11a13c715aSIngo Müller        module = Module.create()
12a13c715aSIngo Müller        with InsertionPoint(module.body):
13a13c715aSIngo Müller            print("\nTEST:", f.__name__)
14a13c715aSIngo Müller            f()
15a13c715aSIngo Müller        print(module)
16a13c715aSIngo Müller    return f
17a13c715aSIngo Müller
18a13c715aSIngo Müller
19a13c715aSIngo Müller@run
20a13c715aSIngo Müllerdef testEmptyTensorToAllocTensorOpCompact():
21a13c715aSIngo Müller    sequence = transform.SequenceOp(
2292233062Smax        transform.FailurePropagationMode.Propagate,
23a13c715aSIngo Müller        [],
24a13c715aSIngo Müller        transform.OperationType.get("tensor.empty"),
25a13c715aSIngo Müller    )
26a13c715aSIngo Müller    with InsertionPoint(sequence.body):
27a13c715aSIngo Müller        bufferization.EmptyTensorToAllocTensorOp(sequence.bodyTarget)
28a13c715aSIngo Müller        transform.YieldOp()
29a13c715aSIngo Müller    # CHECK-LABEL: TEST: testEmptyTensorToAllocTensorOpCompact
30a13c715aSIngo Müller    # CHECK: = transform.bufferization.empty_tensor_to_alloc_tensor
31a13c715aSIngo Müller    # CHECK-SAME: (!transform.op<"tensor.empty">) -> !transform.op<"bufferization.alloc_tensor">
32a13c715aSIngo Müller
33a13c715aSIngo Müller
34a13c715aSIngo Müller@run
35a13c715aSIngo Müllerdef testEmptyTensorToAllocTensorOpTyped():
36a13c715aSIngo Müller    sequence = transform.SequenceOp(
3792233062Smax        transform.FailurePropagationMode.Propagate,
38a13c715aSIngo Müller        [],
39a13c715aSIngo Müller        transform.OperationType.get("tensor.empty"),
40a13c715aSIngo Müller    )
41a13c715aSIngo Müller    with InsertionPoint(sequence.body):
42a13c715aSIngo Müller        bufferization.EmptyTensorToAllocTensorOp(
43a13c715aSIngo Müller            transform.OperationType.get("bufferization.alloc_tensor"),
44a13c715aSIngo Müller            sequence.bodyTarget,
45a13c715aSIngo Müller        )
46a13c715aSIngo Müller        transform.YieldOp()
47a13c715aSIngo Müller    # CHECK-LABEL: TEST: testEmptyTensorToAllocTensorOpTyped
48a13c715aSIngo Müller    # CHECK: = transform.bufferization.empty_tensor_to_alloc_tensor
49a13c715aSIngo Müller    # CHECK-SAME: (!transform.op<"tensor.empty">) -> !transform.op<"bufferization.alloc_tensor">
50a13c715aSIngo Müller
51a13c715aSIngo Müller
52a13c715aSIngo Müller@run
53a13c715aSIngo Müllerdef testOneShotBufferizeOpCompact():
54a13c715aSIngo Müller    sequence = transform.SequenceOp(
5592233062Smax        transform.FailurePropagationMode.Propagate, [], transform.AnyOpType.get()
56a13c715aSIngo Müller    )
57a13c715aSIngo Müller    with InsertionPoint(sequence.body):
58a13c715aSIngo Müller        bufferization.OneShotBufferizeOp(sequence.bodyTarget)
59a13c715aSIngo Müller        transform.YieldOp()
60a13c715aSIngo Müller    # CHECK-LABEL: TEST: testOneShotBufferizeOpCompact
61a13c715aSIngo Müller    # CHECK: = transform.bufferization.one_shot_bufferize
62a13c715aSIngo Müller    # CHECK-SAME: (!transform.any_op) -> !transform.any_op
63a13c715aSIngo Müller
64a13c715aSIngo Müller
65a13c715aSIngo Müller@run
66a13c715aSIngo Müllerdef testOneShotBufferizeOpTyped():
67a13c715aSIngo Müller    sequence = transform.SequenceOp(
6892233062Smax        transform.FailurePropagationMode.Propagate, [], transform.AnyOpType.get()
69a13c715aSIngo Müller    )
70a13c715aSIngo Müller    with InsertionPoint(sequence.body):
71a13c715aSIngo Müller        bufferization.OneShotBufferizeOp(
72a13c715aSIngo Müller            transform.OperationType.get("test.dummy"),
73a13c715aSIngo Müller            sequence.bodyTarget,
74a13c715aSIngo Müller        )
75a13c715aSIngo Müller        transform.YieldOp()
76a13c715aSIngo Müller    # CHECK-LABEL: TEST: testOneShotBufferizeOpTyped
77a13c715aSIngo Müller    # CHECK: = transform.bufferization.one_shot_bufferize
78a13c715aSIngo Müller    # CHECK-SAME: (!transform.any_op) -> !transform.op<"test.dummy">
79a13c715aSIngo Müller
80a13c715aSIngo Müller
81a13c715aSIngo Müller@run
82a13c715aSIngo Müllerdef testOneShotBufferizeOpAttributes():
83a13c715aSIngo Müller    sequence = transform.SequenceOp(
8492233062Smax        transform.FailurePropagationMode.Propagate, [], transform.AnyOpType.get()
85a13c715aSIngo Müller    )
86a13c715aSIngo Müller    with InsertionPoint(sequence.body):
87a13c715aSIngo Müller        bufferization.OneShotBufferizeOp(
88a13c715aSIngo Müller            sequence.bodyTarget,
89*6bf043e7SMartin Erhart            allow_return_allocs_from_loops=True,
90a13c715aSIngo Müller            allow_unknown_ops=True,
91a13c715aSIngo Müller            bufferize_function_boundaries=True,
9292233062Smax            function_boundary_type_conversion=LayoutMapOption.IdentityLayoutMap,
93f0549017SIngo Müller            memcpy_op="linalg.copy",
94a13c715aSIngo Müller            print_conflicts=True,
95f0549017SIngo Müller            test_analysis_only=True,
96a13c715aSIngo Müller        )
97a13c715aSIngo Müller        transform.YieldOp()
98a13c715aSIngo Müller    # CHECK-LABEL: TEST: testOneShotBufferizeOpAttributes
99a13c715aSIngo Müller    # CHECK: = transform.bufferization.one_shot_bufferize
100f0549017SIngo Müller    # CHECK-SAME: layout{IdentityLayoutMap}
101*6bf043e7SMartin Erhart    # CHECK-SAME: allow_return_allocs_from_loops = true
102a13c715aSIngo Müller    # CHECK-SAME: allow_unknown_ops = true
103a13c715aSIngo Müller    # CHECK-SAME: bufferize_function_boundaries = true
104f0549017SIngo Müller    # CHECK-SAME: memcpy_op = "linalg.copy"
105a13c715aSIngo Müller    # CHECK-SAME: print_conflicts = true
106a13c715aSIngo Müller    # CHECK-SAME: test_analysis_only = true
107a13c715aSIngo Müller    # CHECK-SAME: (!transform.any_op) -> !transform.any_op
108