llvm-mirror/lib
Jakob Stoklund Olesen 030f090aee Make calls scheduling boundaries post-ra.
Before register allocation, instructions can be moved across calls in
order to reduce register pressure.  After register allocation, we don't
gain a lot by moving callee-saved defs across calls.  In fact, since the
scheduler doesn't have a good idea how registers are used in the callee,
it can't really make good scheduling decisions.

This changes the schedule in two ways: 1. Latencies to call uses and
defs are no longer accounted for, causing some random shuffling around
calls.  This isn't really a problem since those uses and defs are
inaccurate proxies for what happens inside the callee.  They don't
represent registers used by the call instruction itself.

2. Instructions are no longer moved across calls.  This didn't happen
very often, and the scheduling decision was made on dubious information
anyway.

As with any scheduling change, benchmark numbers shift around a bit,
but there is no positive or negative trend from this change.

This makes the post-ra scheduler 5% faster for ARM targets.

The secret motivation for this patch is the introduction of register
mask operands representing call clobbers.  The most efficient way of
handling regmasks in ScheduleDAGInstrs is to model them as barriers for
physreg live ranges, but not for virtreg live ranges.  That's fine
pre-ra, but post-ra it would have the same effect as this patch.

llvm-svn: 151265
2012-02-23 17:54:21 +00:00
..
Analysis Fix typo. 2012-02-23 05:38:51 +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 Make calls scheduling boundaries post-ra. 2012-02-23 17:54:21 +00:00
DebugInfo More dead code removal (using -Wunreachable-code) 2012-01-20 21:51:11 +00:00
ExecutionEngine Remove dead code. Improve llvm_unreachable text. Simplify some control flow. 2012-02-19 11:37:01 +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 MC: Fix the MCNullStreamer which was broken in r147763. 2012-02-22 23:49:50 +00:00
Object Remove static ctor. 2012-02-22 13:42:11 +00:00
Support Update for the removal of Hashing.cpp. 2012-02-23 09:33:44 +00:00
TableGen Add Foreach Loop 2012-02-22 16:09:41 +00:00
Target Remove unused variable. 2012-02-23 11:01:22 +00:00
Transforms Reflow code, no functionality change. 2012-02-23 17:42:19 +00:00
VMCore Reinstate r151049 now that GeneralHash is fixed. 2012-02-23 09:17:40 +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