40 lines · plain
1// RUN: mlir-opt %s --gpu-to-llvm | FileCheck %s2 3module attributes {gpu.container_module} {4 5 // CHECK: func @foo6 func.func @foo(%dst : memref<7xf32, 1>, %src : memref<7xf32>) {7 // CHECK: %[[t0:.*]] = llvm.call @mgpuStreamCreate8 %t0 = gpu.wait async9 // CHECK: %[[size_bytes:.*]] = llvm.ptrtoint10 // CHECK-NOT: llvm.addrspacecast11 // CHECK: %[[addr_cast:.*]] = llvm.addrspacecast12 // CHECK: llvm.call @mgpuMemcpy(%[[addr_cast]], %{{.*}}, %[[size_bytes]], %[[t0]])13 %t1 = gpu.memcpy async [%t0] %dst, %src : memref<7xf32, 1>, memref<7xf32>14 // CHECK: llvm.call @mgpuStreamSynchronize(%[[t0]])15 // CHECK: llvm.call @mgpuStreamDestroy(%[[t0]])16 gpu.wait [%t1]17 return18 }19}20 21// -----22 23module attributes {gpu.container_module} {24 25 // CHECK: func @dynamic26 func.func @dynamic(%dst : memref<?x?xf32, 1>, %src : memref<?x?xf32>) {27 // CHECK: %[[T0:.*]] = llvm.call @mgpuStreamCreate28 %t0 = gpu.wait async29 %t1 = gpu.memcpy async [%t0] %dst, %src : memref<?x?xf32, 1>, memref<?x?xf32>30 // CHECK: %[[DIM_SIZE_0:.*]] = llvm.extractvalue %{{.*}}[3, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)> 31 // CHECK-NEXT: %[[DIM_SIZE_1:.*]] = llvm.extractvalue %{{.*}}[3, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)> 32 // CHECK: %[[NUM_ELEMENTS:.*]] = llvm.mul %[[DIM_SIZE_0]], %[[DIM_SIZE_1]] : i6433 // CHECK: %[[SIZE_PTR:.*]] = llvm.getelementptr %{{.*}}[%[[NUM_ELEMENTS]]] : (!llvm.ptr, i64) -> !llvm.ptr, f3234 // CHECK-NEXT: %[[SIZE_INT:.*]] = llvm.ptrtoint %[[SIZE_PTR]] : !llvm.ptr to i6435 // CHECK: %[[ADDR_CAST:.*]] = llvm.addrspacecast36 // CHECK: llvm.call @mgpuMemcpy(%[[ADDR_CAST]], %{{.*}}, %[[SIZE_INT]], %[[T0]])37 return38 }39}40