Skip to content

Commit 03d5b7c

Browse files
committed
[MemorySanitizer] Don't create types pointers (NFC)
Everything in this pass uses a single addrspace 0 pointer type. Don't try to create it using the typed pointer ctor. This allows removing the type argument from getShadowPtrForVAArgument().
1 parent a95b212 commit 03d5b7c

File tree

1 file changed

+52
-77
lines changed

1 file changed

+52
-77
lines changed

llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp

Lines changed: 52 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -769,8 +769,7 @@ MemorySanitizer::getOrInsertMsanMetadataFunction(Module &M, StringRef Name,
769769
ArgsTy... Args) {
770770
if (TargetTriple.getArch() == Triple::systemz) {
771771
// SystemZ ABI: shadow/origin pair is returned via a hidden parameter.
772-
return M.getOrInsertFunction(Name, Type::getVoidTy(*C),
773-
PointerType::get(MsanMetadata, 0),
772+
return M.getOrInsertFunction(Name, Type::getVoidTy(*C), PtrTy,
774773
std::forward<ArgsTy>(Args)...);
775774
}
776775

@@ -804,29 +803,26 @@ void MemorySanitizer::createKernelApi(Module &M, const TargetLibraryInfo &TLI) {
804803
ArrayType::get(IRB.getInt64Ty(), kParamTLSSize / 8), /* va_arg_origin */
805804
IRB.getInt64Ty(), ArrayType::get(OriginTy, kParamTLSSize / 4), OriginTy,
806805
OriginTy);
807-
MsanGetContextStateFn = M.getOrInsertFunction(
808-
"__msan_get_context_state", PointerType::get(MsanContextStateTy, 0));
806+
MsanGetContextStateFn =
807+
M.getOrInsertFunction("__msan_get_context_state", PtrTy);
809808

810-
MsanMetadata = StructType::get(PointerType::get(IRB.getInt8Ty(), 0),
811-
PointerType::get(IRB.getInt32Ty(), 0));
809+
MsanMetadata = StructType::get(PtrTy, PtrTy);
812810

813811
for (int ind = 0, size = 1; ind < 4; ind++, size <<= 1) {
814812
std::string name_load =
815813
"__msan_metadata_ptr_for_load_" + std::to_string(size);
816814
std::string name_store =
817815
"__msan_metadata_ptr_for_store_" + std::to_string(size);
818-
MsanMetadataPtrForLoad_1_8[ind] = getOrInsertMsanMetadataFunction(
819-
M, name_load, PointerType::get(IRB.getInt8Ty(), 0));
820-
MsanMetadataPtrForStore_1_8[ind] = getOrInsertMsanMetadataFunction(
821-
M, name_store, PointerType::get(IRB.getInt8Ty(), 0));
816+
MsanMetadataPtrForLoad_1_8[ind] =
817+
getOrInsertMsanMetadataFunction(M, name_load, PtrTy);
818+
MsanMetadataPtrForStore_1_8[ind] =
819+
getOrInsertMsanMetadataFunction(M, name_store, PtrTy);
822820
}
823821

824822
MsanMetadataPtrForLoadN = getOrInsertMsanMetadataFunction(
825-
M, "__msan_metadata_ptr_for_load_n", PointerType::get(IRB.getInt8Ty(), 0),
826-
IRB.getInt64Ty());
823+
M, "__msan_metadata_ptr_for_load_n", PtrTy, IRB.getInt64Ty());
827824
MsanMetadataPtrForStoreN = getOrInsertMsanMetadataFunction(
828-
M, "__msan_metadata_ptr_for_store_n",
829-
PointerType::get(IRB.getInt8Ty(), 0), IRB.getInt64Ty());
825+
M, "__msan_metadata_ptr_for_store_n", PtrTy, IRB.getInt64Ty());
830826

831827
// Functions for poisoning and unpoisoning memory.
832828
MsanPoisonAllocaFn = M.getOrInsertFunction(
@@ -937,9 +933,8 @@ void MemorySanitizer::initializeCallbacks(Module &M, const TargetLibraryInfo &TL
937933
TLI.getAttrList(C, {1}, /*Signed=*/true),
938934
PtrTy, PtrTy, IRB.getInt32Ty(), IntptrTy);
939935

940-
MsanInstrumentAsmStoreFn =
941-
M.getOrInsertFunction("__msan_instrument_asm_store", IRB.getVoidTy(),
942-
PointerType::get(IRB.getInt8Ty(), 0), IntptrTy);
936+
MsanInstrumentAsmStoreFn = M.getOrInsertFunction(
937+
"__msan_instrument_asm_store", IRB.getVoidTy(), PtrTy, IntptrTy);
943938

944939
if (CompileKernel) {
945940
createKernelApi(M, TLI);
@@ -1264,8 +1259,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
12641259
Align CurrentAlignment = Alignment;
12651260
if (Alignment >= IntptrAlignment && IntptrSize > kOriginSize) {
12661261
Value *IntptrOrigin = originToIntptr(IRB, Origin);
1267-
Value *IntptrOriginPtr =
1268-
IRB.CreatePointerCast(OriginPtr, PointerType::get(MS.IntptrTy, 0));
1262+
Value *IntptrOriginPtr = IRB.CreatePointerCast(OriginPtr, MS.PtrTy);
12691263
for (unsigned i = 0; i < Size / IntptrSize; ++i) {
12701264
Value *Ptr = i ? IRB.CreateConstGEP1_32(MS.IntptrTy, IntptrOriginPtr, i)
12711265
: IntptrOriginPtr;
@@ -1691,7 +1685,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
16911685
VectTy->getElementCount());
16921686
}
16931687
assert(IntPtrTy == MS.IntptrTy);
1694-
return PointerType::get(*MS.C, 0);
1688+
return MS.PtrTy;
16951689
}
16961690

16971691
Constant *constToIntPtr(Type *IntPtrTy, uint64_t C) const {
@@ -1787,8 +1781,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
17871781
TypeSize Size = DL.getTypeStoreSize(ShadowTy);
17881782

17891783
FunctionCallee Getter = MS.getKmsanShadowOriginAccessFn(isStore, Size);
1790-
Value *AddrCast =
1791-
IRB.CreatePointerCast(Addr, PointerType::get(IRB.getInt8Ty(), 0));
1784+
Value *AddrCast = IRB.CreatePointerCast(Addr, MS.PtrTy);
17921785
if (Getter) {
17931786
ShadowOriginPtrs = createMetadataCall(IRB, Getter, AddrCast);
17941787
} else {
@@ -1799,7 +1792,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
17991792
AddrCast, SizeVal);
18001793
}
18011794
Value *ShadowPtr = IRB.CreateExtractValue(ShadowOriginPtrs, 0);
1802-
ShadowPtr = IRB.CreatePointerCast(ShadowPtr, PointerType::get(ShadowTy, 0));
1795+
ShadowPtr = IRB.CreatePointerCast(ShadowPtr, MS.PtrTy);
18031796
Value *OriginPtr = IRB.CreateExtractValue(ShadowOriginPtrs, 1);
18041797

18051798
return std::make_pair(ShadowPtr, OriginPtr);
@@ -5009,21 +5002,19 @@ struct VarArgHelperBase : public VarArgHelper {
50095002
}
50105003

50115004
/// Compute the shadow address for a given va_arg.
5012-
Value *getShadowPtrForVAArgument(Type *Ty, IRBuilder<> &IRB,
5013-
unsigned ArgOffset) {
5005+
Value *getShadowPtrForVAArgument(IRBuilder<> &IRB, unsigned ArgOffset) {
50145006
Value *Base = IRB.CreatePointerCast(MS.VAArgTLS, MS.IntptrTy);
50155007
Base = IRB.CreateAdd(Base, ConstantInt::get(MS.IntptrTy, ArgOffset));
5016-
return IRB.CreateIntToPtr(Base, PointerType::get(MSV.getShadowTy(Ty), 0),
5017-
"_msarg_va_s");
5008+
return IRB.CreateIntToPtr(Base, MS.PtrTy, "_msarg_va_s");
50185009
}
50195010

50205011
/// Compute the shadow address for a given va_arg.
5021-
Value *getShadowPtrForVAArgument(Type *Ty, IRBuilder<> &IRB,
5022-
unsigned ArgOffset, unsigned ArgSize) {
5012+
Value *getShadowPtrForVAArgument(IRBuilder<> &IRB, unsigned ArgOffset,
5013+
unsigned ArgSize) {
50235014
// Make sure we don't overflow __msan_va_arg_tls.
50245015
if (ArgOffset + ArgSize > kParamTLSSize)
50255016
return nullptr;
5026-
return getShadowPtrForVAArgument(Ty, IRB, ArgOffset);
5017+
return getShadowPtrForVAArgument(IRB, ArgOffset);
50275018
}
50285019

50295020
/// Compute the origin address for a given va_arg.
@@ -5033,8 +5024,7 @@ struct VarArgHelperBase : public VarArgHelper {
50335024
// getShadowPtrForVAArgument(), so __msan_va_arg_origin_tls can never
50345025
// overflow.
50355026
Base = IRB.CreateAdd(Base, ConstantInt::get(MS.IntptrTy, ArgOffset));
5036-
return IRB.CreateIntToPtr(Base, PointerType::get(MS.OriginTy, 0),
5037-
"_msarg_va_o");
5027+
return IRB.CreateIntToPtr(Base, MS.PtrTy, "_msarg_va_o");
50385028
}
50395029

50405030
void CleanUnusedTLS(IRBuilder<> &IRB, Value *ShadowBase,
@@ -5147,8 +5137,7 @@ struct VarArgAMD64Helper : public VarArgHelperBase {
51475137
uint64_t ArgSize = DL.getTypeAllocSize(RealTy);
51485138
uint64_t AlignedSize = alignTo(ArgSize, 8);
51495139
unsigned BaseOffset = OverflowOffset;
5150-
Value *ShadowBase =
5151-
getShadowPtrForVAArgument(RealTy, IRB, OverflowOffset);
5140+
Value *ShadowBase = getShadowPtrForVAArgument(IRB, OverflowOffset);
51525141
Value *OriginBase = nullptr;
51535142
if (MS.TrackOrigins)
51545143
OriginBase = getOriginPtrForVAArgument(IRB, OverflowOffset);
@@ -5177,14 +5166,14 @@ struct VarArgAMD64Helper : public VarArgHelperBase {
51775166
Value *ShadowBase, *OriginBase = nullptr;
51785167
switch (AK) {
51795168
case AK_GeneralPurpose:
5180-
ShadowBase = getShadowPtrForVAArgument(A->getType(), IRB, GpOffset);
5169+
ShadowBase = getShadowPtrForVAArgument(IRB, GpOffset);
51815170
if (MS.TrackOrigins)
51825171
OriginBase = getOriginPtrForVAArgument(IRB, GpOffset);
51835172
GpOffset += 8;
51845173
assert(GpOffset <= kParamTLSSize);
51855174
break;
51865175
case AK_FloatingPoint:
5187-
ShadowBase = getShadowPtrForVAArgument(A->getType(), IRB, FpOffset);
5176+
ShadowBase = getShadowPtrForVAArgument(IRB, FpOffset);
51885177
if (MS.TrackOrigins)
51895178
OriginBase = getOriginPtrForVAArgument(IRB, FpOffset);
51905179
FpOffset += 16;
@@ -5196,8 +5185,7 @@ struct VarArgAMD64Helper : public VarArgHelperBase {
51965185
uint64_t ArgSize = DL.getTypeAllocSize(A->getType());
51975186
uint64_t AlignedSize = alignTo(ArgSize, 8);
51985187
unsigned BaseOffset = OverflowOffset;
5199-
ShadowBase =
5200-
getShadowPtrForVAArgument(A->getType(), IRB, OverflowOffset);
5188+
ShadowBase = getShadowPtrForVAArgument(IRB, OverflowOffset);
52015189
if (MS.TrackOrigins) {
52025190
OriginBase = getOriginPtrForVAArgument(IRB, OverflowOffset);
52035191
}
@@ -5263,13 +5251,11 @@ struct VarArgAMD64Helper : public VarArgHelperBase {
52635251
NextNodeIRBuilder IRB(OrigInst);
52645252
Value *VAListTag = OrigInst->getArgOperand(0);
52655253

5266-
Type *RegSaveAreaPtrTy = PointerType::getUnqual(*MS.C); // i64*
52675254
Value *RegSaveAreaPtrPtr = IRB.CreateIntToPtr(
52685255
IRB.CreateAdd(IRB.CreatePtrToInt(VAListTag, MS.IntptrTy),
52695256
ConstantInt::get(MS.IntptrTy, 16)),
5270-
PointerType::get(RegSaveAreaPtrTy, 0));
5271-
Value *RegSaveAreaPtr =
5272-
IRB.CreateLoad(RegSaveAreaPtrTy, RegSaveAreaPtrPtr);
5257+
MS.PtrTy);
5258+
Value *RegSaveAreaPtr = IRB.CreateLoad(MS.PtrTy, RegSaveAreaPtrPtr);
52735259
Value *RegSaveAreaShadowPtr, *RegSaveAreaOriginPtr;
52745260
const Align Alignment = Align(16);
52755261
std::tie(RegSaveAreaShadowPtr, RegSaveAreaOriginPtr) =
@@ -5280,13 +5266,12 @@ struct VarArgAMD64Helper : public VarArgHelperBase {
52805266
if (MS.TrackOrigins)
52815267
IRB.CreateMemCpy(RegSaveAreaOriginPtr, Alignment, VAArgTLSOriginCopy,
52825268
Alignment, AMD64FpEndOffset);
5283-
Type *OverflowArgAreaPtrTy = PointerType::getUnqual(*MS.C); // i64*
52845269
Value *OverflowArgAreaPtrPtr = IRB.CreateIntToPtr(
52855270
IRB.CreateAdd(IRB.CreatePtrToInt(VAListTag, MS.IntptrTy),
52865271
ConstantInt::get(MS.IntptrTy, 8)),
5287-
PointerType::get(OverflowArgAreaPtrTy, 0));
5272+
MS.PtrTy);
52885273
Value *OverflowArgAreaPtr =
5289-
IRB.CreateLoad(OverflowArgAreaPtrTy, OverflowArgAreaPtrPtr);
5274+
IRB.CreateLoad(MS.PtrTy, OverflowArgAreaPtrPtr);
52905275
Value *OverflowArgAreaShadowPtr, *OverflowArgAreaOriginPtr;
52915276
std::tie(OverflowArgAreaShadowPtr, OverflowArgAreaOriginPtr) =
52925277
MSV.getShadowOriginPtr(OverflowArgAreaPtr, IRB, IRB.getInt8Ty(),
@@ -5329,7 +5314,7 @@ struct VarArgMIPS64Helper : public VarArgHelperBase {
53295314
if (ArgSize < 8)
53305315
VAArgOffset += (8 - ArgSize);
53315316
}
5332-
Base = getShadowPtrForVAArgument(A->getType(), IRB, VAArgOffset, ArgSize);
5317+
Base = getShadowPtrForVAArgument(IRB, VAArgOffset, ArgSize);
53335318
VAArgOffset += ArgSize;
53345319
VAArgOffset = alignTo(VAArgOffset, 8);
53355320
if (!Base)
@@ -5371,12 +5356,9 @@ struct VarArgMIPS64Helper : public VarArgHelperBase {
53715356
for (CallInst *OrigInst : VAStartInstrumentationList) {
53725357
NextNodeIRBuilder IRB(OrigInst);
53735358
Value *VAListTag = OrigInst->getArgOperand(0);
5374-
Type *RegSaveAreaPtrTy = PointerType::getUnqual(*MS.C); // i64*
5375-
Value *RegSaveAreaPtrPtr =
5376-
IRB.CreateIntToPtr(IRB.CreatePtrToInt(VAListTag, MS.IntptrTy),
5377-
PointerType::get(RegSaveAreaPtrTy, 0));
5378-
Value *RegSaveAreaPtr =
5379-
IRB.CreateLoad(RegSaveAreaPtrTy, RegSaveAreaPtrPtr);
5359+
Value *RegSaveAreaPtrPtr = IRB.CreateIntToPtr(
5360+
IRB.CreatePtrToInt(VAListTag, MS.IntptrTy), MS.PtrTy);
5361+
Value *RegSaveAreaPtr = IRB.CreateLoad(MS.PtrTy, RegSaveAreaPtrPtr);
53805362
Value *RegSaveAreaShadowPtr, *RegSaveAreaOriginPtr;
53815363
const Align Alignment = Align(8);
53825364
std::tie(RegSaveAreaShadowPtr, RegSaveAreaOriginPtr) =
@@ -5460,11 +5442,11 @@ struct VarArgAArch64Helper : public VarArgHelperBase {
54605442
Value *Base;
54615443
switch (AK) {
54625444
case AK_GeneralPurpose:
5463-
Base = getShadowPtrForVAArgument(A->getType(), IRB, GrOffset);
5445+
Base = getShadowPtrForVAArgument(IRB, GrOffset);
54645446
GrOffset += 8 * RegNum;
54655447
break;
54665448
case AK_FloatingPoint:
5467-
Base = getShadowPtrForVAArgument(A->getType(), IRB, VrOffset);
5449+
Base = getShadowPtrForVAArgument(IRB, VrOffset);
54685450
VrOffset += 16 * RegNum;
54695451
break;
54705452
case AK_Memory:
@@ -5475,7 +5457,7 @@ struct VarArgAArch64Helper : public VarArgHelperBase {
54755457
uint64_t ArgSize = DL.getTypeAllocSize(A->getType());
54765458
uint64_t AlignedSize = alignTo(ArgSize, 8);
54775459
unsigned BaseOffset = OverflowOffset;
5478-
Base = getShadowPtrForVAArgument(A->getType(), IRB, BaseOffset);
5460+
Base = getShadowPtrForVAArgument(IRB, BaseOffset);
54795461
OverflowOffset += AlignedSize;
54805462
if (OverflowOffset > kParamTLSSize) {
54815463
// We have no space to copy shadow there.
@@ -5500,7 +5482,7 @@ struct VarArgAArch64Helper : public VarArgHelperBase {
55005482
Value *SaveAreaPtrPtr = IRB.CreateIntToPtr(
55015483
IRB.CreateAdd(IRB.CreatePtrToInt(VAListTag, MS.IntptrTy),
55025484
ConstantInt::get(MS.IntptrTy, offset)),
5503-
PointerType::get(*MS.C, 0));
5485+
MS.PtrTy);
55045486
return IRB.CreateLoad(Type::getInt64Ty(*MS.C), SaveAreaPtrPtr);
55055487
}
55065488

@@ -5509,7 +5491,7 @@ struct VarArgAArch64Helper : public VarArgHelperBase {
55095491
Value *SaveAreaPtr = IRB.CreateIntToPtr(
55105492
IRB.CreateAdd(IRB.CreatePtrToInt(VAListTag, MS.IntptrTy),
55115493
ConstantInt::get(MS.IntptrTy, offset)),
5512-
PointerType::get(*MS.C, 0));
5494+
MS.PtrTy);
55135495
Value *SaveArea32 = IRB.CreateLoad(IRB.getInt32Ty(), SaveAreaPtr);
55145496
return IRB.CreateSExt(SaveArea32, MS.IntptrTy);
55155497
}
@@ -5670,8 +5652,8 @@ struct VarArgPowerPC64Helper : public VarArgHelperBase {
56705652
ArgAlign = Align(8);
56715653
VAArgOffset = alignTo(VAArgOffset, ArgAlign);
56725654
if (!IsFixed) {
5673-
Value *Base = getShadowPtrForVAArgument(
5674-
RealTy, IRB, VAArgOffset - VAArgBase, ArgSize);
5655+
Value *Base =
5656+
getShadowPtrForVAArgument(IRB, VAArgOffset - VAArgBase, ArgSize);
56755657
if (Base) {
56765658
Value *AShadowPtr, *AOriginPtr;
56775659
std::tie(AShadowPtr, AOriginPtr) =
@@ -5707,8 +5689,8 @@ struct VarArgPowerPC64Helper : public VarArgHelperBase {
57075689
VAArgOffset += (8 - ArgSize);
57085690
}
57095691
if (!IsFixed) {
5710-
Base = getShadowPtrForVAArgument(A->getType(), IRB,
5711-
VAArgOffset - VAArgBase, ArgSize);
5692+
Base =
5693+
getShadowPtrForVAArgument(IRB, VAArgOffset - VAArgBase, ArgSize);
57125694
if (Base)
57135695
IRB.CreateAlignedStore(MSV.getShadow(A), Base, kShadowTLSAlignment);
57145696
}
@@ -5755,12 +5737,9 @@ struct VarArgPowerPC64Helper : public VarArgHelperBase {
57555737
for (CallInst *OrigInst : VAStartInstrumentationList) {
57565738
NextNodeIRBuilder IRB(OrigInst);
57575739
Value *VAListTag = OrigInst->getArgOperand(0);
5758-
Type *RegSaveAreaPtrTy = PointerType::getUnqual(*MS.C); // i64*
5759-
Value *RegSaveAreaPtrPtr =
5760-
IRB.CreateIntToPtr(IRB.CreatePtrToInt(VAListTag, MS.IntptrTy),
5761-
PointerType::get(RegSaveAreaPtrTy, 0));
5762-
Value *RegSaveAreaPtr =
5763-
IRB.CreateLoad(RegSaveAreaPtrTy, RegSaveAreaPtrPtr);
5740+
Value *RegSaveAreaPtrPtr = IRB.CreateIntToPtr(
5741+
IRB.CreatePtrToInt(VAListTag, MS.IntptrTy), MS.PtrTy);
5742+
Value *RegSaveAreaPtr = IRB.CreateLoad(MS.PtrTy, RegSaveAreaPtrPtr);
57645743
Value *RegSaveAreaShadowPtr, *RegSaveAreaOriginPtr;
57655744
const Align Alignment = Align(8);
57665745
std::tie(RegSaveAreaShadowPtr, RegSaveAreaOriginPtr) =
@@ -5855,7 +5834,7 @@ struct VarArgSystemZHelper : public VarArgHelperBase {
58555834
Type *T = A->getType();
58565835
ArgKind AK = classifyArgument(T);
58575836
if (AK == ArgKind::Indirect) {
5858-
T = PointerType::get(T, 0);
5837+
T = MS.PtrTy;
58595838
AK = ArgKind::GeneralPurpose;
58605839
}
58615840
if (AK == ArgKind::GeneralPurpose && GpOffset >= SystemZGpEndOffset)
@@ -5948,8 +5927,7 @@ struct VarArgSystemZHelper : public VarArgHelperBase {
59485927
if (SE != ShadowExtension::None)
59495928
Shadow = MSV.CreateShadowCast(IRB, Shadow, IRB.getInt64Ty(),
59505929
/*Signed*/ SE == ShadowExtension::Sign);
5951-
ShadowBase = IRB.CreateIntToPtr(
5952-
ShadowBase, PointerType::get(Shadow->getType(), 0), "_msarg_va_s");
5930+
ShadowBase = IRB.CreateIntToPtr(ShadowBase, MS.PtrTy, "_msarg_va_s");
59535931
IRB.CreateStore(Shadow, ShadowBase);
59545932
if (MS.TrackOrigins) {
59555933
Value *Origin = MSV.getOrigin(A);
@@ -5964,13 +5942,12 @@ struct VarArgSystemZHelper : public VarArgHelperBase {
59645942
}
59655943

59665944
void copyRegSaveArea(IRBuilder<> &IRB, Value *VAListTag) {
5967-
Type *RegSaveAreaPtrTy = PointerType::getUnqual(*MS.C); // i64*
59685945
Value *RegSaveAreaPtrPtr = IRB.CreateIntToPtr(
59695946
IRB.CreateAdd(
59705947
IRB.CreatePtrToInt(VAListTag, MS.IntptrTy),
59715948
ConstantInt::get(MS.IntptrTy, SystemZRegSaveAreaPtrOffset)),
5972-
PointerType::get(RegSaveAreaPtrTy, 0));
5973-
Value *RegSaveAreaPtr = IRB.CreateLoad(RegSaveAreaPtrTy, RegSaveAreaPtrPtr);
5949+
MS.PtrTy);
5950+
Value *RegSaveAreaPtr = IRB.CreateLoad(MS.PtrTy, RegSaveAreaPtrPtr);
59745951
Value *RegSaveAreaShadowPtr, *RegSaveAreaOriginPtr;
59755952
const Align Alignment = Align(8);
59765953
std::tie(RegSaveAreaShadowPtr, RegSaveAreaOriginPtr) =
@@ -5991,14 +5968,12 @@ struct VarArgSystemZHelper : public VarArgHelperBase {
59915968
// FIXME: This implementation limits OverflowOffset to kParamTLSSize, so we
59925969
// don't know real overflow size and can't clear shadow beyond kParamTLSSize.
59935970
void copyOverflowArea(IRBuilder<> &IRB, Value *VAListTag) {
5994-
Type *OverflowArgAreaPtrTy = PointerType::getUnqual(*MS.C); // i64*
59955971
Value *OverflowArgAreaPtrPtr = IRB.CreateIntToPtr(
59965972
IRB.CreateAdd(
59975973
IRB.CreatePtrToInt(VAListTag, MS.IntptrTy),
59985974
ConstantInt::get(MS.IntptrTy, SystemZOverflowArgAreaPtrOffset)),
5999-
PointerType::get(OverflowArgAreaPtrTy, 0));
6000-
Value *OverflowArgAreaPtr =
6001-
IRB.CreateLoad(OverflowArgAreaPtrTy, OverflowArgAreaPtrPtr);
5975+
MS.PtrTy);
5976+
Value *OverflowArgAreaPtr = IRB.CreateLoad(MS.PtrTy, OverflowArgAreaPtrPtr);
60025977
Value *OverflowArgAreaShadowPtr, *OverflowArgAreaOriginPtr;
60035978
const Align Alignment = Align(8);
60045979
std::tie(OverflowArgAreaShadowPtr, OverflowArgAreaOriginPtr) =

0 commit comments

Comments
 (0)