[RegisterCoalescer] Add new subtarget hook allowing targets to opt-out of coalescing.
authorChris Bieneman <beanz@apple.com>
Tue, 15 Jul 2014 17:18:41 +0000 (17:18 +0000)
committerChris Bieneman <beanz@apple.com>
Tue, 15 Jul 2014 17:18:41 +0000 (17:18 +0000)
commit01d8611240d26dbf124d216983d2396234f62b95
treeca453d2c252ba5aac63136a3137778a8f3b49f05
parent2dade438d76e084bdc3ad23bc8d84c93edec82fe
[RegisterCoalescer] Add new subtarget hook allowing targets to opt-out of coalescing.

The coalescer is very aggressive at propagating constraints on the register classes, and the register allocator doesn’t know how to split sub-registers later to recover. This patch provides an escape valve for targets that encounter this problem to limit coalescing.

This patch also implements such for ARM to lower register pressure when using lots of large register classes. This works around PR18825.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213078 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Target/TargetSubtargetInfo.h
lib/CodeGen/RegisterCoalescer.cpp
lib/Target/ARM/ARMMachineFunctionInfo.h
lib/Target/ARM/ARMSubtarget.cpp
lib/Target/ARM/ARMSubtarget.h
test/CodeGen/ARM/out-of-registers.ll [new file with mode: 0644]
test/CodeGen/ARM/vector-spilling.ll [new file with mode: 0644]
test/CodeGen/ARM/vldm-sched-a9.ll