Thanks! -eric
On Mon, Sep 9, 2013 at 9:39 AM, Benjamin Kramer <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
