]> granicus.if.org Git - llvm/commit
[GlobalISel][AArch64] Contract trivial same-size cross-bank copies into G_STOREs
authorJessica Paquette <jpaquette@apple.com>
Sat, 20 Jul 2019 01:55:35 +0000 (01:55 +0000)
committerJessica Paquette <jpaquette@apple.com>
Sat, 20 Jul 2019 01:55:35 +0000 (01:55 +0000)
commit345261fbe14e30202db9f7bbed5bb164fc768cbd
treecd977dad3dbb10ef8c6020e890e047e66d2acbdd
parentadeb619f50bfcfa74fbfaf26538a69c86a7550b4
[GlobalISel][AArch64] Contract trivial same-size cross-bank copies into G_STOREs

Sometimes, you can end up with cross-bank copies between same-sized GPRs and
FPRs, which feed into G_STOREs. When these copies feed only into stores, they
aren't necessary; we can just store using the original register bank.

This provides some minor code size savings for some floating point SPEC
benchmarks. (Around 0.2% for 453.povray and 450.soplex)

This issue doesn't seem to show up due to regbankselect or anything similar. So,
this patch introduces an early select function, `contractCrossBankCopyIntoStore`
which performs the contraction when possible. The selector then continues
normally and selects the correct store opcode, eliminating needless copies
along the way.

Differential Revision: https://reviews.llvm.org/D65024

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366625 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/AArch64/AArch64InstructionSelector.cpp
test/CodeGen/AArch64/GlobalISel/contract-store.mir [new file with mode: 0644]