1// RUN: mlir-opt --test-gpu-rewrite -split-input-file %s | FileCheck %s 2 3module { 4 // CHECK-LABEL: func.func @globalId 5 // CHECK-SAME: (%[[SZ:.*]]: index, %[[MEM:.*]]: memref<index, 1>) { 6 func.func @globalId(%sz : index, %mem: memref<index, 1>) { 7 gpu.launch blocks(%bx, %by, %bz) in (%grid_x = %sz, %grid_y = %sz, %grid_z = %sz) 8 threads(%tx, %ty, %tz) in (%block_x = %sz, %block_y = %sz, %block_z = %sz) { 9 // CHECK: %[[BIDY:.*]] = gpu.block_id x 10 // CHECK-NEXT: %[[BDIMY:.*]] = gpu.block_dim x 11 // CHECK-NEXT: %[[TMPY:.*]] = index.mul %[[BIDY]], %[[BDIMY]] 12 // CHECK-NEXT: %[[TIDX:.*]] = gpu.thread_id x 13 // CHECK-NEXT: %[[GIDX:.*]] = index.add %[[TIDX]], %[[TMPY]] 14 %idx = gpu.global_id x 15 // CHECK: memref.store %[[GIDX]], %[[MEM]][] : memref<index, 1> 16 memref.store %idx, %mem[] : memref<index, 1> 17 18 // CHECK: %[[BIDY:.*]] = gpu.block_id y 19 // CHECK-NEXT: %[[BDIMY:.*]] = gpu.block_dim y 20 // CHECK-NEXT: %[[TMPY:.*]] = index.mul %[[BIDY]], %[[BDIMY]] 21 // CHECK-NEXT: %[[TIDY:.*]] = gpu.thread_id y 22 // CHECK-NEXT: %[[GIDY:.*]] = index.add %[[TIDY]], %[[TMPY]] 23 %idy = gpu.global_id y 24 // CHECK: memref.store %[[GIDY]], %[[MEM]][] : memref<index, 1> 25 memref.store %idy, %mem[] : memref<index, 1> 26 27 // CHECK: %[[BIDZ:.*]] = gpu.block_id z 28 // CHECK-NEXT: %[[BDIMZ:.*]] = gpu.block_dim z 29 // CHECK-NEXT: %[[TMPZ:.*]] = index.mul %[[BIDZ]], %[[BDIMZ]] 30 // CHECK-NEXT: %[[TIDZ:.*]] = gpu.thread_id z 31 // CHECK-NEXT: %[[GIDZ:.*]] = index.add %[[TIDZ]], %[[TMPZ]] 32 %idz = gpu.global_id z 33 // CHECK: memref.store %[[GIDZ]], %[[MEM]][] : memref<index, 1> 34 memref.store %idz, %mem[] : memref<index, 1> 35 gpu.terminator 36 } 37 return 38 } 39} 40