// RUN: mlir-opt %s -convert-loop-op-to-gpu -gpu-num-workgroups=2,16 -gpu-workgroup-size=32,4 | FileCheck %s module { func @fmul(%arg0: memref, %arg1: memref, %arg2: memref) { %c1 = constant 1 : index %c0 = constant 0 : index %c2 = constant 2 : index %0 = dim %arg0, 0 : memref %1 = dim %arg0, 1 : memref // CHECK-LABEL: gpu.launch // CHECK: loop.for // CHECK: loop.for // CHECK: loop.for // CHECK: loop.for // CHECK: load // CHECK: load // CHECK: load // CHECK: mulf // CHECK: store loop.for %arg3 = %c0 to %0 step %c2 { loop.for %arg4 = %c0 to %1 step %c2 { %4 = std.subview %arg0[%arg3, %arg4][%c2, %c2][%c1, %c1] : memref to memref %7 = std.subview %arg1[%arg3, %arg4][%c2, %c2][%c1, %c1] : memref to memref %10 = std.subview %arg2[%arg3, %arg4][%c2, %c2][%c1, %c1] : memref to memref %11 = dim %4, 0 : memref %12 = dim %4, 1 : memref loop.for %arg5 = %c0 to %11 step %c1 { loop.for %arg6 = %c0 to %12 step %c1 { %13 = load %4[%arg5, %arg6] : memref %14 = load %7[%arg5, %arg6] : memref %15 = load %10[%arg5, %arg6] : memref %16 = mulf %13, %14 : f32 store %16, %10[%arg5, %arg6] : memref } } } } return } }