| # RUN: %PYTHON %s | FileCheck %s |
| |
| from mlir.ir import * |
| from mlir.dialects import transform |
| from mlir.dialects.transform import bufferization |
| from mlir.dialects.bufferization import LayoutMapOption |
| |
| |
| def run(f): |
| with Context(), Location.unknown(): |
| module = Module.create() |
| with InsertionPoint(module.body): |
| print("\nTEST:", f.__name__) |
| f() |
| print(module) |
| return f |
| |
| |
| @run |
| def testEmptyTensorToAllocTensorOpCompact(): |
| sequence = transform.SequenceOp( |
| transform.FailurePropagationMode.Propagate, |
| [], |
| transform.OperationType.get("tensor.empty"), |
| ) |
| with InsertionPoint(sequence.body): |
| bufferization.EmptyTensorToAllocTensorOp(sequence.bodyTarget) |
| transform.YieldOp() |
| # CHECK-LABEL: TEST: testEmptyTensorToAllocTensorOpCompact |
| # CHECK: = transform.bufferization.empty_tensor_to_alloc_tensor |
| # CHECK-SAME: (!transform.op<"tensor.empty">) -> !transform.op<"bufferization.alloc_tensor"> |
| |
| |
| @run |
| def testEmptyTensorToAllocTensorOpTyped(): |
| sequence = transform.SequenceOp( |
| transform.FailurePropagationMode.Propagate, |
| [], |
| transform.OperationType.get("tensor.empty"), |
| ) |
| with InsertionPoint(sequence.body): |
| bufferization.EmptyTensorToAllocTensorOp( |
| transform.OperationType.get("bufferization.alloc_tensor"), |
| sequence.bodyTarget, |
| ) |
| transform.YieldOp() |
| # CHECK-LABEL: TEST: testEmptyTensorToAllocTensorOpTyped |
| # CHECK: = transform.bufferization.empty_tensor_to_alloc_tensor |
| # CHECK-SAME: (!transform.op<"tensor.empty">) -> !transform.op<"bufferization.alloc_tensor"> |
| |
| |
| @run |
| def testOneShotBufferizeOpCompact(): |
| sequence = transform.SequenceOp( |
| transform.FailurePropagationMode.Propagate, [], transform.AnyOpType.get() |
| ) |
| with InsertionPoint(sequence.body): |
| bufferization.OneShotBufferizeOp(sequence.bodyTarget) |
| transform.YieldOp() |
| # CHECK-LABEL: TEST: testOneShotBufferizeOpCompact |
| # CHECK: = transform.bufferization.one_shot_bufferize |
| # CHECK-SAME: (!transform.any_op) -> !transform.any_op |
| |
| |
| @run |
| def testOneShotBufferizeOpTyped(): |
| sequence = transform.SequenceOp( |
| transform.FailurePropagationMode.Propagate, [], transform.AnyOpType.get() |
| ) |
| with InsertionPoint(sequence.body): |
| bufferization.OneShotBufferizeOp( |
| transform.OperationType.get("test.dummy"), |
| sequence.bodyTarget, |
| ) |
| transform.YieldOp() |
| # CHECK-LABEL: TEST: testOneShotBufferizeOpTyped |
| # CHECK: = transform.bufferization.one_shot_bufferize |
| # CHECK-SAME: (!transform.any_op) -> !transform.op<"test.dummy"> |
| |
| |
| @run |
| def testOneShotBufferizeOpAttributes(): |
| sequence = transform.SequenceOp( |
| transform.FailurePropagationMode.Propagate, [], transform.AnyOpType.get() |
| ) |
| with InsertionPoint(sequence.body): |
| bufferization.OneShotBufferizeOp( |
| sequence.bodyTarget, |
| allow_return_allocs_from_loops=True, |
| allow_unknown_ops=True, |
| bufferize_function_boundaries=True, |
| function_boundary_type_conversion=LayoutMapOption.IdentityLayoutMap, |
| memcpy_op="linalg.copy", |
| print_conflicts=True, |
| test_analysis_only=True, |
| ) |
| transform.YieldOp() |
| # CHECK-LABEL: TEST: testOneShotBufferizeOpAttributes |
| # CHECK: = transform.bufferization.one_shot_bufferize |
| # CHECK-SAME: layout{IdentityLayoutMap} |
| # CHECK-SAME: allow_return_allocs_from_loops = true |
| # CHECK-SAME: allow_unknown_ops = true |
| # CHECK-SAME: bufferize_function_boundaries = true |
| # CHECK-SAME: memcpy_op = "linalg.copy" |
| # CHECK-SAME: print_conflicts = true |
| # CHECK-SAME: test_analysis_only = true |
| # CHECK-SAME: (!transform.any_op) -> !transform.any_op |