From e9aa36c8951e9f95aaa1dcc7ef0a9e277f006dfb Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sat, 30 Jan 2010 00:24:06 +0000 Subject: FileCheck: When looking for "possible matches", only compare against the prefix line. Turns out edit_distance can be slow if the string we are scanning for happens to be quite large. llvm-svn: 94860 --- llvm/utils/FileCheck/FileCheck.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'llvm/utils/FileCheck/FileCheck.cpp') diff --git a/llvm/utils/FileCheck/FileCheck.cpp b/llvm/utils/FileCheck/FileCheck.cpp index 9619f945aace..3c4742cc36fb 100644 --- a/llvm/utils/FileCheck/FileCheck.cpp +++ b/llvm/utils/FileCheck/FileCheck.cpp @@ -340,7 +340,10 @@ unsigned Pattern::ComputeMatchDistance(StringRef Buffer, if (ExampleString.empty()) ExampleString = RegExStr; - return Buffer.substr(0, ExampleString.size()).edit_distance(ExampleString); + // Only compare up to the first line in the buffer, or the string size. + StringRef BufferPrefix = Buffer.substr(0, ExampleString.size()); + BufferPrefix = BufferPrefix.split('\n').first; + return BufferPrefix.edit_distance(ExampleString); } void Pattern::PrintFailureInfo(const SourceMgr &SM, StringRef Buffer, -- cgit v1.2.3