llvm-6502/lib
Jakob Stoklund Olesen 8bcde2aa66 Enable register mask operands for x86 calls.
Call instructions no longer have a list of 43 call-clobbered registers.
Instead, they get a single register mask operand with a bit vector of
call-preserved registers.

This saves a lot of memory, 42 x 32 bytes = 1344 bytes per call
instruction, and it speeds up building call instructions because those
43 imp-def operands no longer need to be added to use-def lists. (And
removed and shifted and re-added for every explicit call operand).

Passes like LiveVariables, LiveIntervals, RAGreedy, PEI, and
BranchFolding are significantly faster because they can deal with call
clobbers in bulk.

Overall, clang -O2 is between 0% and 8% faster, uniformly distributed
depending on call density in the compiled code.  Debug builds using
clang -O0 are 0% - 3% faster.

I have verified that this patch doesn't change the assembly generated
for the LLVM nightly test suite when building with -disable-copyprop
and -disable-branch-fold.

Branch folding behaves slightly differently in a few cases because call
instructions have different hash values now.

Copy propagation flushes its data structures when it crosses a register
mask operand. This causes it to leave a few dead copies behind, on the
order of 20 instruction across the entire nightly test suite, including
SPEC. Fixing this properly would require the pass to use different data
structures.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150638 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-16 00:02:50 +00:00
..
Analysis Have AliasSet::aliasesUnknownInst use pointer TBAA info when available 2012-02-10 15:52:39 +00:00
Archive Avoid using an invalidated iterator. 2012-01-23 05:07:16 +00:00
AsmParser Convert assert(0) to llvm_unreachable 2012-02-07 05:05:23 +00:00
Bitcode Enable streaming of bitcode 2012-02-06 22:30:29 +00:00
CodeGen Handle register masks in branch folding. 2012-02-15 23:42:54 +00:00
DebugInfo More dead code removal (using -Wunreachable-code) 2012-01-20 21:51:11 +00:00
ExecutionEngine Using the new external-linkage warning recently added instead of disabling all return type warnings. 2012-02-14 21:44:03 +00:00
Linker Capitalize messages so that they appear nicely with the linker's error messages. 2012-02-14 09:13:54 +00:00
MC For ELF, also call fixSymbolsInTLSFixups() on expressions passed to EmitValue (literal values). Previously only called on expressions in instructions. New test cases added to tls.s, tls-i386.s. Resolves PR11981. 2012-02-15 15:09:06 +00:00
Object Expose the ELFObjectFile class directly in the Object/ELF.h header, similarly 2012-02-12 06:12:10 +00:00
Support Add function for computing the edit distance of two arrays. 2012-02-15 22:13:07 +00:00
TableGen Convert assert(0) to llvm_unreachable 2012-02-07 05:05:23 +00:00
Target Enable register mask operands for x86 calls. 2012-02-16 00:02:50 +00:00
Transforms [tsan] fix compiler warnings 2012-02-14 00:52:07 +00:00
VMCore Use the enum instead of 'unsigned'. 2012-02-15 23:27:50 +00:00
CMakeLists.txt Move TableGen's parser and entry point into a library 2011-10-01 16:41:13 +00:00
LLVMBuild.txt LLVMBuild: Introduce a common section which currently has a list of the 2011-12-12 22:45:54 +00:00
Makefile Remove more of llvmc and dependencies. 2011-09-20 00:34:27 +00:00