Dest type is always i8 *. This allows some simplification.
authorDevang Patel <dpatel@apple.com>
Fri, 12 Oct 2007 20:10:21 +0000 (20:10 +0000)
committerDevang Patel <dpatel@apple.com>
Fri, 12 Oct 2007 20:10:21 +0000 (20:10 +0000)
Do not filter memmove.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42930 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 3096cab4c3ce35ca4d5989c9925fd08f18384c29..3edc86b93d25aa0da79a4b4cb60533ae49975c0d 100644 (file)
@@ -7669,43 +7669,22 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
       // If MemCpyInst length is 1/2/4/8 bytes then replace memcpy with
       // load/store.
       ConstantInt *MemOpLength = dyn_cast<ConstantInt>(CI.getOperand(3));
-      if (isa<MemCpyInst>(MI))
-        if (MemOpLength) {
+      if (MemOpLength) {
         unsigned Size = MemOpLength->getZExtValue();
         unsigned Align = cast<ConstantInt>(CI.getOperand(4))->getZExtValue();
-        const PointerType *PTy = cast<PointerType>(CI.getOperand(1)->getType());
-        const Type *MTy = PTy->getElementType();
         PointerType *NewPtrTy = NULL;
-        if (MTy == Type::Int8Ty) {
-          if (Size == 8)
-            NewPtrTy = PointerType::get(Type::Int64Ty);
-          else if (Size == 4)
-            NewPtrTy = PointerType::get(Type::Int32Ty);
-          else if (Size == 2)
-            NewPtrTy = PointerType::get(Type::Int16Ty);
-          else if (Size == 1)
-            NewPtrTy = PointerType::get(Type::Int8Ty);
-        } else if (MTy == Type::Int16Ty) {
-          if (Size == 4)
-            NewPtrTy = PointerType::get(Type::Int64Ty);
-          else if (Size == 2)
-            NewPtrTy = PointerType::get(Type::Int32Ty);
-          else if (Size == 1)
-            NewPtrTy = PointerType::get(Type::Int16Ty);
-        } else if (MTy == Type::Int32Ty) {
-          if (Size == 2)
-            NewPtrTy = PointerType::get(Type::Int64Ty);
-          else if (Size == 1)
-            NewPtrTy = PointerType::get(Type::Int32Ty);
-        } else if (MTy == Type::Int64Ty) {
-          if (Size == 1)
-            NewPtrTy = PointerType::get(Type::Int64Ty);
-        }
+        // Destination pointer type is always i8 *
+        if (Size == 8)
+          NewPtrTy = PointerType::get(Type::Int64Ty);
+        else if (Size == 4)
+          NewPtrTy = PointerType::get(Type::Int32Ty);
+        else if (Size == 2)
+          NewPtrTy = PointerType::get(Type::Int16Ty);
+        else if (Size == 1)
+          NewPtrTy = PointerType::get(Type::Int8Ty);
         if (NewPtrTy) {
-          Value *Src =
-            InsertCastBefore(Instruction::BitCast,CI.getOperand(2),NewPtrTy,CI);
-          Value *Dest = 
-            InsertCastBefore(Instruction::BitCast,CI.getOperand(1),NewPtrTy,CI);
+          Value *Src = InsertCastBefore(Instruction::BitCast, CI.getOperand(2), NewPtrTy, CI);
+          Value *Dest = InsertCastBefore(Instruction::BitCast, CI.getOperand(1), NewPtrTy, CI);
           Value *L = new LoadInst(Src, "tmp", false, Align, &CI);
           Value *NS = new StoreInst(L, Dest, false, Align, &CI);
           CI.replaceAllUsesWith(NS);