- Remove the hacky code that forces a memcpy. Alignment is taken care of in the
authorBill Wendling <isanbard@gmail.com>
Fri, 26 Oct 2007 20:24:42 +0000 (20:24 +0000)
committerBill Wendling <isanbard@gmail.com>
Fri, 26 Oct 2007 20:24:42 +0000 (20:24 +0000)
  FE.
- Explicitly pass in the alignment of the load & store.
- XFAIL 2007-10-23-UnalignedMemcpy.ll because llc has a bug that crashes on
  unaligned pointers.

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

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
test/CodeGen/PowerPC/2007-10-23-UnalignedMemcpy.ll

index 39aa07618d1e69ee34eaadbcdce39c72f9d3d243..b103e28b54e0dea33ee760217f974dd128f05bb8 100644 (file)
@@ -4329,14 +4329,6 @@ void SelectionDAGLowering::visitMemIntrinsic(CallInst &I, unsigned Op) {
           }
         }
 
-        // The lowered load/store instructions from/to the stack frame can be
-        // unaligned depending on whether it's accessed off sp or fp. If this is
-        // the case, then just use the memcpy library call.
-        if (Op1.getOpcode() == ISD::FrameIndex ||
-            Op2.getOpcode() == ISD::FrameIndex)
-          if (Size->getValue() % Align != 0)
-            break;
-
         for (unsigned i = 0; i < NumMemOps; i++) {
           MVT::ValueType VT = MemOps[i];
           unsigned VTSize = MVT::getSizeInBits(VT) / 8;
@@ -4351,13 +4343,13 @@ void SelectionDAGLowering::visitMemIntrinsic(CallInst &I, unsigned Op) {
                            I.getOperand(1), DstOff);
           } else {
             Value = DAG.getLoad(VT, getRoot(),
-                        getMemBasePlusOffset(Op2, SrcOff, DAG, TLI),
-                        I.getOperand(2), SrcOff);
+                                getMemBasePlusOffset(Op2, SrcOff, DAG, TLI),
+                                I.getOperand(2), SrcOff, false, Align);
             Chain = Value.getValue(1);
             Store =
               DAG.getStore(Chain, Value,
                            getMemBasePlusOffset(Op1, DstOff, DAG, TLI),
-                           I.getOperand(1), DstOff);
+                           I.getOperand(1), DstOff, false, Align);
           }
           OutChains.push_back(Store);
           SrcOff += VTSize;
index c0cf201f72ea5efc1193187a7b47d727113d9570..d33812937a96538379780b3a47cb46c8c889ba65 100644 (file)
@@ -1,4 +1,5 @@
 ; RUN: llvm-as < %s | llc -mtriple=powerpc64-apple-darwin9 -o - | grep memcpy
+; XFAIL: *
 
 @C.0.1173 = external constant [33 x i8]         ; <[33 x i8]*> [#uses=1]