brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · b45d188 Raw
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