LLVM  7.0.0svn
LowerMemIntrinsics.h
Go to the documentation of this file.
1 //===- llvm/Transforms/Utils/LowerMemintrinsics.h ---------------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Lower memset, memcpy, memmov intrinsics to loops (e.g. for targets without
11 // library support).
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_TRANSFORMS_UTILS_LOWERMEMINTRINSICS_H
16 #define LLVM_TRANSFORMS_UTILS_LOWERMEMINTRINSICS_H
17 
18 namespace llvm {
19 
20 class ConstantInt;
21 class Instruction;
22 class MemCpyInst;
23 class MemMoveInst;
24 class MemSetInst;
25 class TargetTransformInfo;
26 class Value;
27 
28 /// Emit a loop implementing the semantics of llvm.memcpy where the size is not
29 /// a compile-time constant. Loop will be insterted at \p InsertBefore.
30 void createMemCpyLoopUnknownSize(Instruction *InsertBefore, Value *SrcAddr,
31  Value *DstAddr, Value *CopyLen,
32  unsigned SrcAlign, unsigned DestAlign,
33  bool SrcIsVolatile, bool DstIsVolatile,
34  const TargetTransformInfo &TTI);
35 
36 /// Emit a loop implementing the semantics of an llvm.memcpy whose size is a
37 /// compile time constant. Loop is inserted at \p InsertBefore.
38 void createMemCpyLoopKnownSize(Instruction *InsertBefore, Value *SrcAddr,
39  Value *DstAddr, ConstantInt *CopyLen,
40  unsigned SrcAlign, unsigned DestAlign,
41  bool SrcIsVolatile, bool DstIsVolatile,
42  const TargetTransformInfo &TTI);
43 
44 
45 /// Expand \p MemCpy as a loop. \p MemCpy is not deleted.
46 void expandMemCpyAsLoop(MemCpyInst *MemCpy, const TargetTransformInfo &TTI);
47 
48 /// Expand \p MemMove as a loop. \p MemMove is not deleted.
49 void expandMemMoveAsLoop(MemMoveInst *MemMove);
50 
51 /// Expand \p MemSet as a loop. \p MemSet is not deleted.
52 void expandMemSetAsLoop(MemSetInst *MemSet);
53 
54 } // End llvm namespace
55 
56 #endif
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
void expandMemMoveAsLoop(MemMoveInst *MemMove)
Expand MemMove as a loop. MemMove is not deleted.
void expandMemSetAsLoop(MemSetInst *MemSet)
Expand MemSet as a loop. MemSet is not deleted.
void createMemCpyLoopKnownSize(Instruction *InsertBefore, Value *SrcAddr, Value *DstAddr, ConstantInt *CopyLen, unsigned SrcAlign, unsigned DestAlign, bool SrcIsVolatile, bool DstIsVolatile, const TargetTransformInfo &TTI)
Emit a loop implementing the semantics of an llvm.memcpy whose size is a compile time constant...
void createMemCpyLoopUnknownSize(Instruction *InsertBefore, Value *SrcAddr, Value *DstAddr, Value *CopyLen, unsigned SrcAlign, unsigned DestAlign, bool SrcIsVolatile, bool DstIsVolatile, const TargetTransformInfo &TTI)
Emit a loop implementing the semantics of llvm.memcpy where the size is not a compile-time constant...
void expandMemCpyAsLoop(MemCpyInst *MemCpy, const TargetTransformInfo &TTI)
Expand MemCpy as a loop. MemCpy is not deleted.