diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp index 40476ce..92399c3 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp @@ -56,16 +56,17 @@ public: ConstantArray *GA = dyn_cast<ConstantArray>(GV->getInitializer()); if (!GA || GA->getNumOperands() == 0) return false; + Function *InitOrFiniKernel = createInitOrFiniKernelFunction(M, IsCtor); IRBuilder<> IRB(InitOrFiniKernel->getEntryBlock().getTerminator()); + + FunctionType *ConstructorTy = InitOrFiniKernel->getFunctionType(); + for (Value *V : GA->operands()) { auto *CS = cast<ConstantStruct>(V); - if (Function *F = dyn_cast<Function>(CS->getOperand(1))) { - FunctionCallee Ctor = - M.getOrInsertFunction(F->getName(), IRB.getVoidTy()); - IRB.CreateCall(Ctor); - } + IRB.CreateCall(ConstructorTy, CS->getOperand(1)); } + appendToUsed(M, {InitOrFiniKernel}); return true; } |