[llvm-commits] CVS: llvm/lib/VMCore/Function.cpp IntrinsicLowering.cpp Verifier.cpp

Chris Lattner lattner at cs.uiuc.edu
Thu Feb 12 11:02:17 PST 2004


Changes in directory llvm/lib/VMCore:

Function.cpp updated: 1.62 -> 1.63
IntrinsicLowering.cpp updated: 1.5 -> 1.6
Verifier.cpp updated: 1.78 -> 1.79

---
Log message:

Implement the llvm.memcpy intrinsic


---
Diffs of the changes:  (+20 -1)

Index: llvm/lib/VMCore/Function.cpp
diff -u llvm/lib/VMCore/Function.cpp:1.62 llvm/lib/VMCore/Function.cpp:1.63
--- llvm/lib/VMCore/Function.cpp:1.62	Sat Jan 10 15:42:24 2004
+++ llvm/lib/VMCore/Function.cpp	Thu Feb 12 11:01:08 2004
@@ -217,6 +217,9 @@
   case 'l':
     if (getName() == "llvm.longjmp")  return Intrinsic::longjmp;
     break;
+  case 'm':
+    if (getName() == "llvm.memcpy")  return Intrinsic::memcpy;
+    break;
   case 's':
     if (getName() == "llvm.setjmp")     return Intrinsic::setjmp;
     if (getName() == "llvm.sigsetjmp")  return Intrinsic::sigsetjmp;


Index: llvm/lib/VMCore/IntrinsicLowering.cpp
diff -u llvm/lib/VMCore/IntrinsicLowering.cpp:1.5 llvm/lib/VMCore/IntrinsicLowering.cpp:1.6
--- llvm/lib/VMCore/IntrinsicLowering.cpp:1.5	Wed Jan 14 14:41:29 2004
+++ llvm/lib/VMCore/IntrinsicLowering.cpp	Thu Feb 12 11:01:09 2004
@@ -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 @@
     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<const Type*>(CFT->param_begin(), CFT->param_end()-1),
+                        false);
+    Function *MemCpy = M->getOrInsertFunction("memcpy", FT);
+    new CallInst(MemCpy, std::vector<Value*>(CI->op_begin()+1, CI->op_end()-1),
+                 CI->getName(), CI);
+    break;
+  }
   }
 
   assert(CI->use_empty() &&


Index: llvm/lib/VMCore/Verifier.cpp
diff -u llvm/lib/VMCore/Verifier.cpp:1.78 llvm/lib/VMCore/Verifier.cpp:1.79
--- llvm/lib/VMCore/Verifier.cpp:1.78	Tue Jan 13 23:42:52 2004
+++ llvm/lib/VMCore/Verifier.cpp	Thu Feb 12 11:01:09 2004
@@ -561,6 +561,8 @@
   case Intrinsic::dbg_region_end:  NumArgs = 1; break;
   case Intrinsic::dbg_func_start:  NumArgs = 1; break;
   case Intrinsic::dbg_declare:     NumArgs = 1; break;
+
+  case Intrinsic::memcpy:          NumArgs = 4; break;
  
   case Intrinsic::alpha_ctlz:      NumArgs = 1; break;
   case Intrinsic::alpha_cttz:      NumArgs = 1; break;





More information about the llvm-commits mailing list