diff options
Diffstat (limited to 'llvm/lib/IR/Mangler.cpp')
| -rw-r--r-- | llvm/lib/IR/Mangler.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/llvm/lib/IR/Mangler.cpp b/llvm/lib/IR/Mangler.cpp index db9b5e59c6a..aac87ce0bb0 100644 --- a/llvm/lib/IR/Mangler.cpp +++ b/llvm/lib/IR/Mangler.cpp @@ -17,6 +17,7 @@ #include "llvm/IR/DataLayout.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Function.h" +#include "llvm/IR/Module.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; @@ -47,24 +48,18 @@ static void getNameWithPrefixImpl(raw_ostream &OS, const Twine &GVName, } void Mangler::getNameWithPrefix(raw_ostream &OS, const Twine &GVName, - ManglerPrefixTy PrefixTy) const { - char Prefix = DL->getGlobalPrefix(); - return getNameWithPrefixImpl(OS, GVName, PrefixTy, *DL, Prefix); -} - -void Mangler::getNameWithPrefix(SmallVectorImpl<char> &OutName, - const Twine &GVName, const DataLayout &DL) { - raw_svector_ostream OS(OutName); + const DataLayout &DL, + ManglerPrefixTy PrefixTy) { char Prefix = DL.getGlobalPrefix(); - return getNameWithPrefixImpl(OS, GVName, Mangler::Default, DL, Prefix); + return getNameWithPrefixImpl(OS, GVName, PrefixTy, DL, Prefix); } void Mangler::getNameWithPrefix(SmallVectorImpl<char> &OutName, - const Twine &GVName, - ManglerPrefixTy PrefixTy) const { + const Twine &GVName, const DataLayout &DL, + ManglerPrefixTy PrefixTy) { raw_svector_ostream OS(OutName); - char Prefix = DL->getGlobalPrefix(); - return getNameWithPrefixImpl(OS, GVName, PrefixTy, *DL, Prefix); + char Prefix = DL.getGlobalPrefix(); + return getNameWithPrefixImpl(OS, GVName, PrefixTy, DL, Prefix); } static bool hasByteCountSuffix(CallingConv::ID CC) { @@ -108,6 +103,7 @@ void Mangler::getNameWithPrefix(raw_ostream &OS, const GlobalValue *GV, PrefixTy = Mangler::Private; } + const DataLayout &DL = GV->getParent()->getDataLayout(); if (!GV->hasName()) { // Get the ID for the global, assigning a new one if we haven't got one // already. @@ -116,12 +112,12 @@ void Mangler::getNameWithPrefix(raw_ostream &OS, const GlobalValue *GV, ID = NextAnonGlobalID++; // Must mangle the global into a unique ID. - getNameWithPrefix(OS, "__unnamed_" + Twine(ID), PrefixTy); + getNameWithPrefix(OS, "__unnamed_" + Twine(ID), DL, PrefixTy); return; } StringRef Name = GV->getName(); - char Prefix = DL->getGlobalPrefix(); + char Prefix = DL.getGlobalPrefix(); // Mangle functions with Microsoft calling conventions specially. Only do // this mangling for x86_64 vectorcall and 32-bit x86. @@ -130,7 +126,7 @@ void Mangler::getNameWithPrefix(raw_ostream &OS, const GlobalValue *GV, MSFunc = nullptr; // Don't mangle when \01 is present. CallingConv::ID CC = MSFunc ? MSFunc->getCallingConv() : (unsigned)CallingConv::C; - if (!DL->hasMicrosoftFastStdCallMangling() && + if (!DL.hasMicrosoftFastStdCallMangling() && CC != CallingConv::X86_VectorCall) MSFunc = nullptr; if (MSFunc) { @@ -140,7 +136,7 @@ void Mangler::getNameWithPrefix(raw_ostream &OS, const GlobalValue *GV, Prefix = '\0'; // vectorcall functions have no prefix. } - getNameWithPrefixImpl(OS, Name, PrefixTy, *DL, Prefix); + getNameWithPrefixImpl(OS, Name, PrefixTy, DL, Prefix); if (!MSFunc) return; @@ -155,7 +151,7 @@ void Mangler::getNameWithPrefix(raw_ostream &OS, const GlobalValue *GV, // "Pure" variadic functions do not receive @0 suffix. (!FT->isVarArg() || FT->getNumParams() == 0 || (FT->getNumParams() == 1 && MSFunc->hasStructRetAttr()))) - addByteCountSuffix(OS, MSFunc, *DL); + addByteCountSuffix(OS, MSFunc, DL); } void Mangler::getNameWithPrefix(SmallVectorImpl<char> &OutName, |

