llvm-6502/lib
Quentin Colombet fb57392a8d [RegAlloc] Make tryInstructionSplit less aggressive.
The greedy register allocator tries to split a live-range around each
instruction where it is used or defined to relax the constraints on the entire
live-range (this is a last chance split before falling back to spill).
The goal is to have a big live-range that is unconstrained (i.e., that can use
the largest legal register class) and several small local live-range that carry
the constraints implied by each instruction.
E.g.,
Let csti be the constraints on operation i.

V1=
op1 V1(cst1)
op2 V1(cst2)

V1 live-range is constrained on the intersection of cst1 and cst2.

tryInstructionSplit relaxes those constraints by aggressively splitting each
def/use point:
V1=
V2 = V1
V3 = V2
op1 V3(cst1)
V4 = V2
op2 V4(cst2)

Because of how the coalescer infrastructure works, each new variable (V3, V4)
that is alive at the same time as V1 (or its copy, here V2) interfere with V1.
Thus, we end up with an uncoalescable copy for each split point.

To make tryInstructionSplit less aggressive, we check if the split point
actually relaxes the constraints on the whole live-range. If it does not, we do
not insert it.
Indeed, it will not help the global allocation problem:
- V1 will have the same constraints.
- V1 will have the same interference + possibly the newly added split variable
  VS.
- VS will produce an uncoalesceable copy if alive at the same time as V1.

<rdar://problem/15570057>


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198369 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-02 22:47:22 +00:00
..
Analysis BasicAA: Fix value equality and phi cycles 2014-01-02 03:31:36 +00:00
AsmParser Begin adding docs and IR-level support for the inalloca attribute 2013-12-19 02:14:12 +00:00
Bitcode Begin adding docs and IR-level support for the inalloca attribute 2013-12-19 02:14:12 +00:00
CodeGen [RegAlloc] Make tryInstructionSplit less aggressive. 2014-01-02 22:47:22 +00:00
DebugInfo DebugInfo: Move type units into the debug_types section with appropriate comdat grouping and type unit headers 2013-12-13 21:33:40 +00:00
ExecutionEngine There are no __register_frame and __deregister_frame functions 2013-12-17 08:40:11 +00:00
IR Allow addrspacecast in global aliases 2014-01-02 20:55:01 +00:00
IRReader [llvm-c] Expose IRReader interface 2013-11-06 09:21:15 +00:00
Linker Revert "Move copying of global initializers below the cloning of functions." 2013-11-09 00:43:18 +00:00
LTO Add TargetLibraryInfo in LTO passes builder 2013-12-12 01:37:39 +00:00
MC AsmParser: cleanup diagnostics for .rep/.rept 2013-12-28 06:39:29 +00:00
Object Support for microMIPS TLS relocations. 2013-12-19 16:02:32 +00:00
Option Avoid buffer copies when a Twine already is a StringRef. 2013-12-03 18:18:28 +00:00
Support Make llvm::Regex non-copyable but movable. 2014-01-02 19:04:59 +00:00
TableGen [TableGen] Correctly generate implicit anonymous prototype defs in multiclasses 2014-01-02 20:47:09 +00:00
Target [PPC] Fix comment to match function name 2014-01-02 22:09:39 +00:00
Transforms Disable compare sinking in CodeGenPrepare when multiple condition registers are available 2014-01-02 21:13:43 +00:00
CMakeLists.txt Move LTO support library to a component, allowing it to be tested 2013-09-24 23:52:22 +00:00
LLVMBuild.txt Move LTO support library to a component, allowing it to be tested 2013-09-24 23:52:22 +00:00
Makefile Reformat Makefile. No other changes. 2013-10-30 04:03:03 +00:00