ARM64: use 32-bit moves for constants where possible.
authorTim Northover <tnorthover@apple.com>
Wed, 16 Apr 2014 11:52:51 +0000 (11:52 +0000)
committerTim Northover <tnorthover@apple.com>
Wed, 16 Apr 2014 11:52:51 +0000 (11:52 +0000)
commitfef8e383eb8c0dc534c7cac98b3670dec2cc86fb
tree30177c4f31c2bff05701633d347412f874b22353
parentea9988a81231d4097efe6799f7e2f4922dab2d7f
ARM64: use 32-bit moves for constants where possible.

If we know that a particular 64-bit constant has all high bits zero, then we
can rely on the fact that 32-bit ARM64 instructions automatically zero out the
high bits of an x-register. This gives the expansion logic less constraints to
satisfy and so sometimes allows it to pick better sequences.

Came up while porting test/CodeGen/AArch64/movw-consts.ll: this will allow a
32-bit MOVN to be used in @test8 soon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206379 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM64/ARM64DeadRegisterDefinitionsPass.cpp
lib/Target/ARM64/ARM64InstrInfo.td
test/CodeGen/AArch64/cond-sel.ll
test/CodeGen/AArch64/i128-align.ll
test/CodeGen/ARM64/aapcs.ll
test/CodeGen/ARM64/atomic.ll
test/CodeGen/ARM64/bitfield-extract.ll
test/CodeGen/ARM64/const-addr.ll
test/CodeGen/ARM64/csel.ll
test/CodeGen/ARM64/long-shift.ll
test/CodeGen/ARM64/patchpoint.ll