From: Chris Lattner Date: Sat, 21 Mar 2009 06:31:09 +0000 (+0000) Subject: Add a fast path to CodeGenModule::getMangledName for almost all C functions, X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c50689bd1e8788a7fc8f19070b7505ff95034979;p=clang 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 --- diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index cc460c5959..b03513a014 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -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)) {