@@ -1923,20 +1923,17 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
19231923 // /
19241924 // / Shadow = ParamTLS+ArgOffset.
19251925 Value *getShadowPtrForArgument (IRBuilder<> &IRB, int ArgOffset) {
1926- Value *Base = IRB.CreatePointerCast (MS.ParamTLS , MS.IntptrTy );
1927- if (ArgOffset)
1928- Base = IRB.CreateAdd (Base, ConstantInt::get (MS.IntptrTy , ArgOffset));
1929- return IRB.CreateIntToPtr (Base, IRB.getPtrTy (0 ), " _msarg" );
1926+ return IRB.CreatePtrAdd (MS.ParamTLS ,
1927+ ConstantInt::get (MS.IntptrTy , ArgOffset), " _msarg" );
19301928 }
19311929
19321930 // / Compute the origin address for a given function argument.
19331931 Value *getOriginPtrForArgument (IRBuilder<> &IRB, int ArgOffset) {
19341932 if (!MS.TrackOrigins )
19351933 return nullptr ;
1936- Value *Base = IRB.CreatePointerCast (MS.ParamOriginTLS , MS.IntptrTy );
1937- if (ArgOffset)
1938- Base = IRB.CreateAdd (Base, ConstantInt::get (MS.IntptrTy , ArgOffset));
1939- return IRB.CreateIntToPtr (Base, IRB.getPtrTy (0 ), " _msarg_o" );
1934+ return IRB.CreatePtrAdd (MS.ParamOriginTLS ,
1935+ ConstantInt::get (MS.IntptrTy , ArgOffset),
1936+ " _msarg_o" );
19401937 }
19411938
19421939 // / Compute the shadow address for a retval.
@@ -7219,9 +7216,8 @@ struct VarArgHelperBase : public VarArgHelper {
72197216
72207217 // / Compute the shadow address for a given va_arg.
72217218 Value *getShadowPtrForVAArgument (IRBuilder<> &IRB, unsigned ArgOffset) {
7222- Value *Base = IRB.CreatePointerCast (MS.VAArgTLS , MS.IntptrTy );
7223- Base = IRB.CreateAdd (Base, ConstantInt::get (MS.IntptrTy , ArgOffset));
7224- return IRB.CreateIntToPtr (Base, MS.PtrTy , " _msarg_va_s" );
7219+ return IRB.CreatePtrAdd (
7220+ MS.VAArgTLS , ConstantInt::get (MS.IntptrTy , ArgOffset), " _msarg_va_s" );
72257221 }
72267222
72277223 // / Compute the shadow address for a given va_arg.
@@ -7235,12 +7231,12 @@ struct VarArgHelperBase : public VarArgHelper {
72357231
72367232 // / Compute the origin address for a given va_arg.
72377233 Value *getOriginPtrForVAArgument (IRBuilder<> &IRB, int ArgOffset) {
7238- Value *Base = IRB.CreatePointerCast (MS.VAArgOriginTLS , MS.IntptrTy );
72397234 // getOriginPtrForVAArgument() is always called after
72407235 // getShadowPtrForVAArgument(), so __msan_va_arg_origin_tls can never
72417236 // overflow.
7242- Base = IRB.CreateAdd (Base, ConstantInt::get (MS.IntptrTy , ArgOffset));
7243- return IRB.CreateIntToPtr (Base, MS.PtrTy , " _msarg_va_o" );
7237+ return IRB.CreatePtrAdd (MS.VAArgOriginTLS ,
7238+ ConstantInt::get (MS.IntptrTy , ArgOffset),
7239+ " _msarg_va_o" );
72447240 }
72457241
72467242 void CleanUnusedTLS (IRBuilder<> &IRB, Value *ShadowBase,
@@ -7467,10 +7463,8 @@ struct VarArgAMD64Helper : public VarArgHelperBase {
74677463 NextNodeIRBuilder IRB (OrigInst);
74687464 Value *VAListTag = OrigInst->getArgOperand (0 );
74697465
7470- Value *RegSaveAreaPtrPtr = IRB.CreateIntToPtr (
7471- IRB.CreateAdd (IRB.CreatePtrToInt (VAListTag, MS.IntptrTy ),
7472- ConstantInt::get (MS.IntptrTy , 16 )),
7473- MS.PtrTy );
7466+ Value *RegSaveAreaPtrPtr =
7467+ IRB.CreatePtrAdd (VAListTag, ConstantInt::get (MS.IntptrTy , 16 ));
74747468 Value *RegSaveAreaPtr = IRB.CreateLoad (MS.PtrTy , RegSaveAreaPtrPtr);
74757469 Value *RegSaveAreaShadowPtr, *RegSaveAreaOriginPtr;
74767470 const Align Alignment = Align (16 );
@@ -7482,10 +7476,8 @@ struct VarArgAMD64Helper : public VarArgHelperBase {
74827476 if (MS.TrackOrigins )
74837477 IRB.CreateMemCpy (RegSaveAreaOriginPtr, Alignment, VAArgTLSOriginCopy,
74847478 Alignment, AMD64FpEndOffset);
7485- Value *OverflowArgAreaPtrPtr = IRB.CreateIntToPtr (
7486- IRB.CreateAdd (IRB.CreatePtrToInt (VAListTag, MS.IntptrTy ),
7487- ConstantInt::get (MS.IntptrTy , 8 )),
7488- MS.PtrTy );
7479+ Value *OverflowArgAreaPtrPtr =
7480+ IRB.CreatePtrAdd (VAListTag, ConstantInt::get (MS.IntptrTy , 8 ));
74897481 Value *OverflowArgAreaPtr =
74907482 IRB.CreateLoad (MS.PtrTy , OverflowArgAreaPtrPtr);
74917483 Value *OverflowArgAreaShadowPtr, *OverflowArgAreaOriginPtr;
@@ -7615,19 +7607,15 @@ struct VarArgAArch64Helper : public VarArgHelperBase {
76157607
76167608 // Retrieve a va_list field of 'void*' size.
76177609 Value *getVAField64 (IRBuilder<> &IRB, Value *VAListTag, int offset) {
7618- Value *SaveAreaPtrPtr = IRB.CreateIntToPtr (
7619- IRB.CreateAdd (IRB.CreatePtrToInt (VAListTag, MS.IntptrTy ),
7620- ConstantInt::get (MS.IntptrTy , offset)),
7621- MS.PtrTy );
7610+ Value *SaveAreaPtrPtr =
7611+ IRB.CreatePtrAdd (VAListTag, ConstantInt::get (MS.IntptrTy , offset));
76227612 return IRB.CreateLoad (Type::getInt64Ty (*MS.C ), SaveAreaPtrPtr);
76237613 }
76247614
76257615 // Retrieve a va_list field of 'int' size.
76267616 Value *getVAField32 (IRBuilder<> &IRB, Value *VAListTag, int offset) {
7627- Value *SaveAreaPtr = IRB.CreateIntToPtr (
7628- IRB.CreateAdd (IRB.CreatePtrToInt (VAListTag, MS.IntptrTy ),
7629- ConstantInt::get (MS.IntptrTy , offset)),
7630- MS.PtrTy );
7617+ Value *SaveAreaPtr =
7618+ IRB.CreatePtrAdd (VAListTag, ConstantInt::get (MS.IntptrTy , offset));
76317619 Value *SaveArea32 = IRB.CreateLoad (IRB.getInt32Ty (), SaveAreaPtr);
76327620 return IRB.CreateSExt (SaveArea32, MS.IntptrTy );
76337621 }
0 commit comments