From 02307a14440ee7270ecc8490ad6e390261bb21c4 Mon Sep 17 00:00:00 2001 From: Christian Ulmann Date: Wed, 1 Nov 2023 08:40:32 +0100 Subject: [PATCH] [MLIR][GPUToNVVM] Remove typed pointer support (#70861) This commit removes the support for lowering GPU to NVVM dialect with typed pointers. Typed pointers have been deprecated for a while now and it's planned to soon remove them from the LLVM dialect. Related PSA: https://discourse.llvm.org/t/psa-removal-of-typed-pointers-from-the-llvm-dialect/74502 --- mlir/include/mlir/Conversion/Passes.td | 5 +-- .../GPUToNVVM/LowerGpuOpsToNVVMOps.cpp | 1 - ...wer-memory-space-attrs-typed-pointers.mlir | 15 ------- .../GPUCommon/lower-memory-space-attrs.mlir | 2 +- .../GPUCommon/memory-attrbution.mlir | 2 +- .../GPUCommon/memref-arg-attrs.mlir | 2 +- .../GPUCommon/memref-arg-noalias-attrs.mlir | 2 +- .../Conversion/GPUToNVVM/gpu-to-nvvm-32b.mlir | 2 +- .../Conversion/GPUToNVVM/gpu-to-nvvm.mlir | 2 +- .../Conversion/GPUToNVVM/typed-pointers.mlir | 39 ------------------- .../GPUToNVVM/wmma-ops-to-nvvm.mlir | 4 +- 11 files changed, 9 insertions(+), 67 deletions(-) delete mode 100644 mlir/test/Conversion/GPUCommon/lower-memory-space-attrs-typed-pointers.mlir delete mode 100644 mlir/test/Conversion/GPUToNVVM/typed-pointers.mlir diff --git a/mlir/include/mlir/Conversion/Passes.td b/mlir/include/mlir/Conversion/Passes.td index 2d504cd9192a..25481d75e7ea 100644 --- a/mlir/include/mlir/Conversion/Passes.td +++ b/mlir/include/mlir/Conversion/Passes.td @@ -495,10 +495,7 @@ def ConvertGpuOpsToNVVMOps : Pass<"convert-gpu-to-nvvm", "gpu::GPUModuleOp"> { Option<"useBarePtrCallConv", "use-bare-ptr-memref-call-conv", "bool", /*default=*/"false", "Replace memref arguments in GPU functions with bare pointers. " - "All memrefs must have static shape.">, - Option<"useOpaquePointers", "use-opaque-pointers", "bool", - /*default=*/"true", "Generate LLVM IR using opaque pointers " - "instead of typed pointers">, + "All memrefs must have static shape."> ]; } diff --git a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp index 764b6a779b98..935e3d2a4095 100644 --- a/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp +++ b/mlir/lib/Conversion/GPUToNVVM/LowerGpuOpsToNVVMOps.cpp @@ -227,7 +227,6 @@ struct LowerGpuOpsToNVVMOpsPass DataLayout(cast(m.getOperation()))); if (indexBitwidth != kDeriveIndexBitwidthFromDataLayout) options.overrideIndexBitwidth(indexBitwidth); - options.useOpaquePointers = useOpaquePointers; options.useBarePtrCallConv = useBarePtrCallConv; // Apply in-dialect lowering. In-dialect lowering will replace diff --git a/mlir/test/Conversion/GPUCommon/lower-memory-space-attrs-typed-pointers.mlir b/mlir/test/Conversion/GPUCommon/lower-memory-space-attrs-typed-pointers.mlir deleted file mode 100644 index ebf1f309b0e4..000000000000 --- a/mlir/test/Conversion/GPUCommon/lower-memory-space-attrs-typed-pointers.mlir +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: mlir-opt %s -split-input-file -convert-gpu-to-rocdl='use-opaque-pointers=0' | FileCheck %s --check-prefixes=CHECK,ROCDL -// RUN: mlir-opt %s -split-input-file -convert-gpu-to-nvvm='use-opaque-pointers=0' | FileCheck %s --check-prefixes=CHECK,NVVM - -gpu.module @kernel { - gpu.func @private(%arg0: f32) private(%arg1: memref<4xf32, #gpu.address_space>) { - %c0 = arith.constant 0 : index - memref.store %arg0, %arg1[%c0] : memref<4xf32, #gpu.address_space> - gpu.return - } -} - -// CHECK-LABEL: llvm.func @private -// CHECK: llvm.store -// ROCDL-SAME: : !llvm.ptr -// NVVM-SAME: : !llvm.ptr diff --git a/mlir/test/Conversion/GPUCommon/lower-memory-space-attrs.mlir b/mlir/test/Conversion/GPUCommon/lower-memory-space-attrs.mlir index cde11a73397f..2d7e90dd1f5c 100644 --- a/mlir/test/Conversion/GPUCommon/lower-memory-space-attrs.mlir +++ b/mlir/test/Conversion/GPUCommon/lower-memory-space-attrs.mlir @@ -1,5 +1,5 @@ // RUN: mlir-opt %s -split-input-file -convert-gpu-to-rocdl='use-opaque-pointers=1' | FileCheck %s --check-prefixes=CHECK,ROCDL -// RUN: mlir-opt %s -split-input-file -convert-gpu-to-nvvm='use-opaque-pointers=1' | FileCheck %s --check-prefixes=CHECK,NVVM +// RUN: mlir-opt %s -split-input-file -convert-gpu-to-nvvm | FileCheck %s --check-prefixes=CHECK,NVVM gpu.module @kernel { gpu.func @private(%arg0: f32) private(%arg1: memref<4xf32, #gpu.address_space>) { diff --git a/mlir/test/Conversion/GPUCommon/memory-attrbution.mlir b/mlir/test/Conversion/GPUCommon/memory-attrbution.mlir index 2457cbcf3251..0231cf6f9806 100644 --- a/mlir/test/Conversion/GPUCommon/memory-attrbution.mlir +++ b/mlir/test/Conversion/GPUCommon/memory-attrbution.mlir @@ -1,4 +1,4 @@ -// RUN: mlir-opt -allow-unregistered-dialect --convert-gpu-to-nvvm='use-opaque-pointers=1' --split-input-file %s | FileCheck --check-prefix=NVVM %s +// RUN: mlir-opt -allow-unregistered-dialect --convert-gpu-to-nvvm --split-input-file %s | FileCheck --check-prefix=NVVM %s // RUN: mlir-opt -allow-unregistered-dialect --convert-gpu-to-rocdl='use-opaque-pointers=1' --split-input-file %s | FileCheck --check-prefix=ROCDL %s gpu.module @kernel { diff --git a/mlir/test/Conversion/GPUCommon/memref-arg-attrs.mlir b/mlir/test/Conversion/GPUCommon/memref-arg-attrs.mlir index 71ae5fbf154a..21c4d5696c42 100644 --- a/mlir/test/Conversion/GPUCommon/memref-arg-attrs.mlir +++ b/mlir/test/Conversion/GPUCommon/memref-arg-attrs.mlir @@ -1,5 +1,5 @@ // RUN: mlir-opt %s -split-input-file -convert-gpu-to-rocdl='use-opaque-pointers=1 use-bare-ptr-memref-call-conv=0' | FileCheck %s --check-prefixes=CHECK,ROCDL -// RUN: mlir-opt %s -split-input-file -convert-gpu-to-nvvm='use-opaque-pointers=1 use-bare-ptr-memref-call-conv=0' | FileCheck %s --check-prefixes=CHECK,NVVM +// RUN: mlir-opt %s -split-input-file -convert-gpu-to-nvvm='use-bare-ptr-memref-call-conv=0' | FileCheck %s --check-prefixes=CHECK,NVVM gpu.module @kernel { gpu.func @test_func_readonly(%arg0 : memref {llvm.readonly} ) { diff --git a/mlir/test/Conversion/GPUCommon/memref-arg-noalias-attrs.mlir b/mlir/test/Conversion/GPUCommon/memref-arg-noalias-attrs.mlir index 64c2cfdbcc5e..81babac5502c 100644 --- a/mlir/test/Conversion/GPUCommon/memref-arg-noalias-attrs.mlir +++ b/mlir/test/Conversion/GPUCommon/memref-arg-noalias-attrs.mlir @@ -1,5 +1,5 @@ // RUN: mlir-opt %s -split-input-file -convert-gpu-to-rocdl='use-opaque-pointers=1 use-bare-ptr-memref-call-conv=1' | FileCheck %s --check-prefixes=CHECK,ROCDL -// RUN: mlir-opt %s -split-input-file -convert-gpu-to-nvvm='use-opaque-pointers=1 use-bare-ptr-memref-call-conv=1' | FileCheck %s --check-prefixes=CHECK,NVVM +// RUN: mlir-opt %s -split-input-file -convert-gpu-to-nvvm='use-bare-ptr-memref-call-conv=1' | FileCheck %s --check-prefixes=CHECK,NVVM gpu.module @kernel { gpu.func @func_with_noalias_attr(%arg0 : memref {llvm.noalias} ) { diff --git a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm-32b.mlir b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm-32b.mlir index 9bdce3126106..7b873463a5f9 100644 --- a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm-32b.mlir +++ b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm-32b.mlir @@ -1,4 +1,4 @@ -// RUN: mlir-opt %s -convert-gpu-to-nvvm='index-bitwidth=32 use-opaque-pointers=1' -split-input-file | FileCheck %s +// RUN: mlir-opt %s -convert-gpu-to-nvvm='index-bitwidth=32' -split-input-file | FileCheck %s // RUN: mlir-opt %s -transform-interpreter | FileCheck %s diff --git a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir index 92d85a473d23..c18bb423a6e6 100644 --- a/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir +++ b/mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir @@ -1,4 +1,4 @@ -// RUN: mlir-opt %s -convert-gpu-to-nvvm='has-redux=1 use-opaque-pointers=1' -split-input-file | FileCheck %s +// RUN: mlir-opt %s -convert-gpu-to-nvvm='has-redux=1' -split-input-file | FileCheck %s // RUN: mlir-opt %s -transform-interpreter | FileCheck %s gpu.module @test_module_0 { diff --git a/mlir/test/Conversion/GPUToNVVM/typed-pointers.mlir b/mlir/test/Conversion/GPUToNVVM/typed-pointers.mlir deleted file mode 100644 index de0a638432e5..000000000000 --- a/mlir/test/Conversion/GPUToNVVM/typed-pointers.mlir +++ /dev/null @@ -1,39 +0,0 @@ -// RUN: mlir-opt --convert-gpu-to-nvvm="use-opaque-pointers=0" --split-input-file %s | FileCheck %s -// RUN: mlir-opt --convert-gpu-to-nvvm="index-bitwidth=32 use-opaque-pointers=0" --split-input-file %s | FileCheck --check-prefix=CHECK32 %s - -gpu.module @test_module { - - // CHECK-LABEL: func @gpu_wmma_load_op() -> - // CHECK-SAME: !llvm.struct<(vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>)> - // CHECK32-LABEL: func @gpu_wmma_load_op() -> - func.func @gpu_wmma_load_op() -> (!gpu.mma_matrix<16x16xf16, "AOp">) { - %wg = memref.alloca() {alignment = 32} : memref<32x32xf16, 3> - %i = arith.constant 16 : index - %j = arith.constant 16 : index - %0 = gpu.subgroup_mma_load_matrix %wg[%i, %j] {leadDimension = 32 : index, transpose} : memref<32x32xf16, 3> -> !gpu.mma_matrix<16x16xf16, "AOp"> - // CHECK: %[[INX:.*]] = llvm.mlir.constant(16 : index) : i64 - // CHECK: %{{.*}} = llvm.insertvalue %{{.*}}, %{{.*}}[{{.*}}, {{.*}}] - // CHECK: %[[BASE:.*]] = llvm.extractvalue %{{.*}}[1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)> - // CHECK: %[[LDM:.*]] = llvm.mlir.constant(32 : index) : i64 - // CHECK: %[[LI:.*]] = llvm.mul %[[INX]], %[[LDM]] : i64 - // CHECK: %[[LIJ:.*]] = llvm.add %[[LI]], %[[INX]] : i64 - // CHECK: %[[ADDRESS:.*]] = llvm.getelementptr %[[BASE]][%[[LIJ]]] : (!llvm.ptr, i64) -> !llvm.ptr - // CHECK: %[[LDM32:.*]] = llvm.mlir.constant(32 : index) : i32 - // CHECK: %[[FRAG:.*]] = nvvm.wmma.load %[[ADDRESS]], %[[LDM32]] - // CHECK-SAME: {eltype = #nvvm.mma_type, frag = #nvvm.mma_frag, k = 16 : i32, layout = #nvvm.mma_layout, m = 16 : i32, n = 16 : i32} : (!llvm.ptr) -> !llvm.struct<(vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>)> - // CHECK: llvm.return %[[FRAG]] : !llvm.struct<(vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>)> - - // CHECK32: %[[INX:.*]] = llvm.mlir.constant(16 : index) : i32 - // CHECK32: %{{.*}} = llvm.insertvalue %{{.*}}, %{{.*}}[{{.*}}, {{.*}}] - // CHECK32: %[[BASE:.*]] = llvm.extractvalue %{{.*}}[1] : !llvm.struct<(ptr, ptr, i32, array<2 x i32>, array<2 x i32>)> - // CHECK32: %[[LDM:.*]] = llvm.mlir.constant(32 : index) : i32 - // CHECK32: %[[LI:.*]] = llvm.mul %[[INX]], %[[LDM]] : i32 - // CHECK32: %[[LIJ:.*]] = llvm.add %[[LI]], %[[INX]] : i32 - // CHECK32: %[[ADDRESS:.*]] = llvm.getelementptr %[[BASE]][%[[LIJ]]] : (!llvm.ptr, i32) -> !llvm.ptr - // CHECK32: %[[LDM32:.*]] = llvm.mlir.constant(32 : index) : i32 - // CHECK32: %[[FRAG:.*]] = nvvm.wmma.load %[[ADDRESS]], %[[LDM32]] - // CHECK32-SAME: {eltype = #nvvm.mma_type, frag = #nvvm.mma_frag, k = 16 : i32, layout = #nvvm.mma_layout, m = 16 : i32, n = 16 : i32} : (!llvm.ptr) -> !llvm.struct<(vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>)> - // CHECK32: llvm.return %[[FRAG]] : !llvm.struct<(vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>, vector<2xf16>)> - return %0 : !gpu.mma_matrix<16x16xf16, "AOp"> - } -} diff --git a/mlir/test/Conversion/GPUToNVVM/wmma-ops-to-nvvm.mlir b/mlir/test/Conversion/GPUToNVVM/wmma-ops-to-nvvm.mlir index 520d6294bc1c..9dec666bf4b3 100644 --- a/mlir/test/Conversion/GPUToNVVM/wmma-ops-to-nvvm.mlir +++ b/mlir/test/Conversion/GPUToNVVM/wmma-ops-to-nvvm.mlir @@ -1,5 +1,5 @@ -// RUN: mlir-opt --convert-gpu-to-nvvm='use-opaque-pointers=1' --split-input-file %s | FileCheck %s -// RUN: mlir-opt --convert-gpu-to-nvvm="index-bitwidth=32 use-opaque-pointers=1" --split-input-file %s | FileCheck --check-prefix=CHECK32 %s +// RUN: mlir-opt --convert-gpu-to-nvvm --split-input-file %s | FileCheck %s +// RUN: mlir-opt --convert-gpu-to-nvvm="index-bitwidth=32" --split-input-file %s | FileCheck --check-prefix=CHECK32 %s gpu.module @test_module {