@@ -77,23 +77,22 @@ static void createInitOrFiniCalls(Function &F, bool IsCtor) {
7777 auto *LoopBB = BasicBlock::Create (C, " while.entry" , &F);
7878 auto *ExitBB = BasicBlock::Create (C, " while.end" , &F);
7979 Type *PtrTy = IRB.getPtrTy (AMDGPUAS::GLOBAL_ADDRESS);
80+ ArrayType *PtrArrayTy = ArrayType::get (PtrTy, 0 );
8081
8182 auto *Begin = M.getOrInsertGlobal (
82- IsCtor ? " __init_array_start" : " __fini_array_start" ,
83- ArrayType::get (PtrTy, 0 ), [&]() {
83+ IsCtor ? " __init_array_start" : " __fini_array_start" , PtrArrayTy, [&]() {
8484 return new GlobalVariable (
85- M, ArrayType::get (PtrTy, 0 ) ,
85+ M, PtrArrayTy ,
8686 /* isConstant=*/ true , GlobalValue::ExternalLinkage,
8787 /* Initializer=*/ nullptr ,
8888 IsCtor ? " __init_array_start" : " __fini_array_start" ,
8989 /* InsertBefore=*/ nullptr , GlobalVariable::NotThreadLocal,
9090 /* AddressSpace=*/ AMDGPUAS::GLOBAL_ADDRESS);
9191 });
9292 auto *End = M.getOrInsertGlobal (
93- IsCtor ? " __init_array_end" : " __fini_array_end" ,
94- ArrayType::get (PtrTy, 0 ), [&]() {
93+ IsCtor ? " __init_array_end" : " __fini_array_end" , PtrArrayTy, [&]() {
9594 return new GlobalVariable (
96- M, ArrayType::get (PtrTy, 0 ) ,
95+ M, PtrArrayTy ,
9796 /* isConstant=*/ true , GlobalValue::ExternalLinkage,
9897 /* Initializer=*/ nullptr ,
9998 IsCtor ? " __init_array_end" : " __fini_array_end" ,
@@ -117,7 +116,7 @@ static void createInitOrFiniCalls(Function &F, bool IsCtor) {
117116 auto *Size = IRB.CreateAShr (ByteSize, ConstantInt::get (Int64Ty, 3 ));
118117 auto *Offset = IRB.CreateSub (Size, ConstantInt::get (Int64Ty, 1 ));
119118 Start = IRB.CreateInBoundsGEP (
120- ArrayType::get (IRB. getPtrTy (), 0 ) , Begin,
119+ PtrArrayTy , Begin,
121120 ArrayRef<Value *>({ConstantInt::get (Int64Ty, 0 ), Offset}));
122121 Stop = Begin;
123122 }
@@ -128,8 +127,7 @@ static void createInitOrFiniCalls(Function &F, bool IsCtor) {
128127 LoopBB, ExitBB);
129128 IRB.SetInsertPoint (LoopBB);
130129 auto *CallBackPHI = IRB.CreatePHI (PtrTy, 2 , " ptr" );
131- auto *CallBack = IRB.CreateLoad (IRB.getPtrTy (F.getAddressSpace ()),
132- CallBackPHI, " callback" );
130+ auto *CallBack = IRB.CreateLoad (F.getType (), CallBackPHI, " callback" );
133131 IRB.CreateCall (CallBackTy, CallBack);
134132 auto *NewCallBack =
135133 IRB.CreateConstGEP1_64 (PtrTy, CallBackPHI, IsCtor ? 1 : -1 , " next" );
0 commit comments