xref: /llvm-project/mlir/test/Dialect/GPU/globalId-rewrite.mlir (revision dd16cd731dfb4746a351380edc848199cf9631e8)
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