[cfe-commits] r124737 - in /cfe/trunk: include/clang/Sema/CodeCompleteConsumer.h lib/Sema/CodeCompleteConsumer.cpp
Douglas Gregor
dgregor at apple.com
Wed Feb 2 11:04:31 PST 2011
Author: dgregor
Date: Wed Feb 2 13:04:30 2011
New Revision: 124737
URL: http://llvm.org/viewvc/llvm-project?rev=124737&view=rev
Log:
Revert r124704, which uniqued code-completion strings. The space
savings of 25% sounds impressive, except that this amounted to only
about 360k in our standard "large" completion result set (40,000
results). Since code completion is performance-sensitive, the 4%
slowdown due to uniquing outweighs the 360k benefit.
Modified:
cfe/trunk/include/clang/Sema/CodeCompleteConsumer.h
cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp
Modified: cfe/trunk/include/clang/Sema/CodeCompleteConsumer.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/CodeCompleteConsumer.h?rev=124737&r1=124736&r2=124737&view=diff
==============================================================================
--- cfe/trunk/include/clang/Sema/CodeCompleteConsumer.h (original)
+++ cfe/trunk/include/clang/Sema/CodeCompleteConsumer.h Wed Feb 2 13:04:30 2011
@@ -15,9 +15,7 @@
#include "clang/AST/Type.h"
#include "clang/AST/CanonicalType.h"
-#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Allocator.h"
#include "clang-c/Index.h"
@@ -423,47 +421,11 @@
std::string getAsString() const;
};
-/// \brief \c DenseMap information object for StringRefs.
-struct DenseMapStringRefInfo {
- static inline llvm::StringRef getEmptyKey() {
- return llvm::StringRef(reinterpret_cast<const char*>((intptr_t)-1), 0);
- }
- static inline llvm::StringRef getTombstoneKey() {
- return llvm::StringRef(reinterpret_cast<const char *>((intptr_t)-2), 0);
- }
- static unsigned getHashValue(llvm::StringRef Str) {
- return llvm::HashString(Str);
- }
- static bool isEqual(llvm::StringRef LHS, llvm::StringRef RHS) {
- if (LHS.size() == 0 && RHS.size() == 0) {
- intptr_t LHSVal = reinterpret_cast<intptr_t>(LHS.data());
- intptr_t RHSVal = reinterpret_cast<intptr_t>(RHS.data());
- if (LHSVal == -1 || LHSVal == -2 || RHSVal == -1 || RHSVal == -2)
- return LHSVal == RHSVal;
-
- return true;
- }
-
- return LHS == RHS;
- }
-};
-
/// \brief An allocator used specifically for the purpose of code completion.
class CodeCompletionAllocator : public llvm::BumpPtrAllocator {
- llvm::DenseSet<llvm::StringRef, DenseMapStringRefInfo> UniqueStrings;
- unsigned StringBytesAllocated;
- unsigned StringBytesUniqued;
- unsigned StringsAllocated;
- unsigned StringsUniqued;
-
public:
- CodeCompletionAllocator();
- ~CodeCompletionAllocator();
-
/// \brief Copy the given string into this allocator.
const char *CopyString(llvm::StringRef String);
-
- void PrintStats();
};
/// \brief A builder class used to construct new code-completion strings.
Modified: cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp?rev=124737&r1=124736&r2=124737&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp (original)
+++ cfe/trunk/lib/Sema/CodeCompleteConsumer.cpp Wed Feb 2 13:04:30 2011
@@ -220,41 +220,10 @@
return 0;
}
-CodeCompletionAllocator::CodeCompletionAllocator()
- : llvm::BumpPtrAllocator(), StringBytesAllocated(0), StringBytesUniqued(0),
- StringsAllocated(0), StringsUniqued(0)
-{
-}
-
-CodeCompletionAllocator::~CodeCompletionAllocator() { }
-
-void CodeCompletionAllocator::PrintStats() {
- llvm::errs() << "---Code completion memory allocation---\n"
- << "String bytes uniqued: " << StringBytesUniqued << "/"
- << StringBytesAllocated << " ("
- << ((float)StringBytesUniqued*100/StringBytesAllocated)
- << ")\nStrings uniqued: " << StringsUniqued << "/" << StringsAllocated
- << " (" << ((float)StringsUniqued*100/StringsAllocated)
- << ")\n";
-
- llvm::BumpPtrAllocator::PrintStats();
-}
-
const char *CodeCompletionAllocator::CopyString(llvm::StringRef String) {
- llvm::DenseSet<llvm::StringRef, DenseMapStringRefInfo>::iterator Uniqued
- = UniqueStrings.find(String);
- ++StringsAllocated;
- StringBytesAllocated += String.size() + 1;
- if (Uniqued != UniqueStrings.end()) {
- StringBytesUniqued += String.size() + 1;
- ++StringsUniqued;
- return Uniqued->data();
- }
-
char *Mem = (char *)Allocate(String.size() + 1, 1);
std::copy(String.begin(), String.end(), Mem);
Mem[String.size()] = 0;
- UniqueStrings.insert(llvm::StringRef(Mem, String.size()));
return Mem;
}
More information about the cfe-commits
mailing list