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