@@ -556,10 +556,10 @@ class MemorySanitizer {
556556 friend struct MemorySanitizerVisitor ;
557557 friend struct VarArgHelperBase ;
558558 friend struct VarArgAMD64Helper ;
559- friend struct VarArgMIPS64Helper ;
560559 friend struct VarArgAArch64Helper ;
561- friend struct VarArgPowerPC64Helper ;
560+ friend struct VarArgPowerPCHelper ;
562561 friend struct VarArgSystemZHelper ;
562+ friend struct VarArgGenericHelper ;
563563
564564 void initializeModule (Module &M);
565565 void initializeCallbacks (Module &M, const TargetLibraryInfo &TLI);
@@ -5342,31 +5342,29 @@ struct VarArgAMD64Helper : public VarArgHelperBase {
53425342 }
53435343};
53445344
5345- // / MIPS64 -specific implementation of VarArgHelper.
5345+ // / MIPS -specific implementation of VarArgHelper.
53465346// / NOTE: This is also used for LoongArch64.
5347- struct VarArgMIPS64Helper : public VarArgHelperBase {
5347+ struct VarArgGenericHelper : public VarArgHelperBase {
53485348 AllocaInst *VAArgTLSCopy = nullptr ;
53495349 Value *VAArgSize = nullptr ;
53505350
5351- VarArgMIPS64Helper (Function &F, MemorySanitizer &MS,
5352- MemorySanitizerVisitor &MSV)
5353- : VarArgHelperBase(F, MS, MSV, /* VAListTagSize= */ 8 ) {}
5351+ VarArgGenericHelper (Function &F, MemorySanitizer &MS,
5352+ MemorySanitizerVisitor &MSV, const unsigned VAListTagSize )
5353+ : VarArgHelperBase(F, MS, MSV, VAListTagSize) {}
53545354
53555355 void visitCallBase (CallBase &CB, IRBuilder<> &IRB) override {
53565356 unsigned VAArgOffset = 0 ;
53575357 const DataLayout &DL = F.getDataLayout ();
53585358 for (Value *A :
53595359 llvm::drop_begin (CB.args (), CB.getFunctionType ()->getNumParams ())) {
5360- Triple TargetTriple (F.getParent ()->getTargetTriple ());
5361- Value *Base;
53625360 uint64_t ArgSize = DL.getTypeAllocSize (A->getType ());
5363- if (TargetTriple. getArch () == Triple::mips64 ) {
5361+ if (DL. isBigEndian () ) {
53645362 // Adjusting the shadow for argument with size < 8 to match the
53655363 // placement of bits in big endian system
53665364 if (ArgSize < 8 )
53675365 VAArgOffset += (8 - ArgSize);
53685366 }
5369- Base = getShadowPtrForVAArgument (IRB, VAArgOffset, ArgSize);
5367+ Value * Base = getShadowPtrForVAArgument (IRB, VAArgOffset, ArgSize);
53705368 VAArgOffset += ArgSize;
53715369 VAArgOffset = alignTo (VAArgOffset, 8 );
53725370 if (!Base)
@@ -5665,14 +5663,14 @@ struct VarArgAArch64Helper : public VarArgHelperBase {
56655663 }
56665664};
56675665
5668- // / PowerPC64 -specific implementation of VarArgHelper.
5669- struct VarArgPowerPC64Helper : public VarArgHelperBase {
5666+ // / PowerPC -specific implementation of VarArgHelper.
5667+ struct VarArgPowerPCHelper : public VarArgHelperBase {
56705668 AllocaInst *VAArgTLSCopy = nullptr ;
56715669 Value *VAArgSize = nullptr ;
56725670
5673- VarArgPowerPC64Helper (Function &F, MemorySanitizer &MS,
5674- MemorySanitizerVisitor &MSV)
5675- : VarArgHelperBase(F, MS, MSV, /* VAListTagSize= */ 8 ) {}
5671+ VarArgPowerPCHelper (Function &F, MemorySanitizer &MS,
5672+ MemorySanitizerVisitor &MSV, unsigned VAListTagSize )
5673+ : VarArgHelperBase(F, MS, MSV, VAListTagSize) {}
56765674
56775675 void visitCallBase (CallBase &CB, IRBuilder<> &IRB) override {
56785676 // For PowerPC, we need to deal with alignment of stack arguments -
@@ -6086,7 +6084,8 @@ struct VarArgSystemZHelper : public VarArgHelperBase {
60866084
60876085// Loongarch64 is not a MIPS, but the current vargs calling convention matches
60886086// the MIPS.
6089- using VarArgLoongArch64Helper = VarArgMIPS64Helper;
6087+ using VarArgMIPSHelper = VarArgGenericHelper;
6088+ using VarArgLoongArch64Helper = VarArgGenericHelper;
60906089
60916090// / A no-op implementation of VarArgHelper.
60926091struct VarArgNoOpHelper : public VarArgHelper {
@@ -6119,13 +6118,14 @@ static VarArgHelper *CreateVarArgHelper(Function &Func, MemorySanitizer &Msan,
61196118 return new VarArgSystemZHelper (Func, Msan, Visitor);
61206119
61216120 if (TargetTriple.isPPC64 ())
6122- return new VarArgPowerPC64Helper (Func, Msan, Visitor);
6121+ return new VarArgPowerPCHelper (Func, Msan, Visitor, /* VAListTagSize= */ 8 );
61236122
61246123 if (TargetTriple.isMIPS64 ())
6125- return new VarArgMIPS64Helper (Func, Msan, Visitor);
6124+ return new VarArgMIPSHelper (Func, Msan, Visitor, /* VAListTagSize= */ 8 );
61266125
61276126 if (TargetTriple.isLoongArch64 ())
6128- return new VarArgLoongArch64Helper (Func, Msan, Visitor);
6127+ return new VarArgLoongArch64Helper (Func, Msan, Visitor,
6128+ /* VAListTagSize=*/ 8 );
61296129
61306130 return new VarArgNoOpHelper (Func, Msan, Visitor);
61316131}
0 commit comments