Hi,
I did a performance profile of clang while building Linux kernel.
The difference is not much compared to gcc, clang with asserts off is a
bit faster than gcc, and with asserts on a bit slower.
Here is the 'perf report' for clang with asserts off:
https://gist.github.com/918497
3.65% clang clang [.] llvm::StringMapImpl::LookupBucketFor(llvm::StringRef)
I'm a bit surprised that StringMap is the most expensive entry here, maybe microoptimizing
the hash function (which is a byte-wise djb hash at the moment) can help a bit. If someone is
really bored it would also be useful to test if other string hash functions like murmurhash or google's
new city hash give better performance.
2.87% clang clang [.] clang::Lexer::LexTokenInternal(clang::Token&)
This is expected, the lexer usually dominates any C compiler's run time (well, except for crazy stuff like C++ ;),
clang's lexer is heavily optimized, I doubt we can improve much here.
2.74% clang [kernel.kallsyms] [k] clear_page_c
This is probably zero filling pages for malloc.
2.07% genksyms genksyms [.] yylex
1.88% clang clang [.] clang::SourceManager::getFileIDSlow(unsigned int) const
Despite that the name contains the word slow, this function is optimized well and known to be hot.
1.66% clang libc-2.13.so [.] _int_malloc
Reducing mallocs is an ongoing process, clang already pool allocates a lot of its data,
LLVM's types, constants and other stuff aren't allocated in pools at the moment but there are plans to fix that.