summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64ISelLowering.h
diff options
context:
space:
mode:
authorAmara Emerson <aemerson@apple.com>2019-07-24 22:17:31 +0000
committerAmara Emerson <aemerson@apple.com>2019-07-24 22:17:31 +0000
commit13af1ed8e37c3f53b4dbd03f7c40b069d4895087 (patch)
tree2b005088e9b02aa4743ac52ce5b94cf34a99c6ab /llvm/lib/Target/AArch64/AArch64ISelLowering.h
parenteb6782758a54f200a1a5e531bef28192833d2584 (diff)
downloadbcm5719-llvm-13af1ed8e37c3f53b4dbd03f7c40b069d4895087.tar.gz
bcm5719-llvm-13af1ed8e37c3f53b4dbd03f7c40b069d4895087.zip
[GlobalISel] Support for inlining memcpy, memset and memmove calls.
This introduces a new family of combiner helper routines that re-use the target specific cost model from SelectionDAG, and generate inline implementations of the memcpy family of intrinsics. The combines are only enabled at optimization levels higher than -O0, and give very substantial performance improvements. Differential Revision: https://reviews.llvm.org/D65167 llvm-svn: 366951
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64ISelLowering.h')
-rw-r--r--llvm/lib/Target/AArch64/AArch64ISelLowering.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.h b/llvm/lib/Target/AArch64/AArch64ISelLowering.h
index 4421c31f65c..34e1fdf441e 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.h
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.h
@@ -272,6 +272,10 @@ public:
EVT VT, unsigned AddrSpace = 0, unsigned Align = 1,
MachineMemOperand::Flags Flags = MachineMemOperand::MONone,
bool *Fast = nullptr) const override;
+ /// LLT variant.
+ bool allowsMisalignedMemoryAccesses(
+ LLT Ty, unsigned AddrSpace, unsigned Align, MachineMemOperand::Flags Flags,
+ bool *Fast = nullptr) const override;
/// Provide custom lowering hooks for some operations.
SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
@@ -358,6 +362,10 @@ public:
bool IsMemset, bool ZeroMemset, bool MemcpyStrSrc,
const AttributeList &FuncAttributes) const override;
+ LLT getOptimalMemOpLLT(uint64_t Size, unsigned DstAlign, unsigned SrcAlign,
+ bool IsMemset, bool ZeroMemset, bool MemcpyStrSrc,
+ const AttributeList &FuncAttributes) const override;
+
/// Return true if the addressing mode represented by AM is legal for this
/// target, for a load/store of the specified type.
bool isLegalAddressingMode(const DataLayout &DL, const AddrMode &AM, Type *Ty,
OpenPOWER on IntegriCloud