mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-21 19:20:28 +00:00
- Remove the hacky code that forces a memcpy. Alignment is taken care of in the
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. llvm-svn: 43398
This commit is contained in:
parent
87e1cadc06
commit
8d329ff809
@ -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;
|
||||
|
@ -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]
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user