[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)
commit03695ab57e9ff0ae2302bc0313fcd23e0cf5f7fc
tree700b7475a8275952bad61d7ab3a2e99dfb762fef
parent64c0ac2b35df65e38c966089f9a7ab9075bf7f58
[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.

llvm-svn: 213078
llvm/include/llvm/Target/TargetSubtargetInfo.h
llvm/lib/CodeGen/RegisterCoalescer.cpp
llvm/lib/Target/ARM/ARMMachineFunctionInfo.h
llvm/lib/Target/ARM/ARMSubtarget.cpp
llvm/lib/Target/ARM/ARMSubtarget.h
llvm/test/CodeGen/ARM/out-of-registers.ll [new file with mode: 0644]
llvm/test/CodeGen/ARM/vector-spilling.ll [new file with mode: 0644]
llvm/test/CodeGen/ARM/vldm-sched-a9.ll