Register Allocator: check other options before using a CSR for the first time.
authorManman Ren <manman.ren@gmail.com>
Tue, 25 Mar 2014 00:16:25 +0000 (00:16 +0000)
committerManman Ren <manman.ren@gmail.com>
Tue, 25 Mar 2014 00:16:25 +0000 (00:16 +0000)
commit692d1830f3fc0fc583f1bb84f9ab3574bc546e3b
tree5a54aff31b6757dcc5107cf46cb405a76ecb91b5
parent4a88cd08da9318d5d29cad4f9807ec395b341f68
Register Allocator: check other options before using a CSR for the first time.

When register allocator's stage is RS_Spill, we choose spill over using the CSR
for the first time, if the spill cost is lower than CSRCost.
When register allocator's stage is < RS_Split, we choose pre-splitting over
using the CSR for the first time, if the cost of splitting is lower than
CSRCost.

CSRCost is set with command-line option "regalloc-csr-first-time-cost". The
default value is 0 to generate the same codes as before this commit.

With a value of 15 (1 << 14 is the entry frequency), I measured performance
gain of 3% on 253.perlbmk and 1.7% on 197.parser, with instrumented PGO,
on an arm device.

rdar://16162005

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204690 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/RegAllocGreedy.cpp
test/CodeGen/AArch64/ragreedy-csr.ll [new file with mode: 0644]