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