14cd1b66dSMatthias Springer# RUN: %PYTHON %s | FileCheck %s
24cd1b66dSMatthias Springer
34cd1b66dSMatthias Springerfrom mlir.ir import *
44cd1b66dSMatthias Springerimport mlir.dialects.builtin as builtin
523aa5a74SRiver Riddleimport mlir.dialects.func as func
64cd1b66dSMatthias Springerimport mlir.dialects.vector as vector
74cd1b66dSMatthias Springer
84cd1b66dSMatthias Springerdef run(f):
94cd1b66dSMatthias Springer  print("\nTEST:", f.__name__)
106981e5ecSAlex Zinenko  with Context(), Location.unknown():
114cd1b66dSMatthias Springer    f()
126981e5ecSAlex Zinenko  return f
134cd1b66dSMatthias Springer
144cd1b66dSMatthias Springer# CHECK-LABEL: TEST: testPrintOp
154cd1b66dSMatthias Springer@run
164cd1b66dSMatthias Springerdef testPrintOp():
174cd1b66dSMatthias Springer  module = Module.create()
184cd1b66dSMatthias Springer  with InsertionPoint(module.body):
196981e5ecSAlex Zinenko
2036550692SRiver Riddle    @func.FuncOp.from_py_func(VectorType.get((12, 5), F32Type.get()))
214cd1b66dSMatthias Springer    def print_vector(arg):
224cd1b66dSMatthias Springer      return vector.PrintOp(arg)
234cd1b66dSMatthias Springer
244cd1b66dSMatthias Springer  # CHECK-LABEL: func @print_vector(
254cd1b66dSMatthias Springer  # CHECK-SAME:                     %[[ARG:.*]]: vector<12x5xf32>) {
264cd1b66dSMatthias Springer  #       CHECK:   vector.print %[[ARG]] : vector<12x5xf32>
274cd1b66dSMatthias Springer  #       CHECK:   return
284cd1b66dSMatthias Springer  #       CHECK: }
294cd1b66dSMatthias Springer  print(module)
306981e5ecSAlex Zinenko
316981e5ecSAlex Zinenko
326981e5ecSAlex Zinenko# CHECK-LABEL: TEST: testTransferReadOp
336981e5ecSAlex Zinenko@run
346981e5ecSAlex Zinenkodef testTransferReadOp():
356981e5ecSAlex Zinenko  module = Module.create()
366981e5ecSAlex Zinenko  with InsertionPoint(module.body):
376981e5ecSAlex Zinenko    vector_type = VectorType.get([2, 3], F32Type.get())
386981e5ecSAlex Zinenko    memref_type = MemRefType.get([-1, -1], F32Type.get())
396981e5ecSAlex Zinenko    index_type = IndexType.get()
406981e5ecSAlex Zinenko    mask_type = VectorType.get(vector_type.shape, IntegerType.get_signless(1))
416981e5ecSAlex Zinenko    identity_map = AffineMap.get_identity(vector_type.rank)
426981e5ecSAlex Zinenko    identity_map_attr = AffineMapAttr.get(identity_map)
4336550692SRiver Riddle    f = func.FuncOp("transfer_read",
446981e5ecSAlex Zinenko                          ([memref_type, index_type,
456981e5ecSAlex Zinenko                            F32Type.get(), mask_type], []))
4623aa5a74SRiver Riddle    with InsertionPoint(f.add_entry_block()):
4723aa5a74SRiver Riddle      A, zero, padding, mask = f.arguments
486981e5ecSAlex Zinenko      vector.TransferReadOp(vector_type, A, [zero, zero], identity_map_attr,
49*9b79f50bSJeremy Furtek                            padding, mask=mask)
506981e5ecSAlex Zinenko      vector.TransferReadOp(vector_type, A, [zero, zero], identity_map_attr,
51*9b79f50bSJeremy Furtek                            padding)
5223aa5a74SRiver Riddle      func.ReturnOp([])
536981e5ecSAlex Zinenko
546981e5ecSAlex Zinenko  # CHECK: @transfer_read(%[[MEM:.*]]: memref<?x?xf32>, %[[IDX:.*]]: index,
556981e5ecSAlex Zinenko  # CHECK: %[[PAD:.*]]: f32, %[[MASK:.*]]: vector<2x3xi1>)
566981e5ecSAlex Zinenko  # CHECK: vector.transfer_read %[[MEM]][%[[IDX]], %[[IDX]]], %[[PAD]], %[[MASK]]
576981e5ecSAlex Zinenko  # CHECK: vector.transfer_read %[[MEM]][%[[IDX]], %[[IDX]]], %[[PAD]]
586981e5ecSAlex Zinenko  # CHECK-NOT: %[[MASK]]
596981e5ecSAlex Zinenko  print(module)
60