[cfe-commits] r116849 - /cfe/trunk/lib/Sema/SemaLookup.cpp

Douglas Gregor dgregor at apple.com
Tue Oct 19 12:39:10 PDT 2010

Author: dgregor
Date: Tue Oct 19 14:39:10 2010
New Revision: 116849

URL: http://llvm.org/viewvc/llvm-project?rev=116849&view=rev
Improve the performance of typo correction, by using a simple
computation to compute the lower bound of the edit distance, so that
we can avoid computing the edit distance for names that will clearly
be rejected later. Since edit distance is such an expensive algorithm
(M x N), this leads to a 7.5x speedup when correcting NSstring ->
NSString in the presence of a Cocoa PCH.


Modified: cfe/trunk/lib/Sema/SemaLookup.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaLookup.cpp?rev=116849&r1=116848&r2=116849&view=diff
--- cfe/trunk/lib/Sema/SemaLookup.cpp (original)
+++ cfe/trunk/lib/Sema/SemaLookup.cpp Tue Oct 19 14:39:10 2010
@@ -2730,6 +2730,12 @@
 void TypoCorrectionConsumer::FoundName(llvm::StringRef Name) {
+  // Use a simple length-based heuristic to determine the minimum possible
+  // edit distance. If the minimum isn't good enough, bail out early.
+  unsigned MinED = abs((int)Name.size() - (int)Typo.size());
+  if (MinED > BestEditDistance || (MinED && Typo.size() / MinED < 3))
+    return;
   // Compute the edit distance between the typo and the name of this
   // entity. If this edit distance is not worse than the best edit
   // distance we've seen so far, add it to the list of results.

More information about the cfe-commits mailing list