r190314 - CGDebugInfo: Hoist string allocation in a helper function. No functionality change.

Eric Christopher echristo at gmail.com
Mon Sep 9 09:51:25 PDT 2013


Thanks!

-eric

On Mon, Sep 9, 2013 at 9:39 AM, Benjamin Kramer
<benny.kra at googlemail.com> wrote:
> Author: d0k
> Date: Mon Sep  9 11:39:06 2013
> New Revision: 190314
>
> URL: http://llvm.org/viewvc/llvm-project?rev=190314&view=rev
> Log:
> CGDebugInfo: Hoist string allocation in a helper function. No functionality change.
>
> Modified:
>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>     cfe/trunk/lib/CodeGen/CGDebugInfo.h
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=190314&r1=190313&r2=190314&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Sep  9 11:39:06 2013
> @@ -184,10 +184,7 @@ StringRef CGDebugInfo::getFunctionName(c
>    }
>
>    // Copy this name on the side and use its reference.
> -  OS.flush();
> -  char *StrPtr = DebugInfoNames.Allocate<char>(NS.size());
> -  memcpy(StrPtr, NS.data(), NS.size());
> -  return StringRef(StrPtr, NS.size());
> +  return internString(OS.str());
>  }
>
>  StringRef CGDebugInfo::getObjCMethodName(const ObjCMethodDecl *OMD) {
> @@ -215,18 +212,13 @@ StringRef CGDebugInfo::getObjCMethodName
>    }
>    OS << ' ' << OMD->getSelector().getAsString() << ']';
>
> -  char *StrPtr = DebugInfoNames.Allocate<char>(OS.tell());
> -  memcpy(StrPtr, MethodName.begin(), OS.tell());
> -  return StringRef(StrPtr, OS.tell());
> +  return internString(OS.str());
>  }
>
>  /// getSelectorName - Return selector name. This is used for debugging
>  /// info.
>  StringRef CGDebugInfo::getSelectorName(Selector S) {
> -  const std::string &SName = S.getAsString();
> -  char *StrPtr = DebugInfoNames.Allocate<char>(SName.size());
> -  memcpy(StrPtr, SName.data(), SName.size());
> -  return StringRef(StrPtr, SName.size());
> +  return internString(S.getAsString());
>  }
>
>  /// getClassName - Get class name including template argument list.
> @@ -259,11 +251,7 @@ CGDebugInfo::getClassName(const RecordDe
>    }
>
>    // Copy this name on the side and use its reference.
> -  size_t Length = Name.size() + TemplateArgList.size();
> -  char *StrPtr = DebugInfoNames.Allocate<char>(Length);
> -  memcpy(StrPtr, Name.data(), Name.size());
> -  memcpy(StrPtr + Name.size(), TemplateArgList.data(), TemplateArgList.size());
> -  return StringRef(StrPtr, Length);
> +  return internString(Name, TemplateArgList);
>  }
>
>  /// getOrCreateFile - Get the file debug info descriptor for the input location.
> @@ -333,9 +321,7 @@ StringRef CGDebugInfo::getCurrentDirname
>      return CWDName;
>    SmallString<256> CWD;
>    llvm::sys::fs::current_path(CWD);
> -  char *CompDirnamePtr = DebugInfoNames.Allocate<char>(CWD.size());
> -  memcpy(CompDirnamePtr, CWD.data(), CWD.size());
> -  return CWDName = StringRef(CompDirnamePtr, CWD.size());
> +  return CWDName = internString(CWD);
>  }
>
>  /// CreateCompileUnit - Create new compile unit.
> @@ -359,15 +345,11 @@ void CGDebugInfo::CreateCompileUnit() {
>    }
>
>    // Save filename string.
> -  char *FilenamePtr = DebugInfoNames.Allocate<char>(MainFileName.length());
> -  memcpy(FilenamePtr, MainFileName.c_str(), MainFileName.length());
> -  StringRef Filename(FilenamePtr, MainFileName.length());
> +  StringRef Filename = internString(MainFileName);
>
>    // Save split dwarf file string.
>    std::string SplitDwarfFile = CGM.getCodeGenOpts().SplitDwarfFile;
> -  char *SplitDwarfPtr = DebugInfoNames.Allocate<char>(SplitDwarfFile.length());
> -  memcpy(SplitDwarfPtr, SplitDwarfFile.c_str(), SplitDwarfFile.length());
> -  StringRef SplitDwarfFilename(SplitDwarfPtr, SplitDwarfFile.length());
> +  StringRef SplitDwarfFilename = internString(SplitDwarfFile);
>
>    unsigned LangTag;
>    const LangOptions &LO = CGM.getLangOpts();
> @@ -1389,13 +1371,8 @@ llvm::DIType CGDebugInfo::getOrCreateVTa
>
>  /// getVTableName - Get vtable name for the given Class.
>  StringRef CGDebugInfo::getVTableName(const CXXRecordDecl *RD) {
> -  // Construct gdb compatible name name.
> -  std::string Name = "_vptr$" + RD->getNameAsString();
> -
> -  // Copy this name on the side and use its reference.
> -  char *StrPtr = DebugInfoNames.Allocate<char>(Name.length());
> -  memcpy(StrPtr, Name.data(), Name.length());
> -  return StringRef(StrPtr, Name.length());
> +  // Copy the gdb compatible name on the side and use its reference.
> +  return internString("_vptr$", RD->getNameAsString());
>  }
>
>
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=190314&r1=190313&r2=190314&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Mon Sep  9 11:39:06 2013
> @@ -387,6 +387,16 @@ private:
>    /// invalid then use current location.
>    /// \param Force  Assume DebugColumnInfo option is true.
>    unsigned getColumnNumber(SourceLocation Loc, bool Force=false);
> +
> +  /// internString - Allocate a copy of \p A using the DebugInfoNames allocator
> +  /// and return a reference to it. If multiple arguments are given the strings
> +  /// are concatenated.
> +  StringRef internString(StringRef A, StringRef B = StringRef()) {
> +    char *Data = DebugInfoNames.Allocate<char>(A.size() + B.size());
> +    std::memcpy(Data, A.data(), A.size());
> +    std::memcpy(Data + A.size(), B.data(), B.size());
> +    return StringRef(Data, A.size() + B.size());
> +  }
>  };
>
>  /// NoLocation - An RAII object that temporarily disables debug
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list