llvm-project/llvm/lib
Puyan Lotfi 5eb1004889 The following patch' purpose is to reduce compile time for compilation of small
programs on targets with large register files. The root of the compile time
overhead was in the use of llvm::SmallVector to hold PhysRegEntries, which
resulted in slow-down from calling llvm::SmallVector::assign(N, 0). In contrast
std::vector uses the faster __platform_bzero to zero out primitive buffers when
assign is called, while SmallVector uses an iterator.

The fix for this was simply to replace the SmallVector with a dynamically
allocated buffer and to initialize or reinitialize the buffer based on the
total registers that the target architecture requires. The changes support
cases where a pass manager may be reused for different targets, and note that
the PhysRegEntries is allocated using calloc mainly for good for, and also to
quite tools like Valgrind (see comments for more info on this).

There is an rdar to track the fact that SmallVector doesn't have platform
specific speedup optimizations inside of it for things like this, and I'll
create a bugzilla entry at some point soon as well.

TL;DR: This fix replaces the expensive llvm::SmallVector<unsigned
char>::assign(N, 0) with a call to calloc for N bytes which is much faster
because SmallVector's assign uses iterators.

llvm-svn: 200917
2014-02-06 09:23:24 +00:00
..
Analysis [PM] Fix horrible typos that somehow didn't cause a failure in a C++11 2014-02-06 05:17:02 +00:00
AsmParser [ms-cxxabi] Add a new calling convention that swaps 'this' and 'sret' 2014-01-31 17:41:22 +00:00
Bitcode Make parseBitcodeFile return an ErrorOr<Module *>. 2014-01-15 01:08:23 +00:00
CodeGen The following patch' purpose is to reduce compile time for compilation of small 2014-02-06 09:23:24 +00:00
DebugInfo Simplify the handling of iterators in ObjectFile. 2014-01-30 02:49:50 +00:00
ExecutionEngine Simplify getSymbolFlags. 2014-01-31 20:57:12 +00:00
IR Disable most IR-level transform passes on functions marked 'optnone'. 2014-02-06 00:07:05 +00:00
IRReader Make parseBitcodeFile return an ErrorOr<Module *>. 2014-01-15 01:08:23 +00:00
LTO Change MCStreamer EmitInstruction interface to take subtarget info 2014-01-28 23:12:42 +00:00
LineEditor Avoid using EL_GETFP. 2014-02-04 20:04:46 +00:00
Linker Reapply r194218 with fix: 2014-01-16 06:29:36 +00:00
MC doesSectionRequireSymbols is meaningless on ELF, remove. 2014-02-06 00:54:53 +00:00
Object Use the information provided by getFlags to unify some code in llvm-nm. 2014-02-05 05:19:19 +00:00
Option Avoid buffer copies when a Twine already is a StringRef. 2013-12-03 18:18:28 +00:00
Support Revert "Fix an invalid check for duplicate option categories." 2014-02-05 17:49:31 +00:00
TableGen [TableGen] Correctly generate implicit anonymous prototype defs in multiclasses 2014-01-02 20:47:09 +00:00
Target Update the X86 assembler for .intel_syntax to accept 2014-02-06 01:21:15 +00:00
Transforms A memcpy out of an fresh alloca is a no-op, delete it. Patch by Patrick Walton! 2014-02-06 06:29:19 +00:00
CMakeLists.txt Introduce line editor library. 2014-01-31 23:46:14 +00:00
LLVMBuild.txt Introduce line editor library. 2014-01-31 23:46:14 +00:00
Makefile Introduce line editor library. 2014-01-31 23:46:14 +00:00