Remove support for PhysReg joining.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 18 May 2012 17:18:58 +0000 (17:18 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 18 May 2012 17:18:58 +0000 (17:18 +0000)
commit34a18775a402f269425b5d79efe385fe122cc64d
tree2d52fd72d825e2049ef8026707db1a0435c4c99a
parent9e02e2cd0cd67f4318de076307b2ffd311565b38
Remove support for PhysReg joining.

This has been disabled for a while, and it is not a feature we want to
support. Copies between physical and virtual registers are eliminated by
good hinting support in the register allocator. Joining virtual and
physical registers is really a form of register allocation, and the
coalescer is not properly equipped to do that. In particular, it cannot
backtrack coalescing decisions, and sometimes that would cause it to
create programs that were impossible to register allocate, by exhausting
a small register class.

It was also very difficult to keep track of the live ranges of aliasing
registers when extending the live range of a physreg. By disabling
physreg joining, we can let fixed physreg live ranges remain constant
throughout the register allocator super-pass.

One type of physreg joining remains: A virtual register that has a
single value which is a copy of a reserved register can be merged into
the reserved physreg. This always lowers register pressure, and since we
don't compute live ranges for reserved registers, there are no problems
with aliases.

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