diff options
Diffstat (limited to 'lib/VMCore/AutoUpgrade.cpp')
-rw-r--r-- | lib/VMCore/AutoUpgrade.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/VMCore/AutoUpgrade.cpp b/lib/VMCore/AutoUpgrade.cpp index 55cde23993..689a32f958 100644 --- a/lib/VMCore/AutoUpgrade.cpp +++ b/lib/VMCore/AutoUpgrade.cpp @@ -84,10 +84,18 @@ static Function *getUpgradedIntrinsic(Function *F) { case 'm': if (Name == "llvm.memcpy" || Name == "llvm.memset" || Name == "llvm.memmove") { - if (F->getFunctionType()->getParamType(2) == Type::UIntTy) - return M->getOrInsertFunction(Name+".i32", F->getFunctionType()); - if (F->getFunctionType()->getParamType(2) == Type::ULongTy) - return M->getOrInsertFunction(Name+".i64", F->getFunctionType()); + if (F->getFunctionType()->getParamType(2) == Type::UIntTy || + F->getFunctionType()->getParamType(2) == Type::IntTy) + return M->getOrInsertFunction(Name+".i32", Type::VoidTy, + PointerType::get(Type::SByteTy), + F->getFunctionType()->getParamType(1), + Type::UIntTy, Type::UIntTy, NULL); + if (F->getFunctionType()->getParamType(2) == Type::ULongTy || + F->getFunctionType()->getParamType(2) == Type::LongTy) + return M->getOrInsertFunction(Name+".i64", Type::VoidTy, + PointerType::get(Type::SByteTy), + F->getFunctionType()->getParamType(1), + Type::ULongTy, Type::UIntTy, NULL); } break; case 's': |