// RUN: mlir-vulkan-runner %s --shared-libs=%vulkan-runtime-wrappers,%mlir_runner_utils --entry-point-result=void | FileCheck %s // CHECK-COUNT-64: [3, 3, 3, 3, 3, 3, 3, 3] module attributes { gpu.container_module, spirv.target_env = #spirv.target_env< #spirv.vce, #spirv.resource_limits<>> } { gpu.module @kernels { gpu.func @kernel_addi(%arg0 : memref<8xi8>, %arg1 : memref<8x8xi8>, %arg2 : memref<8x8x8xi32>) kernel attributes { spirv.entry_point_abi = #spirv.entry_point_abi} { %x = gpu.block_id x %y = gpu.block_id y %z = gpu.block_id z %0 = memref.load %arg0[%x] : memref<8xi8> %1 = memref.load %arg1[%y, %x] : memref<8x8xi8> %2 = arith.addi %0, %1 : i8 %3 = arith.extui %2 : i8 to i32 memref.store %3, %arg2[%z, %y, %x] : memref<8x8x8xi32> gpu.return } } func.func @main() { %arg0 = memref.alloc() : memref<8xi8> %arg1 = memref.alloc() : memref<8x8xi8> %arg2 = memref.alloc() : memref<8x8x8xi32> %value0 = arith.constant 0 : i32 %value1 = arith.constant 1 : i8 %value2 = arith.constant 2 : i8 %arg3 = memref.cast %arg0 : memref<8xi8> to memref %arg4 = memref.cast %arg1 : memref<8x8xi8> to memref %arg5 = memref.cast %arg2 : memref<8x8x8xi32> to memref call @fillResource1DInt8(%arg3, %value1) : (memref, i8) -> () call @fillResource2DInt8(%arg4, %value2) : (memref, i8) -> () call @fillResource3DInt(%arg5, %value0) : (memref, i32) -> () %cst1 = arith.constant 1 : index %cst8 = arith.constant 8 : index gpu.launch_func @kernels::@kernel_addi blocks in (%cst8, %cst8, %cst8) threads in (%cst1, %cst1, %cst1) args(%arg0 : memref<8xi8>, %arg1 : memref<8x8xi8>, %arg2 : memref<8x8x8xi32>) %arg6 = memref.cast %arg5 : memref to memref<*xi32> call @printMemrefI32(%arg6) : (memref<*xi32>) -> () return } func.func private @fillResource1DInt8(%0 : memref, %1 : i8) func.func private @fillResource2DInt8(%0 : memref, %1 : i8) func.func private @fillResource3DInt(%0 : memref, %1 : i32) func.func private @printMemrefI32(%ptr : memref<*xi32>) }