Add support for multi-way live range splitting.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 26 Jul 2011 23:41:46 +0000 (23:41 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 26 Jul 2011 23:41:46 +0000 (23:41 +0000)
commit00005782fa860f4b48b3b5261d92541c61ee2495
tree4031d763b2390a7f9f53a6058a7aa5259dd0269c
parent3b92527885c905e2d14f10eabbe45d1efda04bbf
Add support for multi-way live range splitting.

When splitting global live ranges, it is now possible to split for
multiple destination intervals at once. Previously, we only had the main
and stack intervals.

Each edge bundle is assigned to a split candidate, and splitAroundRegion
will insert copies between the candidate intervals and the stack
interval as needed.

The multi-way splitting is used to split around compact regions when
enabled with -compact-regions. The best candidate register still gets
all the bundles it wants, but everything outside the main interval is
first split around compact regions before we create single-block
intervals.

Compact region splitting still causes some regressions, so it is not
enabled by default.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136186 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/RegAllocGreedy.cpp