Skip to content

Commit 2c85b24

Browse files
committed
[msan] Simplify code based on opaque pointers
Stop using Type::getPointerTo as we do not need typed pointers nowadays. Remove no longer used arguments to getOriginPtrForArgument, getShadowPtrForRetval and getOriginPtrForRetval.
1 parent 360ea62 commit 2c85b24

File tree

1 file changed

+25
-27
lines changed

1 file changed

+25
-27
lines changed

llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ class MemorySanitizer {
574574

575575
Triple TargetTriple;
576576
LLVMContext *C;
577-
Type *IntptrTy;
577+
Type *IntptrTy; ///< Integer type with the size of a ptr in default AS.
578578
Type *OriginTy;
579579

580580
// XxxTLS variables represent the per-thread state in MSan and per-task state
@@ -1676,7 +1676,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
16761676
VectTy->getElementCount());
16771677
}
16781678
assert(IntPtrTy == MS.IntptrTy);
1679-
return ShadowTy->getPointerTo();
1679+
return PointerType::get(*MS.C, 0);
16801680
}
16811681

16821682
Constant *constToIntPtr(Type *IntPtrTy, uint64_t C) const {
@@ -1800,11 +1800,11 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
18001800
// TODO: Support callbacs with vectors of addresses.
18011801
unsigned NumElements = cast<FixedVectorType>(VectTy)->getNumElements();
18021802
Value *ShadowPtrs = ConstantInt::getNullValue(
1803-
FixedVectorType::get(ShadowTy->getPointerTo(), NumElements));
1803+
FixedVectorType::get(IRB.getPtrTy(), NumElements));
18041804
Value *OriginPtrs = nullptr;
18051805
if (MS.TrackOrigins)
18061806
OriginPtrs = ConstantInt::getNullValue(
1807-
FixedVectorType::get(MS.OriginTy->getPointerTo(), NumElements));
1807+
FixedVectorType::get(IRB.getPtrTy(), NumElements));
18081808
for (unsigned i = 0; i < NumElements; ++i) {
18091809
Value *OneAddr =
18101810
IRB.CreateExtractElement(Addr, ConstantInt::get(IRB.getInt32Ty(), i));
@@ -1832,33 +1832,30 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
18321832
/// Compute the shadow address for a given function argument.
18331833
///
18341834
/// Shadow = ParamTLS+ArgOffset.
1835-
Value *getShadowPtrForArgument(Value *A, IRBuilder<> &IRB, int ArgOffset) {
1835+
Value *getShadowPtrForArgument(IRBuilder<> &IRB, int ArgOffset) {
18361836
Value *Base = IRB.CreatePointerCast(MS.ParamTLS, MS.IntptrTy);
18371837
if (ArgOffset)
18381838
Base = IRB.CreateAdd(Base, ConstantInt::get(MS.IntptrTy, ArgOffset));
1839-
return IRB.CreateIntToPtr(Base, PointerType::get(getShadowTy(A), 0),
1840-
"_msarg");
1839+
return IRB.CreateIntToPtr(Base, IRB.getPtrTy(0), "_msarg");
18411840
}
18421841

18431842
/// Compute the origin address for a given function argument.
1844-
Value *getOriginPtrForArgument(Value *A, IRBuilder<> &IRB, int ArgOffset) {
1843+
Value *getOriginPtrForArgument(IRBuilder<> &IRB, int ArgOffset) {
18451844
if (!MS.TrackOrigins)
18461845
return nullptr;
18471846
Value *Base = IRB.CreatePointerCast(MS.ParamOriginTLS, MS.IntptrTy);
18481847
if (ArgOffset)
18491848
Base = IRB.CreateAdd(Base, ConstantInt::get(MS.IntptrTy, ArgOffset));
1850-
return IRB.CreateIntToPtr(Base, PointerType::get(MS.OriginTy, 0),
1851-
"_msarg_o");
1849+
return IRB.CreateIntToPtr(Base, IRB.getPtrTy(0), "_msarg_o");
18521850
}
18531851

18541852
/// Compute the shadow address for a retval.
1855-
Value *getShadowPtrForRetval(Value *A, IRBuilder<> &IRB) {
1856-
return IRB.CreatePointerCast(MS.RetvalTLS,
1857-
PointerType::get(getShadowTy(A), 0), "_msret");
1853+
Value *getShadowPtrForRetval(IRBuilder<> &IRB) {
1854+
return IRB.CreatePointerCast(MS.RetvalTLS, IRB.getPtrTy(0), "_msret");
18581855
}
18591856

18601857
/// Compute the origin address for a retval.
1861-
Value *getOriginPtrForRetval(IRBuilder<> &IRB) {
1858+
Value *getOriginPtrForRetval() {
18621859
// We keep a single origin for the entire retval. Might be too optimistic.
18631860
return MS.RetvalOriginTLS;
18641861
}
@@ -1982,7 +1979,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
19821979
CpShadowPtr, Constant::getNullValue(EntryIRB.getInt8Ty()),
19831980
Size, ArgAlign);
19841981
} else {
1985-
Value *Base = getShadowPtrForArgument(&FArg, EntryIRB, ArgOffset);
1982+
Value *Base = getShadowPtrForArgument(EntryIRB, ArgOffset);
19861983
const Align CopyAlign = std::min(ArgAlign, kShadowTLSAlignment);
19871984
Value *Cpy = EntryIRB.CreateMemCpy(CpShadowPtr, CopyAlign, Base,
19881985
CopyAlign, Size);
@@ -1991,7 +1988,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
19911988

19921989
if (MS.TrackOrigins) {
19931990
Value *OriginPtr =
1994-
getOriginPtrForArgument(&FArg, EntryIRB, ArgOffset);
1991+
getOriginPtrForArgument(EntryIRB, ArgOffset);
19951992
// FIXME: OriginSize should be:
19961993
// alignTo(V % kMinOriginAlignment + Size, kMinOriginAlignment)
19971994
unsigned OriginSize = alignTo(Size, kMinOriginAlignment);
@@ -2010,12 +2007,12 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
20102007
setOrigin(A, getCleanOrigin());
20112008
} else {
20122009
// Shadow over TLS
2013-
Value *Base = getShadowPtrForArgument(&FArg, EntryIRB, ArgOffset);
2010+
Value *Base = getShadowPtrForArgument(EntryIRB, ArgOffset);
20142011
ShadowPtr = EntryIRB.CreateAlignedLoad(getShadowTy(&FArg), Base,
20152012
kShadowTLSAlignment);
20162013
if (MS.TrackOrigins) {
20172014
Value *OriginPtr =
2018-
getOriginPtrForArgument(&FArg, EntryIRB, ArgOffset);
2015+
getOriginPtrForArgument(EntryIRB, ArgOffset);
20192016
setOrigin(A, EntryIRB.CreateLoad(MS.OriginTy, OriginPtr));
20202017
}
20212018
}
@@ -3382,11 +3379,12 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
33823379
IRBuilder<> IRB(&I);
33833380
Value *Addr = I.getArgOperand(0);
33843381
Type *Ty = IRB.getInt32Ty();
3382+
Type *PtrTy = IRB.getPtrTy();
33853383
Value *ShadowPtr =
33863384
getShadowOriginPtr(Addr, IRB, Ty, Align(1), /*isStore*/ true).first;
33873385

33883386
IRB.CreateStore(getCleanShadow(Ty),
3389-
IRB.CreatePointerCast(ShadowPtr, Ty->getPointerTo()));
3387+
IRB.CreatePointerCast(ShadowPtr, PtrTy));
33903388

33913389
if (ClCheckAccessAddress)
33923390
insertShadowCheck(Addr, &I);
@@ -4188,7 +4186,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
41884186
// in that case getShadow() will copy the actual arg shadow to
41894187
// __msan_param_tls.
41904188
Value *ArgShadow = getShadow(A);
4191-
Value *ArgShadowBase = getShadowPtrForArgument(A, IRB, ArgOffset);
4189+
Value *ArgShadowBase = getShadowPtrForArgument(IRB, ArgOffset);
41924190
LLVM_DEBUG(dbgs() << " Arg#" << i << ": " << *A
41934191
<< " Shadow: " << *ArgShadow << "\n");
41944192
if (ByVal) {
@@ -4215,7 +4213,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
42154213
Store = IRB.CreateMemCpy(ArgShadowBase, Alignment, AShadowPtr,
42164214
Alignment, Size);
42174215
if (MS.TrackOrigins) {
4218-
Value *ArgOriginBase = getOriginPtrForArgument(A, IRB, ArgOffset);
4216+
Value *ArgOriginBase = getOriginPtrForArgument(IRB, ArgOffset);
42194217
// FIXME: OriginSize should be:
42204218
// alignTo(A % kMinOriginAlignment + Size, kMinOriginAlignment)
42214219
unsigned OriginSize = alignTo(Size, kMinOriginAlignment);
@@ -4237,7 +4235,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
42374235
Constant *Cst = dyn_cast<Constant>(ArgShadow);
42384236
if (MS.TrackOrigins && !(Cst && Cst->isNullValue())) {
42394237
IRB.CreateStore(getOrigin(A),
4240-
getOriginPtrForArgument(A, IRB, ArgOffset));
4238+
getOriginPtrForArgument(IRB, ArgOffset));
42414239
}
42424240
}
42434241
(void)Store;
@@ -4269,7 +4267,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
42694267

42704268
IRBuilder<> IRBBefore(&CB);
42714269
// Until we have full dynamic coverage, make sure the retval shadow is 0.
4272-
Value *Base = getShadowPtrForRetval(&CB, IRBBefore);
4270+
Value *Base = getShadowPtrForRetval(IRBBefore);
42734271
IRBBefore.CreateAlignedStore(getCleanShadow(&CB), Base,
42744272
kShadowTLSAlignment);
42754273
BasicBlock::iterator NextInsn;
@@ -4294,12 +4292,12 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
42944292
}
42954293
IRBuilder<> IRBAfter(&*NextInsn);
42964294
Value *RetvalShadow = IRBAfter.CreateAlignedLoad(
4297-
getShadowTy(&CB), getShadowPtrForRetval(&CB, IRBAfter),
4295+
getShadowTy(&CB), getShadowPtrForRetval(IRBAfter),
42984296
kShadowTLSAlignment, "_msret");
42994297
setShadow(&CB, RetvalShadow);
43004298
if (MS.TrackOrigins)
43014299
setOrigin(&CB, IRBAfter.CreateLoad(MS.OriginTy,
4302-
getOriginPtrForRetval(IRBAfter)));
4300+
getOriginPtrForRetval()));
43034301
}
43044302

43054303
bool isAMustTailRetVal(Value *RetVal) {
@@ -4320,7 +4318,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
43204318
// Don't emit the epilogue for musttail call returns.
43214319
if (isAMustTailRetVal(RetVal))
43224320
return;
4323-
Value *ShadowPtr = getShadowPtrForRetval(RetVal, IRB);
4321+
Value *ShadowPtr = getShadowPtrForRetval(IRB);
43244322
bool HasNoUndef = F.hasRetAttribute(Attribute::NoUndef);
43254323
bool StoreShadow = !(MS.EagerChecks && HasNoUndef);
43264324
// FIXME: Consider using SpecialCaseList to specify a list of functions that
@@ -4340,7 +4338,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
43404338
if (StoreShadow) {
43414339
IRB.CreateAlignedStore(Shadow, ShadowPtr, kShadowTLSAlignment);
43424340
if (MS.TrackOrigins && StoreOrigin)
4343-
IRB.CreateStore(getOrigin(RetVal), getOriginPtrForRetval(IRB));
4341+
IRB.CreateStore(getOrigin(RetVal), getOriginPtrForRetval());
43444342
}
43454343
}
43464344

0 commit comments

Comments
 (0)