[AArch64] Support selecting STNP.
authorAhmed Bougacha <ahmed.bougacha@gmail.com>
Thu, 10 Sep 2015 01:42:28 +0000 (01:42 +0000)
committerAhmed Bougacha <ahmed.bougacha@gmail.com>
Thu, 10 Sep 2015 01:42:28 +0000 (01:42 +0000)
commitd636e64cbcb85252ffe281d640b9a42ff608d832
tree792240a3148ac173540ef08ff4f4d19d716514b8
parent3a2cec85a73bab763007452efcbe17f4f3c0659f
[AArch64] Support selecting STNP.

We could go through the load/store optimizer and match STNP where
we would have matched a nontemporal-annotated STP, but that's not
reliable enough, as an opportunistic optimization.
Insetad, we can guarantee emitting STNP, by matching them at ISel.
Since there are no single-input nontemporal stores, we have to
resort to some high-bits-extracting trickery to generate an STNP
from a plain store.

Also, we need to support another, LDP/STP-specific addressing mode,
base + signed scaled 7-bit immediate offset.
For now, only match the base. Let's make it smart separately.

Part of PR24086.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@247231 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
lib/Target/AArch64/AArch64InstrFormats.td
lib/Target/AArch64/AArch64InstrInfo.td
test/CodeGen/AArch64/nontemporal.ll [new file with mode: 0644]