[llvm] 49b8ca3 - AMDGPU: Don't crash on global_ctor/dtor declaration

Ruiling Song via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 23 06:05:48 PDT 2022


Author: Ruiling Song
Date: 2022-06-23T21:04:54+08:00
New Revision: 49b8ca3f7c4f0c76ab4a04e9a7b46ccd29f07011

URL: https://github.com/llvm/llvm-project/commit/49b8ca3f7c4f0c76ab4a04e9a7b46ccd29f07011
DIFF: https://github.com/llvm/llvm-project/commit/49b8ca3f7c4f0c76ab4a04e9a7b46ccd29f07011.diff

LOG: AMDGPU: Don't crash on global_ctor/dtor declaration

Reviewed By: arsenm

Differential Revision: https://reviews.llvm.org/D128320

Added: 
    llvm/test/CodeGen/AMDGPU/lower-ctor-dtor-declaration.ll

Modified: 
    llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp
index 04bf623bfa46d..8fcf669041b98 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp
@@ -50,7 +50,7 @@ class AMDGPUCtorDtorLowering final : public ModulePass {
   }
 
   bool createInitOrFiniKernel(Module &M, GlobalVariable *GV, bool IsCtor) {
-    if (!GV)
+    if (!GV || !GV->hasInitializer())
       return false;
     ConstantArray *GA = dyn_cast<ConstantArray>(GV->getInitializer());
     if (!GA || GA->getNumOperands() == 0)

diff  --git a/llvm/test/CodeGen/AMDGPU/lower-ctor-dtor-declaration.ll b/llvm/test/CodeGen/AMDGPU/lower-ctor-dtor-declaration.ll
new file mode 100644
index 0000000000000..d293984ed7d09
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/lower-ctor-dtor-declaration.ll
@@ -0,0 +1,8 @@
+; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 < %s | FileCheck %s
+
+ at llvm.global_ctors = external global [2 x { i32, void ()*, i8* }]
+ at llvm.global_dtors = external global [2 x { i32, void ()*, i8* }]
+
+; No amdgpu_kernels emitted for global_ctors declaration
+; CHECK-NOT: amdgcn.device.init
+; CHECK-NOT: amdgcn.device.fini


        


More information about the llvm-commits mailing list