| # RUN: %PYTHON %s | FileCheck %s | |
| from mlir.ir import * | |
| import mlir.dialects.builtin as builtin | |
| import mlir.dialects.func as func | |
| import mlir.dialects.vector as vector | |
| def run(f): | |
| print("\nTEST:", f.__name__) | |
| with Context(), Location.unknown(): | |
| f() | |
| return f | |
| # CHECK-LABEL: TEST: testPrintOp | |
| @run | |
| def testPrintOp(): | |
| module = Module.create() | |
| with InsertionPoint(module.body): | |
| @func.FuncOp.from_py_func(VectorType.get((12, 5), F32Type.get())) | |
| def print_vector(arg): | |
| return vector.PrintOp(source=arg) | |
| # CHECK-LABEL: func @print_vector( | |
| # CHECK-SAME: %[[ARG:.*]]: vector<12x5xf32>) { | |
| # CHECK: vector.print %[[ARG]] : vector<12x5xf32> | |
| # CHECK: return | |
| # CHECK: } | |
| print(module) | |
| # CHECK-LABEL: TEST: testTransferReadOp | |
| @run | |
| def testTransferReadOp(): | |
| module = Module.create() | |
| with InsertionPoint(module.body): | |
| vector_type = VectorType.get([2, 3], F32Type.get()) | |
| memref_type = MemRefType.get( | |
| [ShapedType.get_dynamic_size(), ShapedType.get_dynamic_size()], | |
| F32Type.get(), | |
| ) | |
| index_type = IndexType.get() | |
| mask_type = VectorType.get(vector_type.shape, IntegerType.get_signless(1)) | |
| identity_map = AffineMap.get_identity(vector_type.rank) | |
| identity_map_attr = AffineMapAttr.get(identity_map) | |
| f = func.FuncOp( | |
| "transfer_read", ([memref_type, index_type, F32Type.get(), mask_type], []) | |
| ) | |
| with InsertionPoint(f.add_entry_block()): | |
| A, zero, padding, mask = f.arguments | |
| vector.TransferReadOp( | |
| vector_type, | |
| A, | |
| [zero, zero], | |
| identity_map_attr, | |
| padding, | |
| [False, False], | |
| mask=mask, | |
| ) | |
| vector.TransferReadOp( | |
| vector_type, A, [zero, zero], identity_map_attr, padding, [False, False] | |
| ) | |
| func.ReturnOp([]) | |
| # CHECK: @transfer_read(%[[MEM:.*]]: memref<?x?xf32>, %[[IDX:.*]]: index, | |
| # CHECK: %[[PAD:.*]]: f32, %[[MASK:.*]]: vector<2x3xi1>) | |
| # CHECK: vector.transfer_read %[[MEM]][%[[IDX]], %[[IDX]]], %[[PAD]], %[[MASK]] | |
| # CHECK: vector.transfer_read %[[MEM]][%[[IDX]], %[[IDX]]], %[[PAD]] | |
| # CHECK-NOT: %[[MASK]] | |
| print(module) | |
| # CHECK-LABEL: TEST: testBitEnumCombiningKind | |
| @run | |
| def testBitEnumCombiningKind(): | |
| module = Module.create() | |
| with InsertionPoint(module.body): | |
| f32 = F32Type.get() | |
| vector_type = VectorType.get([16], f32) | |
| @func.FuncOp.from_py_func(vector_type) | |
| def reduction(arg): | |
| v = vector.ReductionOp(f32, vector.CombiningKind.ADD, arg) | |
| return v | |
| # CHECK: func.func @reduction(%[[VEC:.*]]: vector<16xf32>) -> f32 { | |
| # CHECK: %0 = vector.reduction <add>, %[[VEC]] : vector<16xf32> into f32 | |
| print(module) |