[GlobalISel][Localizer] Rewrite localizer to run in 2 phases, inter & intra block.
Inter-block localization is the same as what currently happens, except now it
only runs on the entry block because that's where the problematic constants with
long live ranges come from.
The second phase is a new intra-block localization phase which attempts to
re-sink the already localized instructions further right before one of the
multiple uses.
One additional change is to also localize G_GLOBAL_VALUE as they're constants
too. However, on some targets like arm64 it takes multiple instructions to
materialize the value, so some additional heuristics with a TTI hook have been
introduced attempt to prevent code size regressions when localizing these.
Overall, these changes improve CTMark code size on arm64 by 1.2%.
Full code size results:
Program baseline new diff
------------------------------------------------------------------------------
test-suite...-typeset/consumer-typeset.test
1249984 1217216 -2.6%
test-suite...:: CTMark/ClamAV/clamscan.test
1264928 1232152 -2.6%
test-suite :: CTMark/SPASS/SPASS.test
1394092 1361316 -2.4%
test-suite...Mark/mafft/pairlocalalign.test 731320 714928 -2.2%
test-suite :: CTMark/lencod/lencod.test
1340592 1324200 -1.2%
test-suite :: CTMark/kimwitu++/kc.test
3853512 3820420 -0.9%
test-suite :: CTMark/Bullet/bullet.test
3406036 3389652 -0.5%
test-suite...ark/tramp3d-v4/tramp3d-v4.test
8017000 8016992 -0.0%
test-suite...TMark/7zip/7zip-benchmark.test
2856588 2856588 0.0%
test-suite...:: CTMark/sqlite3/sqlite3.test 765704 765704 0.0%
Geomean difference -1.2%
Differential Revision: https://reviews.llvm.org/D63303
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363632
91177308-0d34-0410-b5e6-
96231b3b80d8