Reverting r276771 due to MSan failures.
authorAndrew Kaylor <andrew.kaylor@intel.com>
Wed, 27 Jul 2016 01:19:24 +0000 (01:19 +0000)
committerAndrew Kaylor <andrew.kaylor@intel.com>
Wed, 27 Jul 2016 01:19:24 +0000 (01:19 +0000)
llvm-svn: 276824

llvm/include/llvm/Analysis/TargetLibraryInfo.def
llvm/include/llvm/Analysis/TargetLibraryInfo.h
llvm/lib/Analysis/TargetLibraryInfo.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h
llvm/lib/Transforms/Utils/BuildLibCalls.cpp
llvm/test/Transforms/InferFunctionAttrs/annotate.ll
llvm/test/Transforms/InferFunctionAttrs/no-proto.ll

index 5d5e5b1..b2a593d 100644 (file)
@@ -734,9 +734,6 @@ TLI_DEFINE_STRING_INTERNAL("memcpy")
 /// void *memmove(void *s1, const void *s2, size_t n);
 TLI_DEFINE_ENUM_INTERNAL(memmove)
 TLI_DEFINE_STRING_INTERNAL("memmove")
-/// void *mempcpy(void *s1, const void *s2, size_t n);
-TLI_DEFINE_ENUM_INTERNAL(mempcpy)
-TLI_DEFINE_STRING_INTERNAL("mempcpy")
 // void *memrchr(const void *s, int c, size_t n);
 TLI_DEFINE_ENUM_INTERNAL(memrchr)
 TLI_DEFINE_STRING_INTERNAL("memrchr")
index 411dd74..7efa6f0 100644 (file)
@@ -251,7 +251,7 @@ public:
     case LibFunc::exp2:      case LibFunc::exp2f:      case LibFunc::exp2l:
     case LibFunc::memcmp:    case LibFunc::strcmp:     case LibFunc::strcpy:
     case LibFunc::stpcpy:    case LibFunc::strlen:     case LibFunc::strnlen:
-    case LibFunc::memchr:    case LibFunc::mempcpy:
+    case LibFunc::memchr:
       return true;
     }
     return false;
index cb02faf..93d537a 100644 (file)
@@ -642,7 +642,6 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy,
       return false;
   // fallthrough
   case LibFunc::memcpy:
-  case LibFunc::mempcpy:
   case LibFunc::memmove:
     return (NumParams == 3 && FTy.getReturnType() == FTy.getParamType(0) &&
             FTy.getParamType(0)->isPointerTy() &&
index af86d87..e03282c 100644 (file)
@@ -6044,49 +6044,6 @@ bool SelectionDAGBuilder::visitMemChrCall(const CallInst &I) {
   return false;
 }
 
-///
-/// visitMemPCpyCall -- lower a mempcpy call as a memcpy followed by code to
-/// to adjust the dst pointer by the size of the copied memory.
-bool SelectionDAGBuilder::visitMemPCpyCall(const CallInst &I) {
-
-  // Verify argument count: void *mempcpy(void *, const void *, size_t)
-  if (I.getNumArgOperands() != 3)
-    return false;
-
-  SDValue Dst = getValue(I.getArgOperand(0));
-  SDValue Src = getValue(I.getArgOperand(1));
-  SDValue Size = getValue(I.getArgOperand(2));
-
-  unsigned DstAlign = DAG.InferPtrAlignment(Dst);
-  unsigned SrcAlign = DAG.InferPtrAlignment(Src);
-  unsigned Align = std::min(DstAlign, SrcAlign);
-  if (Align == 0) // Alignment of one or both could not be inferred.
-    Align = 1; // 0 and 1 both specify no alignment, but 0 is reserved.
-
-  bool isVol = false;
-  SDLoc sdl = getCurSDLoc();
-
-  // In the mempcpy context we need to pass in a false value for isTailCall
-  // because the return pointer needs to be adjusted by the size of
-  // the copied memory.
-  SDValue MC = DAG.getMemcpy(getRoot(), sdl, Dst, Src, Size, Align, isVol,
-                             false, /*isTailCall=*/false,
-                             MachinePointerInfo(I.getArgOperand(0)),
-                             MachinePointerInfo(I.getArgOperand(1)));
-  assert(MC.getNode() != nullptr &&
-         "** memcpy should not be lowered as TailCall in mempcpy context **");
-  DAG.setRoot(MC);
-
-  // Check if Size needs to be truncated or extended.
-  Size = DAG.getSExtOrTrunc(Size, sdl, Dst.getValueType());
-
-  // Adjust return pointer to point just past the last dst byte.
-  SDValue DstPlusSize = DAG.getNode(ISD::ADD, sdl, Dst.getValueType(),
-                                    Dst, Size);
-  setValue(&I, DstPlusSize);
-  return true;
-}
-
 /// visitStrCpyCall -- See if we can lower a strcpy or stpcpy call into an
 /// optimized form.  If so, return true and lower it, otherwise return false
 /// and it will be lowered like a normal call.
@@ -6377,10 +6334,6 @@ void SelectionDAGBuilder::visitCall(const CallInst &I) {
         if (visitMemCmpCall(I))
           return;
         break;
-      case LibFunc::mempcpy:
-        if (visitMemPCpyCall(I))
-          return;
-        break;
       case LibFunc::memchr:
         if (visitMemChrCall(I))
           return;
index 18c39d0..b9888ae 100644 (file)
@@ -885,7 +885,6 @@ private:
   void visitPHI(const PHINode &I);
   void visitCall(const CallInst &I);
   bool visitMemCmpCall(const CallInst &I);
-  bool visitMemPCpyCall(const CallInst &I);
   bool visitMemChrCall(const CallInst &I);
   bool visitStrCpyCall(const CallInst &I, bool isStpcpy);
   bool visitStrCmpCall(const CallInst &I);
index e61b04f..f4260a9 100644 (file)
@@ -250,7 +250,6 @@ bool llvm::inferLibFuncAttributes(Function &F, const TargetLibraryInfo &TLI) {
     Changed |= setDoesNotCapture(F, 2);
     return Changed;
   case LibFunc::memcpy:
-  case LibFunc::mempcpy:
   case LibFunc::memccpy:
   case LibFunc::memmove:
     Changed |= setDoesNotThrow(F);
index 64676bf..039114d 100644 (file)
@@ -499,9 +499,6 @@ declare i32 @memcmp(i8*, i8*, i64)
 ; CHECK: declare i8* @memcpy(i8*, i8* nocapture readonly, i64) [[G0]]
 declare i8* @memcpy(i8*, i8*, i64)
 
-; CHECK: declare i8* @mempcpy(i8*, i8* nocapture readonly, i64) [[G0]]
-declare i8* @mempcpy(i8*, i8*, i64)
-
 ; CHECK: declare i8* @memmove(i8*, i8* nocapture readonly, i64) [[G0]]
 declare i8* @memmove(i8*, i8*, i64)
 
index 25a4805..256f5c3 100644 (file)
@@ -480,9 +480,6 @@ declare void @memcmp(...)
 ; CHECK: declare void @memcpy(...)
 declare void @memcpy(...)
 
-; CHECK: declare void @mempcpy(...)
-declare void @mempcpy(...)
-
 ; CHECK: declare void @memmove(...)
 declare void @memmove(...)