summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/FileManager.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-02-03 00:18:12 +0000
committerDouglas Gregor <dgregor@apple.com>2011-02-03 00:18:12 +0000
commit8c0577faf3da6cc2d85d6210777c3ec4f957741b (patch)
treeaebc112956a5fb8e17d9a8b86ee0872e03e2bab6 /clang/lib/Basic/FileManager.cpp
parentdf0dd7dc69400342be613f0f2ccc0b44dfa627b1 (diff)
downloadbcm5719-llvm-8c0577faf3da6cc2d85d6210777c3ec4f957741b.tar.gz
bcm5719-llvm-8c0577faf3da6cc2d85d6210777c3ec4f957741b.zip
Improve the performance of filename canonicalization by avoiding
redundant searches in the string. No functionality change. llvm-svn: 124760
Diffstat (limited to 'clang/lib/Basic/FileManager.cpp')
-rw-r--r--clang/lib/Basic/FileManager.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp
index 5bf1ae36892..53d7c9a6bd5 100644
--- a/clang/lib/Basic/FileManager.cpp
+++ b/clang/lib/Basic/FileManager.cpp
@@ -279,8 +279,8 @@ static llvm::StringRef CanonicalizeFileName(llvm::StringRef Filename,
llvm::SmallVectorImpl<char> &Scratch) {
size_t Start = 0;
bool Changed = false;
+ size_t FirstSlash = Filename.find('/', Start);
do {
- size_t FirstSlash = Filename.find('/', Start);
if (FirstSlash == llvm::StringRef::npos) {
// No more components. Just copy the rest of the file name, if
// we need to.
@@ -302,6 +302,7 @@ static llvm::StringRef CanonicalizeFileName(llvm::StringRef Filename,
// Skip over the './'.
Start = FirstSlash + 1;
+ FirstSlash = Filename.find('/', Start);
continue;
}
@@ -322,6 +323,7 @@ static llvm::StringRef CanonicalizeFileName(llvm::StringRef Filename,
// Skip over the 'foo/..'.
Start = SecondSlash + 1;
+ FirstSlash = Filename.find('/', Start);
continue;
}
@@ -329,6 +331,11 @@ static llvm::StringRef CanonicalizeFileName(llvm::StringRef Filename,
Scratch.append(Filename.begin() + Start,
Filename.begin() + FirstSlash + 1);
Start = FirstSlash + 1;
+
+ if (SecondSlash == llvm::StringRef::npos)
+ FirstSlash = Filename.find('/', Start);
+ else
+ FirstSlash = SecondSlash;
} while (true);
if (Changed) {
OpenPOWER on IntegriCloud