[clang] 4f61863 - [clang] Optimize SourceManager.getSpellingLocSlowCase and SourceManager.getFileLocSlowCase (#164269)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 3 07:12:19 PST 2025
Author: SKill
Date: 2025-11-03T10:12:15-05:00
New Revision: 4f618636ddb4938bb91816b66250edc755cdc7d1
URL: https://github.com/llvm/llvm-project/commit/4f618636ddb4938bb91816b66250edc755cdc7d1
DIFF: https://github.com/llvm/llvm-project/commit/4f618636ddb4938bb91816b66250edc755cdc7d1.diff
LOG: [clang] Optimize SourceManager.getSpellingLocSlowCase and SourceManager.getFileLocSlowCase (#164269)
Optimize implementations of `getSpellingLocSlowCase` and
`getFileLocSlowCase` by inlining called methods to avoid repeated calls
to `getSLocEntry` and `getFileID`.
a performance improvement follow up for #160667
Added:
Modified:
clang/lib/Basic/SourceManager.cpp
Removed:
################################################################################
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp
index 938c6485125ee..97aa0f2aa59b9 100644
--- a/clang/lib/Basic/SourceManager.cpp
+++ b/clang/lib/Basic/SourceManager.cpp
@@ -907,19 +907,23 @@ getExpansionLocSlowCase(SourceLocation Loc) const {
SourceLocation SourceManager::getSpellingLocSlowCase(SourceLocation Loc) const {
do {
- FileIDAndOffset LocInfo = getDecomposedLoc(Loc);
- Loc = getSLocEntry(LocInfo.first).getExpansion().getSpellingLoc();
- Loc = Loc.getLocWithOffset(LocInfo.second);
+ const SLocEntry &Entry = getSLocEntry(getFileID(Loc));
+ Loc = Entry.getExpansion().getSpellingLoc().getLocWithOffset(
+ Loc.getOffset() - Entry.getOffset());
} while (!Loc.isFileID());
return Loc;
}
SourceLocation SourceManager::getFileLocSlowCase(SourceLocation Loc) const {
do {
- if (isMacroArgExpansion(Loc))
- Loc = getImmediateSpellingLoc(Loc);
- else
- Loc = getImmediateExpansionRange(Loc).getBegin();
+ const SLocEntry &Entry = getSLocEntry(getFileID(Loc));
+ const ExpansionInfo &ExpInfo = Entry.getExpansion();
+ if (ExpInfo.isMacroArgExpansion()) {
+ Loc = ExpInfo.getSpellingLoc().getLocWithOffset(Loc.getOffset() -
+ Entry.getOffset());
+ } else {
+ Loc = ExpInfo.getExpansionLocStart();
+ }
} while (!Loc.isFileID());
return Loc;
}
More information about the cfe-commits
mailing list