@@ -100,6 +100,11 @@ Address ABIInfo::EmitMSVAArg(CodeGenFunction &CGF, Address VAListAddr,
100
100
return Address::invalid ();
101
101
}
102
102
103
+ static llvm::Type *getVAListElementType (CodeGenFunction &CGF) {
104
+ return CGF.ConvertTypeForMem (
105
+ CGF.getContext ().getBuiltinVaListType ()->getPointeeType ());
106
+ }
107
+
103
108
bool ABIInfo::isPromotableIntegerTypeForABI (QualType Ty) const {
104
109
if (Ty->isPromotableIntegerType ())
105
110
return true ;
@@ -375,7 +380,7 @@ static Address emitVoidPtrVAArg(CodeGenFunction &CGF, Address VAListAddr,
375
380
}
376
381
377
382
// Cast the address we've calculated to the right type.
378
- llvm::Type *DirectTy = CGF.ConvertTypeForMem (ValueTy);
383
+ llvm::Type *DirectTy = CGF.ConvertTypeForMem (ValueTy), *ElementTy = DirectTy ;
379
384
if (IsIndirect)
380
385
DirectTy = DirectTy->getPointerTo (0 );
381
386
@@ -384,7 +389,7 @@ static Address emitVoidPtrVAArg(CodeGenFunction &CGF, Address VAListAddr,
384
389
SlotSizeAndAlign, AllowHigherAlign);
385
390
386
391
if (IsIndirect) {
387
- Addr = Address::deprecated (CGF.Builder .CreateLoad (Addr), ValueInfo.Align );
392
+ Addr = Address (CGF.Builder .CreateLoad (Addr), ElementTy , ValueInfo.Align );
388
393
}
389
394
390
395
return Addr;
@@ -688,11 +693,11 @@ Address EmitVAArgInstr(CodeGenFunction &CGF, Address VAListAddr, QualType Ty,
688
693
auto TyInfo = CGF.getContext ().getTypeInfoInChars (Ty);
689
694
CharUnits TyAlignForABI = TyInfo.Align ;
690
695
691
- llvm::Type *BaseTy =
692
- llvm::PointerType::getUnqual (CGF. ConvertTypeForMem (Ty) );
696
+ llvm::Type *ElementTy = CGF. ConvertTypeForMem (Ty);
697
+ llvm::Type *BaseTy = llvm::PointerType::getUnqual (ElementTy );
693
698
llvm::Value *Addr =
694
699
CGF.Builder .CreateVAArg (VAListAddr.getPointer (), BaseTy);
695
- return Address::deprecated (Addr, TyAlignForABI);
700
+ return Address (Addr, ElementTy , TyAlignForABI);
696
701
} else {
697
702
assert ((AI.isDirect () || AI.isExtend ()) &&
698
703
" Unexpected ArgInfo Kind in generic VAArg emitter!" );
@@ -4826,7 +4831,7 @@ Address PPC32_SVR4_ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAList,
4826
4831
4827
4832
Builder.CreateCondBr (CC, UsingRegs, UsingOverflow);
4828
4833
4829
- llvm::Type *DirectTy = CGF.ConvertType (Ty);
4834
+ llvm::Type *DirectTy = CGF.ConvertType (Ty), *ElementTy = DirectTy ;
4830
4835
if (isIndirect) DirectTy = DirectTy->getPointerTo (0 );
4831
4836
4832
4837
// Case 1: consume registers.
@@ -4835,8 +4840,8 @@ Address PPC32_SVR4_ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAList,
4835
4840
CGF.EmitBlock (UsingRegs);
4836
4841
4837
4842
Address RegSaveAreaPtr = Builder.CreateStructGEP (VAList, 4 );
4838
- RegAddr = Address::deprecated (Builder.CreateLoad (RegSaveAreaPtr),
4839
- CharUnits::fromQuantity (8 ));
4843
+ RegAddr = Address (Builder.CreateLoad (RegSaveAreaPtr), CGF. Int8Ty ,
4844
+ CharUnits::fromQuantity (8 ));
4840
4845
assert (RegAddr.getElementType () == CGF.Int8Ty );
4841
4846
4842
4847
// Floating-point registers start after the general-purpose registers.
@@ -4883,14 +4888,15 @@ Address PPC32_SVR4_ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAList,
4883
4888
}
4884
4889
4885
4890
Address OverflowAreaAddr = Builder.CreateStructGEP (VAList, 3 );
4886
- Address OverflowArea = Address::deprecated (
4887
- Builder.CreateLoad (OverflowAreaAddr, " argp.cur" ), OverflowAreaAlign);
4891
+ Address OverflowArea =
4892
+ Address (Builder.CreateLoad (OverflowAreaAddr, " argp.cur" ), CGF.Int8Ty ,
4893
+ OverflowAreaAlign);
4888
4894
// Round up address of argument to alignment
4889
4895
CharUnits Align = CGF.getContext ().getTypeAlignInChars (Ty);
4890
4896
if (Align > OverflowAreaAlign) {
4891
4897
llvm::Value *Ptr = OverflowArea.getPointer ();
4892
- OverflowArea = Address::deprecated (
4893
- emitRoundPointerUpToAlignment (CGF, Ptr, Align ), Align);
4898
+ OverflowArea = Address ( emitRoundPointerUpToAlignment (CGF, Ptr, Align),
4899
+ OverflowArea. getElementType ( ), Align);
4894
4900
}
4895
4901
4896
4902
MemAddr = Builder.CreateElementBitCast (OverflowArea, DirectTy);
@@ -4909,8 +4915,8 @@ Address PPC32_SVR4_ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAList,
4909
4915
4910
4916
// Load the pointer if the argument was passed indirectly.
4911
4917
if (isIndirect) {
4912
- Result = Address::deprecated (Builder.CreateLoad (Result, " aggr" ),
4913
- getContext ().getTypeAlignInChars (Ty));
4918
+ Result = Address (Builder.CreateLoad (Result, " aggr" ), ElementTy ,
4919
+ getContext ().getTypeAlignInChars (Ty));
4914
4920
}
4915
4921
4916
4922
return Result;
@@ -6060,7 +6066,7 @@ Address AArch64ABIInfo::EmitAAPCSVAArg(Address VAListAddr, QualType Ty,
6060
6066
Address BaseAddr (CGF.Builder .CreateInBoundsGEP (CGF.Int8Ty , reg_top, reg_offs),
6061
6067
CGF.Int8Ty , CharUnits::fromQuantity (IsFPR ? 16 : 8 ));
6062
6068
Address RegAddr = Address::invalid ();
6063
- llvm::Type *MemTy = CGF.ConvertTypeForMem (Ty);
6069
+ llvm::Type *MemTy = CGF.ConvertTypeForMem (Ty), *ElementTy = MemTy ;
6064
6070
6065
6071
if (IsIndirect) {
6066
6072
// If it's been passed indirectly (actually a struct), whatever we find from
@@ -6143,8 +6149,8 @@ Address AArch64ABIInfo::EmitAAPCSVAArg(Address VAListAddr, QualType Ty,
6143
6149
6144
6150
OnStackPtr = CGF.Builder .CreateIntToPtr (OnStackPtr, CGF.Int8PtrTy );
6145
6151
}
6146
- Address OnStackAddr = Address::deprecated (
6147
- OnStackPtr, std::max (CharUnits::fromQuantity (8 ), TyAlign));
6152
+ Address OnStackAddr = Address (OnStackPtr, CGF. Int8Ty ,
6153
+ std::max (CharUnits::fromQuantity (8 ), TyAlign));
6148
6154
6149
6155
// All stack slots are multiples of 8 bytes.
6150
6156
CharUnits StackSlotSize = CharUnits::fromQuantity (8 );
@@ -6180,8 +6186,8 @@ Address AArch64ABIInfo::EmitAAPCSVAArg(Address VAListAddr, QualType Ty,
6180
6186
OnStackBlock, " vaargs.addr" );
6181
6187
6182
6188
if (IsIndirect)
6183
- return Address::deprecated (CGF.Builder .CreateLoad (ResAddr, " vaarg.addr" ),
6184
- TyAlign);
6189
+ return Address (CGF.Builder .CreateLoad (ResAddr, " vaarg.addr" ), ElementTy ,
6190
+ TyAlign);
6185
6191
6186
6192
return ResAddr;
6187
6193
}
@@ -6199,8 +6205,8 @@ Address AArch64ABIInfo::EmitDarwinVAArg(Address VAListAddr, QualType Ty,
6199
6205
6200
6206
// Empty records are ignored for parameter passing purposes.
6201
6207
if (isEmptyRecord (getContext (), Ty, true )) {
6202
- Address Addr = Address::deprecated (
6203
- CGF. Builder . CreateLoad (VAListAddr, " ap.cur " ), SlotSize);
6208
+ Address Addr = Address (CGF. Builder . CreateLoad (VAListAddr, " ap.cur " ),
6209
+ getVAListElementType (CGF ), SlotSize);
6204
6210
Addr = CGF.Builder .CreateElementBitCast (Addr, CGF.ConvertTypeForMem (Ty));
6205
6211
return Addr;
6206
6212
}
@@ -6988,8 +6994,8 @@ Address ARMABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
6988
6994
6989
6995
// Empty records are ignored for parameter passing purposes.
6990
6996
if (isEmptyRecord (getContext (), Ty, true )) {
6991
- Address Addr =
6992
- Address::deprecated (CGF. Builder . CreateLoad (VAListAddr ), SlotSize);
6997
+ Address Addr = Address (CGF. Builder . CreateLoad (VAListAddr),
6998
+ getVAListElementType (CGF), SlotSize);
6993
6999
Addr = CGF.Builder .CreateElementBitCast (Addr, CGF.ConvertTypeForMem (Ty));
6994
7000
return Addr;
6995
7001
}
@@ -7562,9 +7568,9 @@ Address SystemZABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
7562
7568
// single (8 byte) or double (16 byte) stack slot.
7563
7569
Address OverflowArgAreaPtr =
7564
7570
CGF.Builder .CreateStructGEP (VAListAddr, 2 , " overflow_arg_area_ptr" );
7565
- Address OverflowArgArea = Address::deprecated (
7566
- CGF.Builder .CreateLoad (OverflowArgAreaPtr, " overflow_arg_area" ),
7567
- TyInfo.Align );
7571
+ Address OverflowArgArea =
7572
+ Address ( CGF.Builder .CreateLoad (OverflowArgAreaPtr, " overflow_arg_area" ),
7573
+ CGF. Int8Ty , TyInfo.Align );
7568
7574
Address MemAddr =
7569
7575
CGF.Builder .CreateElementBitCast (OverflowArgArea, DirectTy, " mem_addr" );
7570
7576
@@ -7639,9 +7645,9 @@ Address SystemZABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
7639
7645
// Work out the address of a stack argument.
7640
7646
Address OverflowArgAreaPtr =
7641
7647
CGF.Builder .CreateStructGEP (VAListAddr, 2 , " overflow_arg_area_ptr" );
7642
- Address OverflowArgArea = Address::deprecated (
7643
- CGF.Builder .CreateLoad (OverflowArgAreaPtr, " overflow_arg_area" ),
7644
- PaddedSize);
7648
+ Address OverflowArgArea =
7649
+ Address ( CGF.Builder .CreateLoad (OverflowArgAreaPtr, " overflow_arg_area" ),
7650
+ CGF. Int8Ty , PaddedSize);
7645
7651
Address RawMemAddr =
7646
7652
CGF.Builder .CreateConstByteGEP (OverflowArgArea, Padding, " raw_mem_addr" );
7647
7653
Address MemAddr =
@@ -7661,8 +7667,8 @@ Address SystemZABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
7661
7667
" va_arg.addr" );
7662
7668
7663
7669
if (IsIndirect)
7664
- ResAddr = Address::deprecated (
7665
- CGF. Builder . CreateLoad (ResAddr, " indirect_arg " ), TyInfo.Align );
7670
+ ResAddr = Address (CGF. Builder . CreateLoad (ResAddr, " indirect_arg " ), ArgTy,
7671
+ TyInfo.Align );
7666
7672
7667
7673
return ResAddr;
7668
7674
}
@@ -8600,8 +8606,8 @@ Address HexagonABIInfo::EmitVAArgFromMemory(CodeGenFunction &CGF,
8600
8606
// overflow area pointer to the argument type.
8601
8607
llvm::Type *PTy = CGF.ConvertTypeForMem (Ty);
8602
8608
Address AddrTyped = CGF.Builder .CreateElementBitCast (
8603
- Address::deprecated (__overflow_area_pointer,
8604
- CharUnits::fromQuantity (Align)),
8609
+ Address (__overflow_area_pointer, CGF. Int8Ty ,
8610
+ CharUnits::fromQuantity (Align)),
8605
8611
PTy);
8606
8612
8607
8613
// Round up to the minimum stack alignment for varargs which is 4 bytes.
@@ -8634,7 +8640,7 @@ Address HexagonABIInfo::EmitVAArgForHexagon(CodeGenFunction &CGF,
8634
8640
Addr = Builder.CreateIntToPtr (AddrAsInt, BP);
8635
8641
}
8636
8642
Address AddrTyped = Builder.CreateElementBitCast (
8637
- Address::deprecated (Addr, CharUnits::fromQuantity (TyAlign)),
8643
+ Address (Addr, CGF. Int8Ty , CharUnits::fromQuantity (TyAlign)),
8638
8644
CGF.ConvertType (Ty));
8639
8645
8640
8646
uint64_t Offset = llvm::alignTo (CGF.getContext ().getTypeSize (Ty) / 8 , 4 );
@@ -9707,8 +9713,8 @@ Address SparcV9ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
9707
9713
CharUnits SlotSize = CharUnits::fromQuantity (8 );
9708
9714
9709
9715
CGBuilderTy &Builder = CGF.Builder ;
9710
- Address Addr =
9711
- Address::deprecated (Builder. CreateLoad (VAListAddr, " ap.cur " ), SlotSize);
9716
+ Address Addr = Address (Builder. CreateLoad (VAListAddr, " ap.cur " ),
9717
+ getVAListElementType (CGF ), SlotSize);
9712
9718
llvm::Type *ArgPtrTy = llvm::PointerType::getUnqual (ArgTy);
9713
9719
9714
9720
auto TypeInfo = getContext ().getTypeInfoInChars (Ty);
@@ -9739,8 +9745,8 @@ Address SparcV9ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
9739
9745
case ABIArgInfo::IndirectAliased:
9740
9746
Stride = SlotSize;
9741
9747
ArgAddr = Builder.CreateElementBitCast (Addr, ArgPtrTy, " indirect" );
9742
- ArgAddr = Address::deprecated (Builder.CreateLoad (ArgAddr, " indirect.arg" ),
9743
- TypeInfo.Align );
9748
+ ArgAddr = Address (Builder.CreateLoad (ArgAddr, " indirect.arg" ), ArgTy ,
9749
+ TypeInfo.Align );
9744
9750
break ;
9745
9751
9746
9752
case ABIArgInfo::Ignore:
@@ -10085,7 +10091,8 @@ Address XCoreABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
10085
10091
10086
10092
// Get the VAList.
10087
10093
CharUnits SlotSize = CharUnits::fromQuantity (4 );
10088
- Address AP = Address::deprecated (Builder.CreateLoad (VAListAddr), SlotSize);
10094
+ Address AP = Address (Builder.CreateLoad (VAListAddr),
10095
+ getVAListElementType (CGF), SlotSize);
10089
10096
10090
10097
// Handle the argument.
10091
10098
ABIArgInfo AI = classifyArgumentType (Ty);
@@ -10116,7 +10123,7 @@ Address XCoreABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
10116
10123
case ABIArgInfo::Indirect:
10117
10124
case ABIArgInfo::IndirectAliased:
10118
10125
Val = Builder.CreateElementBitCast (AP, ArgPtrTy);
10119
- Val = Address::deprecated (Builder.CreateLoad (Val), TypeAlign);
10126
+ Val = Address (Builder.CreateLoad (Val), ArgTy , TypeAlign);
10120
10127
ArgSize = SlotSize;
10121
10128
break ;
10122
10129
}
@@ -11130,8 +11137,8 @@ Address RISCVABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
11130
11137
11131
11138
// Empty records are ignored for parameter passing purposes.
11132
11139
if (isEmptyRecord (getContext (), Ty, true )) {
11133
- Address Addr =
11134
- Address::deprecated (CGF. Builder . CreateLoad (VAListAddr ), SlotSize);
11140
+ Address Addr = Address (CGF. Builder . CreateLoad (VAListAddr),
11141
+ getVAListElementType (CGF), SlotSize);
11135
11142
Addr = CGF.Builder .CreateElementBitCast (Addr, CGF.ConvertTypeForMem (Ty));
11136
11143
return Addr;
11137
11144
}
0 commit comments