mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
DwarfDebug: Store the filename/dirname pair as a zero-separated string in a stringmap, instead of using a highly inefficient std::map of a pair of std::strings.
llvm-svn: 152541
This commit is contained in:
parent
df2bf795d6
commit
c798b7be6d
@ -523,20 +523,19 @@ unsigned DwarfDebug::GetOrCreateSourceID(StringRef FileName,
|
||||
DirName = "";
|
||||
|
||||
unsigned SrcId = SourceIdMap.size()+1;
|
||||
std::pair<std::string, std::string> SourceName =
|
||||
std::make_pair(FileName, DirName);
|
||||
std::pair<std::pair<std::string, std::string>, unsigned> Entry =
|
||||
make_pair(SourceName, SrcId);
|
||||
|
||||
std::map<std::pair<std::string, std::string>, unsigned>::iterator I;
|
||||
bool NewlyInserted;
|
||||
llvm::tie(I, NewlyInserted) = SourceIdMap.insert(Entry);
|
||||
if (!NewlyInserted)
|
||||
return I->second;
|
||||
// We look up the file/dir pair by concatenating them with a zero byte.
|
||||
SmallString<128> NamePair;
|
||||
NamePair += DirName;
|
||||
NamePair += '\0'; // Zero bytes are not allowed in paths.
|
||||
NamePair += FileName;
|
||||
|
||||
StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(NamePair, SrcId);
|
||||
if (Ent.getValue() != SrcId)
|
||||
return Ent.getValue();
|
||||
|
||||
// Print out a .file directive to specify files for .loc directives.
|
||||
Asm->OutStreamer.EmitDwarfFileDirective(SrcId, Entry.first.second,
|
||||
Entry.first.first);
|
||||
Asm->OutStreamer.EmitDwarfFileDirective(SrcId, DirName, FileName);
|
||||
|
||||
return SrcId;
|
||||
}
|
||||
|
@ -26,7 +26,6 @@
|
||||
#include "llvm/ADT/UniqueVector.h"
|
||||
#include "llvm/Support/Allocator.h"
|
||||
#include "llvm/Support/DebugLoc.h"
|
||||
#include <map>
|
||||
|
||||
namespace llvm {
|
||||
|
||||
@ -209,9 +208,9 @@ class DwarfDebug {
|
||||
///
|
||||
std::vector<DIEAbbrev *> Abbreviations;
|
||||
|
||||
/// SourceIdMap - Source id map, i.e. pair of source filename and directory
|
||||
/// mapped to a unique id.
|
||||
std::map<std::pair<std::string, std::string>, unsigned> SourceIdMap;
|
||||
/// SourceIdMap - Source id map, i.e. pair of source filename and directory,
|
||||
/// separated by a zero byte, mapped to a unique id.
|
||||
StringMap<unsigned> SourceIdMap;
|
||||
|
||||
/// StringPool - A String->Symbol mapping of strings used by indirect
|
||||
/// references.
|
||||
|
Loading…
Reference in New Issue
Block a user