[llvm] AMDGPU: Start using LLVMContext errors in buffer fat pointer lowering (PR #142014)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Thu May 29 12:15:28 PDT 2025


https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/142014

Avoid using report_fatal_error. Many more uses that should be converted
in the pass remain.

>From 30a780640d7719d554d945be7dbef4ea5105322c Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Thu, 29 May 2025 20:59:47 +0200
Subject: [PATCH] AMDGPU: Start using LLVMContext errors in buffer fat pointer
 lowering

Avoid using report_fatal_error. Many more uses that should be converted
in the pass remain.
---
 .../AMDGPU/AMDGPULowerBufferFatPointers.cpp   | 23 +++++++++++++------
 .../buffer-fat-pointer-unsupported-errors.ll  | 22 ++++++++++++++++++
 2 files changed, 38 insertions(+), 7 deletions(-)
 create mode 100644 llvm/test/CodeGen/AMDGPU/buffer-fat-pointer-unsupported-errors.ll

diff --git a/llvm/lib/Target/AMDGPU/AMDGPULowerBufferFatPointers.cpp b/llvm/lib/Target/AMDGPU/AMDGPULowerBufferFatPointers.cpp
index 3835f4cfceefc..0f002b016af0c 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPULowerBufferFatPointers.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPULowerBufferFatPointers.cpp
@@ -2430,17 +2430,26 @@ bool AMDGPULowerBufferFatPointers::run(Module &M, const TargetMachine &TM) {
   // its arguments or return types adjusted.
   SmallVector<std::pair<Function *, bool>> NeedsRemap;
 
+  LLVMContext &Ctx = M.getContext();
+
   BufferFatPtrToStructTypeMap StructTM(DL);
   BufferFatPtrToIntTypeMap IntTM(DL);
   for (const GlobalVariable &GV : M.globals()) {
-    if (GV.getAddressSpace() == AMDGPUAS::BUFFER_FAT_POINTER)
-      report_fatal_error("Global variables with a buffer fat pointer address "
-                         "space (7) are not supported");
+    if (GV.getAddressSpace() == AMDGPUAS::BUFFER_FAT_POINTER) {
+      // FIXME: Use DiagnosticInfo unsupported but it requires a Function
+      Ctx.emitError("global variables with a buffer fat pointer address "
+                    "space (7) are not supported");
+      continue;
+    }
+
     Type *VT = GV.getValueType();
-    if (VT != StructTM.remapType(VT))
-      report_fatal_error("Global variables that contain buffer fat pointers "
-                         "(address space 7 pointers) are unsupported. Use "
-                         "buffer resource pointers (address space 8) instead.");
+    if (VT != StructTM.remapType(VT)) {
+      // FIXME: Use DiagnosticInfo unsupported but it requires a Function
+      Ctx.emitError("global variables that contain buffer fat pointers "
+                    "(address space 7 pointers) are unsupported. Use "
+                    "buffer resource pointers (address space 8) instead");
+      continue;
+    }
   }
 
   {
diff --git a/llvm/test/CodeGen/AMDGPU/buffer-fat-pointer-unsupported-errors.ll b/llvm/test/CodeGen/AMDGPU/buffer-fat-pointer-unsupported-errors.ll
new file mode 100644
index 0000000000000..3fc8d73bb0536
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/buffer-fat-pointer-unsupported-errors.ll
@@ -0,0 +1,22 @@
+; RUN: split-file %s %t
+; RUN: not opt -mtriple=amdgcn-amd-amdhsa -disable-output -passes=amdgpu-lower-buffer-fat-pointers %t/contains-null-init.ll 2>&1 | FileCheck -check-prefix=ERR0 %s
+; RUN: not opt -mtriple=amdgcn-amd-amdhsa -disable-output -passes=amdgpu-lower-buffer-fat-pointers %t/contains-poison-init.ll 2>&1 | FileCheck -check-prefix=ERR1 %s
+; RUN: not opt -mtriple=amdgcn-amd-amdhsa -disable-output -passes=amdgpu-lower-buffer-fat-pointers %t/defined-gv-type.ll 2>&1 | FileCheck -check-prefix=ERR2 %s
+; RUN: not opt -mtriple=amdgcn-amd-amdhsa -disable-output -passes=amdgpu-lower-buffer-fat-pointers %t/declared-gv-type.ll 2>&1 | FileCheck -check-prefix=ERR3 %s
+
+;--- contains-null-init.ll
+; ERR0: error: global variables that contain buffer fat pointers (address space 7 pointers) are unsupported. Use buffer resource pointers (address space 8) instead
+ at init_null = global ptr addrspace(7) null
+
+;--- contains-poison-init.ll
+; ERR1: error: global variables that contain buffer fat pointers (address space 7 pointers) are unsupported. Use buffer resource pointers (address space 8) instead
+ at init_poison = global ptr addrspace(7) poison
+
+;--- defined-gv-type.ll
+; ERR2: error: global variables with a buffer fat pointer address space (7) are not supported
+ at gv_is_addrspace_7 = addrspace(7) global i32 0
+
+;--- declared-gv-type.ll
+; ERR3: error: global variables with a buffer fat pointer address space (7) are not supported
+ at extern_gv_is_addrspace_7 = external addrspace(7) global i32
+



More information about the llvm-commits mailing list