summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2008-05-19 23:27:48 +0000
committerEli Friedman <eli.friedman@gmail.com>2008-05-19 23:27:48 +0000
commita3a4068949f6ab5c41f3ebcc68bad9b6b33a3533 (patch)
tree7aea7db6d6078d763efa04e420303eef97a0ce09 /clang/lib
parent3b965e1d01ab8d02bae4a2b6f80c76eb95c18982 (diff)
downloadbcm5719-llvm-a3a4068949f6ab5c41f3ebcc68bad9b6b33a3533.tar.gz
bcm5719-llvm-a3a4068949f6ab5c41f3ebcc68bad9b6b33a3533.zip
Implement CodeGen for __builtin_memcpy.
llvm-svn: 51282
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/CodeGen/CGBuiltin.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index d15780a63ba..e29a1742293 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -252,6 +252,16 @@ RValue CodeGenFunction::EmitBuiltinExpr(unsigned BuiltinID, const CallExpr *E) {
return RValue::get(Builder.CreateAlloca(llvm::Type::Int8Ty,
EmitScalarExpr(E->getArg(0)),
"tmp"));
+ case Builtin::BI__builtin_memcpy: {
+ Value* MemCpyOps[4] = {
+ EmitScalarExpr(E->getArg(0)),
+ EmitScalarExpr(E->getArg(1)),
+ EmitScalarExpr(E->getArg(2)),
+ llvm::ConstantInt::get(llvm::Type::Int32Ty, 0)
+ };
+ Builder.CreateCall(CGM.getMemCpyFn(), MemCpyOps, MemCpyOps+4);
+ return RValue::get(MemCpyOps[0]);
+ }
case Builtin::BI__sync_fetch_and_add:
return EmitBinaryAtomic(*this, Intrinsic::atomic_las, E);
case Builtin::BI__sync_fetch_and_sub:
OpenPOWER on IntegriCloud