brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · c94aeac Raw
108 lines · plain
1// RUN: mlir-opt %s -pass-pipeline="builtin.module(func.func(convert-arith-to-llvm),finalize-memref-to-llvm,convert-func-to-llvm,reconcile-unrealized-casts)" | mlir-runner -e main -entry-point-result=void -shared-libs=%mlir_runner_utils,%mlir_c_runner_utils | FileCheck %s2 3func.func private @printMemrefF32(memref<*xf32>) attributes { llvm.emit_c_interface }4func.func private @printMemrefI32(memref<*xi32>) attributes { llvm.emit_c_interface }5func.func private @printNewline() -> ()6 7memref.global "private" @gv0 : memref<4xf32> = dense<[0.0, 1.0, 2.0, 3.0]>8func.func @test1DMemref() {9  %0 = memref.get_global @gv0 : memref<4xf32>10  %U = memref.cast %0 : memref<4xf32> to memref<*xf32>11  // CHECK: rank = 112  // CHECK: offset = 013  // CHECK: sizes = [4]14  // CHECK: strides = [1]15  // CHECK: [0,  1,  2,  3]16  call @printMemrefF32(%U) : (memref<*xf32>) -> ()17  call @printNewline() : () -> ()18 19  // Overwrite some of the elements.20  %c0 = arith.constant 0 : index21  %c2 = arith.constant 2 : index22  %fp0 = arith.constant 4.0 : f3223  %fp1 = arith.constant 5.0 : f3224  memref.store %fp0, %0[%c0] : memref<4xf32>25  memref.store %fp1, %0[%c2] : memref<4xf32>26  // CHECK: rank = 127  // CHECK: offset = 028  // CHECK: sizes = [4]29  // CHECK: strides = [1]30  // CHECK: [4,  1,  5,  3]31  call @printMemrefF32(%U) : (memref<*xf32>) -> ()32  call @printNewline() : () -> ()33  return34}35 36memref.global constant @gv1 : memref<3x2xi32> = dense<[[0, 1],[2, 3],[4, 5]]>37func.func @testConstantMemref() {38  %0 = memref.get_global @gv1 : memref<3x2xi32>39  %U = memref.cast %0 : memref<3x2xi32> to memref<*xi32>40  // CHECK: rank = 241  // CHECK: offset = 042  // CHECK: sizes = [3, 2]43  // CHECK: strides = [2, 1]44  // CHECK: [0,   1]45  // CHECK: [2,   3]46  // CHECK: [4,   5]47  call @printMemrefI32(%U) : (memref<*xi32>) -> ()48  call @printNewline() : () -> ()49  return50}51 52memref.global "private" @gv2 : memref<4x2xf32> = dense<[[0.0, 1.0], [2.0, 3.0], [4.0, 5.0], [6.0, 7.0]]>53func.func @test2DMemref() {54  %0 = memref.get_global @gv2 : memref<4x2xf32>55  %U = memref.cast %0 : memref<4x2xf32> to memref<*xf32>56  // CHECK: rank = 257  // CHECK: offset = 058  // CHECK: sizes = [4, 2]59  // CHECK: strides = [2, 1]60  // CHECK: [0,   1]61  // CHECK: [2,   3]62  // CHECK: [4,   5]63  // CHECK: [6,   7]64  call @printMemrefF32(%U) : (memref<*xf32>) -> ()65  call @printNewline() : () -> ()66 67  // Overwrite the 1.0 (at index [0, 1]) with 10.068  %c0 = arith.constant 0 : index69  %c1 = arith.constant 1 : index70  %fp10 = arith.constant 10.0 : f3271  memref.store %fp10, %0[%c0, %c1] : memref<4x2xf32>72  // CHECK: rank = 273  // CHECK: offset = 074  // CHECK: sizes = [4, 2]75  // CHECK: strides = [2, 1]76  // CHECK: [0,   10]77  // CHECK: [2,   3]78  // CHECK: [4,   5]79  // CHECK: [6,   7]80  call @printMemrefF32(%U) : (memref<*xf32>) -> ()81  call @printNewline() : () -> ()82  return83}84 85memref.global @gv3 : memref<i32> = dense<11>86func.func @testScalarMemref() {87  %0 = memref.get_global @gv3 : memref<i32>88  %U = memref.cast %0 : memref<i32> to memref<*xi32>89  // CHECK: rank = 090  // CHECK: offset = 091  // CHECK: sizes = []92  // CHECK: strides = []93  // CHECK: [11]94  call @printMemrefI32(%U) : (memref<*xi32>) -> ()95  call @printNewline() : () -> ()96  return97}98 99func.func @main() -> () {100  call @test1DMemref() : () -> ()101  call @testConstantMemref() : () -> ()102  call @test2DMemref() : () -> ()103  call @testScalarMemref() : () -> ()104  return105}106 107 108