From 5fe51cc2c46afca64638597cdef3bdafa6cd0a8c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 12 Feb 2004 17:01:09 +0000 Subject: Implement the llvm.memcpy intrinsic git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11349 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/IntrinsicLowering.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'lib/CodeGen/IntrinsicLowering.cpp') diff --git a/lib/CodeGen/IntrinsicLowering.cpp b/lib/CodeGen/IntrinsicLowering.cpp index 026150f78b..48ae01540b 100644 --- a/lib/CodeGen/IntrinsicLowering.cpp +++ b/lib/CodeGen/IntrinsicLowering.cpp @@ -13,8 +13,8 @@ #include "llvm/IntrinsicLowering.h" #include "llvm/Constant.h" +#include "llvm/DerivedTypes.h" #include "llvm/Module.h" -#include "llvm/Type.h" #include "llvm/iOther.h" using namespace llvm; @@ -57,6 +57,20 @@ void DefaultIntrinsicLowering::LowerIntrinsicCall(CallInst *CI) { if (CI->getType() != Type::VoidTy) CI->replaceAllUsesWith(Constant::getNullValue(CI->getType())); break; // Simply strip out debugging intrinsics + + case Intrinsic::memcpy: { + // The memcpy intrinsic take an extra alignment argument that the memcpy + // libc function does not. + const FunctionType *CFT = Callee->getFunctionType(); + FunctionType *FT = + FunctionType::get(*CFT->param_begin(), + std::vector(CFT->param_begin(), CFT->param_end()-1), + false); + Function *MemCpy = M->getOrInsertFunction("memcpy", FT); + new CallInst(MemCpy, std::vector(CI->op_begin()+1, CI->op_end()-1), + CI->getName(), CI); + break; + } } assert(CI->use_empty() && -- cgit v1.2.3-18-g5258