Adds the following intrinsics:
- llvm.aarch64.sve.ldnt1
- llvm.aarch64.sve.stnt1
This patch creates masked loads and stores with the
MONonTemporal flag set when used with the intrinsics above.
Paths
| Differential D71000
[AArch64][SVE] Implement intrinsics for non-temporal loads & stores ClosedPublic Authored by kmclaughlin on Dec 4 2019, 2:21 AM.
Details Summary Adds the following intrinsics:
This patch creates masked loads and stores with the
Diff Detail Event Timeline
Comment Actions
kmclaughlin added inline comments. Comment Actions LGTM
This revision is now accepted and ready to land.Dec 9 2019, 12:43 PM kmclaughlin marked an inline comment as done. Comment Actions
Closed by commit rG3f5bf35f868d: [AArch64][SVE] Implement intrinsics for non-temporal loads & stores (authored by kmclaughlin). · Explain WhyDec 11 2019, 3:23 AM This revision was automatically updated to reflect the committed changes.
Revision Contents
Diff 233298 llvm/include/llvm/IR/IntrinsicsAArch64.td
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/AArch64/AArch64InstrInfo.td
llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
llvm/test/CodeGen/AArch64/sve-intrinsics-loads.ll
llvm/test/CodeGen/AArch64/sve-intrinsics-stores.ll
|
In order for alias analysis to correctly handle a MachineMemOperand, the "Size" of an operation has to be conservative, in the sense that the the number of bytes accessed must be at most "Size". Otherwise we'll assume two operations don't alias when they actually do.
For a scaled vector, we don't know the size, so we have to conservatively pass "MemoryLocation::UnknownSize".