Go to the documentation of this file.
14 #ifndef LLVM_TRANSFORMS_UTILS_LOWERMEMINTRINSICS_H
15 #define LLVM_TRANSFORMS_UTILS_LOWERMEMINTRINSICS_H
21 class AtomicMemCpyInst;
27 class ScalarEvolution;
28 class TargetTransformInfo;
36 Align DestAlign,
bool SrcIsVolatile,
37 bool DstIsVolatile,
bool CanOverlap,
38 const TargetTransformInfo &
TTI,
39 Optional<unsigned> AtomicSize =
None);
44 Value *DstAddr, ConstantInt *CopyLen,
46 bool SrcIsVolatile,
bool DstIsVolatile,
47 bool CanOverlap,
const TargetTransformInfo &
TTI,
48 Optional<uint32_t> AtomicCpySize =
None);
52 ScalarEvolution *SE =
nullptr);
62 const TargetTransformInfo &
TTI,
This is an optimization pass for GlobalISel generic memory operations.
void createMemCpyLoopUnknownSize(Instruction *InsertBefore, Value *SrcAddr, Value *DstAddr, Value *CopyLen, Align SrcAlign, Align DestAlign, bool SrcIsVolatile, bool DstIsVolatile, bool CanOverlap, const TargetTransformInfo &TTI, Optional< unsigned > AtomicSize=None)
Emit a loop implementing the semantics of llvm.memcpy where the size is not a compile-time constant.
void expandMemSetAsLoop(MemSetInst *MemSet)
Expand MemSet as a loop. MemSet is not deleted.
void expandMemMoveAsLoop(MemMoveInst *MemMove)
Expand MemMove as a loop. MemMove is not deleted.
void createMemCpyLoopKnownSize(Instruction *InsertBefore, Value *SrcAddr, Value *DstAddr, ConstantInt *CopyLen, Align SrcAlign, Align DestAlign, bool SrcIsVolatile, bool DstIsVolatile, bool CanOverlap, const TargetTransformInfo &TTI, Optional< uint32_t > AtomicCpySize=None)
Emit a loop implementing the semantics of an llvm.memcpy whose size is a compile time constant.
void expandAtomicMemCpyAsLoop(AtomicMemCpyInst *AtomicMemCpy, const TargetTransformInfo &TTI, ScalarEvolution *SE)
Expand AtomicMemCpy as a loop. AtomicMemCpy is not deleted.
void expandMemCpyAsLoop(MemCpyInst *MemCpy, const TargetTransformInfo &TTI, ScalarEvolution *SE=nullptr)
Expand MemCpy as a loop. MemCpy is not deleted.