Big slowdown introduced in r92348

Using as usual the big gcc.c source from

http://people.csail.mit.edu/smcc/projects/single-file-programs/

$ time ~/llvm_opt/Release/bin/clang -w -fsyntax-only gcc.c

real 0m3.792s
user 0m3.472s
sys 0m0.319s
$ time ~/llvm_opt/Release/bin/clang -w -fsyntax-only gcc.c

real 0m13.384s
user 0m13.046s
sys 0m0.335s

Using bisection I've found the culprit in commit r92348.

Why a modify to Sema::LookupTemplateName could impact a non C++ program
is beyond my comprehension, but perhaps the name of function is
misleading I don't know...

The parser ends up calling into this code to find template names... but it shouldn't ever do that for C. I'll look into it; thanks for tracking down this performance regression!

  - Doug

http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20100111/026231.html

Using as usual the big gcc.c source from

Large single compilation-unit C programs

$ time ~/llvm_opt/Release/bin/clang -w -fsyntax-only gcc.c

real 0m3.792s
user 0m3.472s
sys 0m0.319s
$ time ~/llvm_opt/Release/bin/clang -w -fsyntax-only gcc.c

real 0m13.384s
user 0m13.046s
sys 0m0.335s

Using bisection I've found the culprit in commit r92348.

Why a modify to Sema::LookupTemplateName could impact a non C++ program
is beyond my comprehension, but perhaps the name of function is
misleading I don't know...

This should be fixed in r93207, here:

  http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20100111/026231.html

I can't check your particular example on my system (since I don't have all of the headers that gcc.c relies on), but the change improved performance on Cocoa.h. Actually, since this change eliminates a bunch of extra name lookup, r93207 may even be faster than r92347 was.

  - Doug

I've just tested it and now it's fast as before for gcc.c (not faster).

However I leave to you the evaluation about whether the slowdown
introduced by r92348 is appropriate or not for C++ programs.

http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20100111/026231.html

Using as usual the big gcc.c source from

Large single compilation-unit C programs

$ time ~/llvm_opt/Release/bin/clang -w -fsyntax-only gcc.c

real 0m3.792s
user 0m3.472s
sys 0m0.319s
$ time ~/llvm_opt/Release/bin/clang -w -fsyntax-only gcc.c

real 0m13.384s
user 0m13.046s
sys 0m0.335s

Using bisection I've found the culprit in commit r92348.

Why a modify to Sema::LookupTemplateName could impact a non C++ program
is beyond my comprehension, but perhaps the name of function is
misleading I don't know...

This should be fixed in r93207, here:

   http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20100111/026231.html

I can't check your particular example on my system (since I don't have
all of the headers that gcc.c relies on), but the change improved
performance on Cocoa.h. Actually, since this change eliminates a bunch
of extra name lookup, r93207 may even be faster than r92347 was.

I've just tested it and now it's fast as before for gcc.c (not faster).

Okay, good.

However I leave to you the evaluation about whether the slowdown
introduced by r92348 is appropriate or not for C++ programs.

I'll look into that, too. Thanks.

  - Doug