In some rare cases, the register allocator can spill registers but end up not utilizi...
commit97c5f1ff450a19fe244fb62a35c8e36ed590670f
authorEvan Cheng <evan.cheng@apple.com>
Sun, 3 May 2009 18:32:42 +0000 (3 18:32 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sun, 3 May 2009 18:32:42 +0000 (3 18:32 +0000)
treedcaf1b9201cdb221cb2206858891575d2b241bbb
parent3f83f91b9a561b193613e5295e5094a50548325f
In some rare cases, the register allocator can spill registers but end up not utilizing registers at all. The fundamental problem is linearscan's backtracking can end up freeing more than one allocated registers. However,  reloads and restores might be folded into uses / defs and freed registers might not be used at all.

VirtRegMap keeps track of allocations so it knows what's not used. As a horrible hack, the stack coloring can color spill slots with *free* registers. That is, it replace reload and spills with copies from and to the free register. It unfold instructions that load and store the spill slot and replace them with register using variants.

Not yet enabled. This is part 1. More coming.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70787 91177308-0d34-0410-b5e6-96231b3b80d8
12 files changed:
include/llvm/CodeGen/LiveIntervalAnalysis.h
include/llvm/CodeGen/LiveStackAnalysis.h
include/llvm/Target/TargetInstrInfo.h
include/llvm/Target/TargetRegisterInfo.h
lib/CodeGen/LiveIntervalAnalysis.cpp
lib/CodeGen/LiveStackAnalysis.cpp
lib/CodeGen/PreAllocSplitting.cpp
lib/CodeGen/RegAllocLinearScan.cpp
lib/CodeGen/RegAllocPBQP.cpp
lib/CodeGen/StackSlotColoring.cpp
lib/CodeGen/VirtRegMap.cpp
lib/CodeGen/VirtRegMap.h