diff options
author | Paul Robinson <paul.robinson@sony.com> | 2023-07-28 13:20:37 -0700 |
---|---|---|
committer | Paul Robinson <paul.robinson@sony.com> | 2023-08-17 07:03:47 -0700 |
commit | ca1295c5a15f03ede2fe620cc80d6a1e6e6735b8 (patch) | |
tree | 1cdb4e153dbf98932c139fc0198cd81b13150cd7 /clang/lib/CodeGen/CGDebugInfo.cpp | |
parent | 760261a3daf98882ccbd177e3133fb4a058f47ad (diff) | |
download | llvm-ca1295c5a15f03ede2fe620cc80d6a1e6e6735b8.zip llvm-ca1295c5a15f03ede2fe620cc80d6a1e6e6735b8.tar.gz llvm-ca1295c5a15f03ede2fe620cc80d6a1e6e6735b8.tar.bz2 |
[DebugInfo] Alternate (more efficient) MD5 fix
D155991 changed the file lookup to do a full string compare on the
filename; however, this added ~0.5% to compile time with -g.
Go back to the previous pointer-based lookup, but capture the main
file's checksum as well as its name to use when creating the extra
DIFile entry. This causes all entries to be consistent and also
avoids computing the checksum twice.
Differential revision: https://reviews.llvm.org/D156571
Diffstat (limited to 'clang/lib/CodeGen/CGDebugInfo.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 54e31be..e782b7f 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -391,12 +391,14 @@ llvm::DIFile *CGDebugInfo::getOrCreateFile(SourceLocation Loc) { SourceManager &SM = CGM.getContext().getSourceManager(); StringRef FileName; FileID FID; + std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo; if (Loc.isInvalid()) { // The DIFile used by the CU is distinct from the main source file. Call // createFile() below for canonicalization if the source file was specified // with an absolute path. FileName = TheCU->getFile()->getFilename(); + CSInfo = TheCU->getFile()->getChecksum(); } else { PresumedLoc PLoc = SM.getPresumedLoc(Loc); FileName = PLoc.getFilename(); @@ -417,13 +419,13 @@ llvm::DIFile *CGDebugInfo::getOrCreateFile(SourceLocation Loc) { return cast<llvm::DIFile>(V); } - SmallString<64> Checksum; - - std::optional<llvm::DIFile::ChecksumKind> CSKind = + if (!CSInfo) { + SmallString<64> Checksum; + std::optional<llvm::DIFile::ChecksumKind> CSKind = computeChecksum(FID, Checksum); - std::optional<llvm::DIFile::ChecksumInfo<StringRef>> CSInfo; - if (CSKind) - CSInfo.emplace(*CSKind, Checksum); + if (CSKind) + CSInfo.emplace(*CSKind, Checksum); + } return createFile(FileName, CSInfo, getSource(SM, SM.getFileID(Loc))); } |