зеркало из https://github.com/microsoft/clang-1.git
Add a fast path to CodeGenModule::getMangledName for almost all C functions,
speeding up the testcase in PR3810 by 60%. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67431 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
81abbdd848
Коммит
c50689bd1e
|
@ -156,8 +156,8 @@ static void setGlobalVisibility(llvm::GlobalValue *GV,
|
|||
/// \brief Retrieves the mangled name for the given declaration.
|
||||
///
|
||||
/// If the given declaration requires a mangled name, returns an
|
||||
/// IdentifierInfo* containing the mangled name. Otherwise, returns
|
||||
/// the name of the declaration as an identifier.
|
||||
/// const char* containing the mangled name. Otherwise, returns
|
||||
/// the unmangled name.
|
||||
///
|
||||
/// FIXME: Returning an IdentifierInfo* here is a total hack. We
|
||||
/// really need some kind of string abstraction that either stores a
|
||||
|
@ -171,6 +171,12 @@ static void setGlobalVisibility(llvm::GlobalValue *GV,
|
|||
/// caching mangled names. However, we should fix the problem above
|
||||
/// first.
|
||||
const char *CodeGenModule::getMangledName(const NamedDecl *ND) {
|
||||
// In C, functions with no attributes never need to be mangled. Fastpath them.
|
||||
if (!getLangOptions().CPlusPlus && !ND->hasAttrs()) {
|
||||
assert(ND->getIdentifier() && "Attempt to mangle unnamed decl.");
|
||||
return ND->getIdentifier()->getName();
|
||||
}
|
||||
|
||||
llvm::SmallString<256> Name;
|
||||
llvm::raw_svector_ostream Out(Name);
|
||||
if (!mangleName(ND, Context, Out)) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче