Skip to content

Commit a1007ee

Browse files
committed
[mlir][gpu] Add missing dependent dialect
This PR adds missing dependent index dialect for ConvertGpuOpsToNVVMOps and ConvertGpuOpsToROCDLOps pass.
1 parent 468cffb commit a1007ee

File tree

4 files changed

+37
-0
lines changed

4 files changed

+37
-0
lines changed

mlir/include/mlir/Conversion/Passes.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,7 @@ def ConvertGpuOpsToNVVMOps : Pass<"convert-gpu-to-nvvm", "gpu::GPUModuleOp"> {
618618
"cf::ControlFlowDialect",
619619
"memref::MemRefDialect",
620620
"NVVM::NVVMDialect",
621+
"index::IndexDialect"
621622
];
622623
let options = [
623624
Option<"indexBitwidth", "index-bitwidth", "unsigned",
@@ -647,6 +648,7 @@ def ConvertGpuOpsToROCDLOps : Pass<"convert-gpu-to-rocdl", "gpu::GPUModuleOp"> {
647648
"amdgpu::AMDGPUDialect",
648649
"cf::ControlFlowDialect",
649650
"memref::MemRefDialect",
651+
"index::IndexDialect"
650652
];
651653
let options = [
652654
Option<"chipset", "chipset", "std::string",

mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "mlir/Dialect/Func/IR/FuncOps.h"
2424
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
2525
#include "mlir/Dialect/GPU/Transforms/Passes.h"
26+
#include "mlir/Dialect/Index/IR/IndexDialect.h"
2627
#include "mlir/Dialect/LLVMIR/NVVMDialect.h"
2728
#include "mlir/Dialect/Math/IR/Math.h"
2829
#include "mlir/Dialect/MemRef/IR/MemRef.h"

mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "mlir/Dialect/Func/IR/FuncOps.h"
3232
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
3333
#include "mlir/Dialect/GPU/Transforms/Passes.h"
34+
#include "mlir/Dialect/Index/IR/IndexDialect.h"
3435
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
3536
#include "mlir/Dialect/LLVMIR/ROCDLDialect.h"
3637
#include "mlir/Dialect/MemRef/IR/MemRef.h"
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// RUN: mlir-opt %s -split-input-file -convert-gpu-to-rocdl | FileCheck %s --check-prefixes=ROCDL
2+
// RUN: mlir-opt %s -split-input-file -convert-gpu-to-nvvm | FileCheck %s --check-prefixes=NVVM
3+
4+
gpu.module @kernel {
5+
gpu.func @gpu_global_id() -> (index) {
6+
%global_id_x = gpu.global_id x
7+
gpu.return %global_id_x : index
8+
}
9+
}
10+
11+
// ROCDL-LABEL: llvm.func @gpu_global_id() -> i64 {
12+
// ROCDL: %[[WORKGROUP_0:.*]] = rocdl.workgroup.id.x : i32
13+
// ROCDL: %[[SEXT_0:.*]] = llvm.sext %[[WORKGROUP_0]] : i32 to i64
14+
// ROCDL: %[[WORKGROUP_1:.*]] = rocdl.workgroup.dim.x : i32
15+
// ROCDL: %[[SEXT_1:.*]] = llvm.sext %[[WORKGROUP_1]] : i32 to i64
16+
// ROCDL: %[[MUL_0:.*]] = llvm.mul %[[SEXT_0]], %[[SEXT_1]] : i64
17+
// ROCDL: %[[WORKITEM_0:.*]] = rocdl.workitem.id.x : i32
18+
// ROCDL: %[[SEXT_2:.*]] = llvm.sext %[[WORKITEM_0]] : i32 to i64
19+
// ROCDL: %[[ADD_0:.*]] = llvm.add %[[SEXT_2]], %[[MUL_0]] : i64
20+
// ROCDL: llvm.return %[[ADD_0]] : i64
21+
// ROCDL: }
22+
23+
// NVVM-LABEL: llvm.func @gpu_global_id() -> i64 {
24+
// NVVM: %[[READ_0:.*]] = nvvm.read.ptx.sreg.ctaid.x : i32
25+
// NVVM: %[[SEXT_0:.*]] = llvm.sext %[[READ_0]] : i32 to i64
26+
// NVVM: %[[READ_1:.*]] = nvvm.read.ptx.sreg.ntid.x : i32
27+
// NVVM: %[[SEXT_1:.*]] = llvm.sext %[[READ_1]] : i32 to i64
28+
// NVVM: %[[MUL_0:.*]] = llvm.mul %[[SEXT_0]], %[[SEXT_1]] : i64
29+
// NVVM: %[[READ_2:.*]] = nvvm.read.ptx.sreg.tid.x : i32
30+
// NVVM: %[[SEXT_2:.*]] = llvm.sext %[[READ_2]] : i32 to i64
31+
// NVVM: %[[ADD_0:.*]] = llvm.add %[[SEXT_2]], %[[MUL_0]] : i64
32+
// NVVM: llvm.return %[[ADD_0]] : i64
33+
// NVVM: }

0 commit comments

Comments
 (0)