[PATCH] D80428: [clang] Optimize getFileIDLocal
Marco Elver via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri May 22 05:51:35 PDT 2020
melver updated this revision to Diff 265717.
melver added a comment.
Extra unlikely hint.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80428/new/
https://reviews.llvm.org/D80428
Files:
clang/include/clang/Basic/SourceManager.h
clang/lib/Basic/SourceManager.cpp
Index: clang/lib/Basic/SourceManager.cpp
===================================================================
--- clang/lib/Basic/SourceManager.cpp
+++ clang/lib/Basic/SourceManager.cpp
@@ -885,14 +885,14 @@
bool Invalid = false;
unsigned MiddleIndex = (GreaterIndex-LessIndex)/2+LessIndex;
unsigned MidOffset = getLocalSLocEntry(MiddleIndex, &Invalid).getOffset();
- if (Invalid)
+ if (LLVM_UNLIKELY(Invalid))
return FileID::get(0);
++NumProbes;
// If the offset of the midpoint is too large, chop the high side of the
// range to the midpoint.
- if (MidOffset > SLocOffset) {
+ if (LLVM_LIKELY(MidOffset > SLocOffset)) {
GreaterIndex = MiddleIndex;
continue;
}
@@ -900,7 +900,7 @@
// If the middle index contains the value, succeed and return.
// FIXME: This could be made faster by using a function that's aware of
// being in the local area.
- if (isOffsetInFileID(FileID::get(MiddleIndex), SLocOffset)) {
+ if (LLVM_UNLIKELY(isOffsetInFileID(FileID::get(MiddleIndex), SLocOffset))) {
FileID Res = FileID::get(MiddleIndex);
// If this isn't a macro expansion, remember it. We have good locality
Index: clang/include/clang/Basic/SourceManager.h
===================================================================
--- clang/include/clang/Basic/SourceManager.h
+++ clang/include/clang/Basic/SourceManager.h
@@ -439,8 +439,8 @@
/// SourceManager keeps an array of these objects, and they are uniquely
/// identified by the FileID datatype.
class SLocEntry {
- unsigned Offset : 31;
- unsigned IsExpansion : 1;
+ unsigned Offset;
+ bool IsExpansion;
union {
FileInfo File;
ExpansionInfo Expansion;
@@ -465,7 +465,6 @@
}
static SLocEntry get(unsigned Offset, const FileInfo &FI) {
- assert(!(Offset & (1u << 31)) && "Offset is too large");
SLocEntry E;
E.Offset = Offset;
E.IsExpansion = false;
@@ -474,7 +473,6 @@
}
static SLocEntry get(unsigned Offset, const ExpansionInfo &Expansion) {
- assert(!(Offset & (1u << 31)) && "Offset is too large");
SLocEntry E;
E.Offset = Offset;
E.IsExpansion = true;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D80428.265717.patch
Type: text/x-patch
Size: 2225 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200522/40a2e75b/attachment.bin>
More information about the cfe-commits
mailing list