19f3f6d7bSStella Laurenzo# RUN: %PYTHON %s | FileCheck %s
29f3f6d7bSStella Laurenzo
39f3f6d7bSStella Laurenzofrom mlir.ir import *
423aa5a74SRiver Riddleimport mlir.dialects.func as func
59f3f6d7bSStella Laurenzoimport mlir.dialects.memref as memref
69f3f6d7bSStella Laurenzo
7a54f4eaeSMogball
89f3f6d7bSStella Laurenzodef run(f):
99f3f6d7bSStella Laurenzo  print("\nTEST:", f.__name__)
109f3f6d7bSStella Laurenzo  f()
117fd6f40dSAlex Zinenko  return f
129f3f6d7bSStella Laurenzo
13a54f4eaeSMogball
149f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testSubViewAccessors
157fd6f40dSAlex Zinenko@run
169f3f6d7bSStella Laurenzodef testSubViewAccessors():
179f3f6d7bSStella Laurenzo  ctx = Context()
18a54f4eaeSMogball  module = Module.parse(
19a54f4eaeSMogball      r"""
20*2310ced8SRiver Riddle    func.func @f1(%arg0: memref<?x?xf32>) {
21a54f4eaeSMogball      %0 = arith.constant 0 : index
22a54f4eaeSMogball      %1 = arith.constant 1 : index
23a54f4eaeSMogball      %2 = arith.constant 2 : index
24a54f4eaeSMogball      %3 = arith.constant 3 : index
25a54f4eaeSMogball      %4 = arith.constant 4 : index
26a54f4eaeSMogball      %5 = arith.constant 5 : index
279f3f6d7bSStella Laurenzo      memref.subview %arg0[%0, %1][%2, %3][%4, %5] : memref<?x?xf32> to memref<?x?xf32, offset: ?, strides: [?, ?]>
289f3f6d7bSStella Laurenzo      return
299f3f6d7bSStella Laurenzo    }
309f3f6d7bSStella Laurenzo  """, ctx)
319f3f6d7bSStella Laurenzo  func_body = module.body.operations[0].regions[0].blocks[0]
329f3f6d7bSStella Laurenzo  subview = func_body.operations[6]
339f3f6d7bSStella Laurenzo
349f3f6d7bSStella Laurenzo  assert subview.source == subview.operands[0]
359f3f6d7bSStella Laurenzo  assert len(subview.offsets) == 2
369f3f6d7bSStella Laurenzo  assert len(subview.sizes) == 2
379f3f6d7bSStella Laurenzo  assert len(subview.strides) == 2
389f3f6d7bSStella Laurenzo  assert subview.result == subview.results[0]
399f3f6d7bSStella Laurenzo
409f3f6d7bSStella Laurenzo  # CHECK: SubViewOp
419f3f6d7bSStella Laurenzo  print(type(subview).__name__)
429f3f6d7bSStella Laurenzo
439f3f6d7bSStella Laurenzo  # CHECK: constant 0
449f3f6d7bSStella Laurenzo  print(subview.offsets[0])
459f3f6d7bSStella Laurenzo  # CHECK: constant 1
469f3f6d7bSStella Laurenzo  print(subview.offsets[1])
479f3f6d7bSStella Laurenzo  # CHECK: constant 2
489f3f6d7bSStella Laurenzo  print(subview.sizes[0])
499f3f6d7bSStella Laurenzo  # CHECK: constant 3
509f3f6d7bSStella Laurenzo  print(subview.sizes[1])
519f3f6d7bSStella Laurenzo  # CHECK: constant 4
529f3f6d7bSStella Laurenzo  print(subview.strides[0])
539f3f6d7bSStella Laurenzo  # CHECK: constant 5
549f3f6d7bSStella Laurenzo  print(subview.strides[1])
559f3f6d7bSStella Laurenzo
569f3f6d7bSStella Laurenzo
577fd6f40dSAlex Zinenko# CHECK-LABEL: TEST: testCustomBuidlers
587fd6f40dSAlex Zinenko@run
597fd6f40dSAlex Zinenkodef testCustomBuidlers():
607fd6f40dSAlex Zinenko  with Context() as ctx, Location.unknown(ctx):
617fd6f40dSAlex Zinenko    module = Module.parse(r"""
62*2310ced8SRiver Riddle      func.func @f1(%arg0: memref<?x?xf32>, %arg1: index, %arg2: index) {
637fd6f40dSAlex Zinenko        return
647fd6f40dSAlex Zinenko      }
657fd6f40dSAlex Zinenko    """)
6623aa5a74SRiver Riddle    f = module.body.operations[0]
6723aa5a74SRiver Riddle    func_body = f.regions[0].blocks[0]
687fd6f40dSAlex Zinenko    with InsertionPoint.at_block_terminator(func_body):
6923aa5a74SRiver Riddle      memref.LoadOp(f.arguments[0], f.arguments[1:])
707fd6f40dSAlex Zinenko
717fd6f40dSAlex Zinenko    # CHECK: func @f1(%[[ARG0:.*]]: memref<?x?xf32>, %[[ARG1:.*]]: index, %[[ARG2:.*]]: index)
727fd6f40dSAlex Zinenko    # CHECK: memref.load %[[ARG0]][%[[ARG1]], %[[ARG2]]]
737fd6f40dSAlex Zinenko    print(module)
74a04c0b7eSAlex Zinenko    assert module.operation.verify()
75