mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
If there's an unaligned memcpy to/from the stack, don't lower it. Just call the
memcpy library function instead. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43270 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
79217064c6
commit
8b1c68cee4
@ -4329,6 +4329,19 @@ void SelectionDAGLowering::visitMemIntrinsic(CallInst &I, unsigned Op) {
|
||||
}
|
||||
}
|
||||
|
||||
// Check to see if there is an unaligned memcpy from/onto the stack. If
|
||||
// so, then ignore it for the present.
|
||||
if (Op1.getOpcode() == ISD::FrameIndex ||
|
||||
Op2.getOpcode() == ISD::FrameIndex) {
|
||||
unsigned TotalSize = 0;
|
||||
|
||||
for (unsigned i = 0; i < NumMemOps; i++)
|
||||
TotalSize += MVT::getSizeInBits(MemOps[i]) / 8;
|
||||
|
||||
if (TotalSize % Align != 0)
|
||||
break;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < NumMemOps; i++) {
|
||||
MVT::ValueType VT = MemOps[i];
|
||||
unsigned VTSize = MVT::getSizeInBits(VT) / 8;
|
||||
|
13
test/CodeGen/PowerPC/2007-10-23-UnalignedMemcpy.ll
Normal file
13
test/CodeGen/PowerPC/2007-10-23-UnalignedMemcpy.ll
Normal file
@ -0,0 +1,13 @@
|
||||
; RUN: llvm-as < %s | llc -mtriple=powerpc64-apple-darwin9 -o - | grep memcpy
|
||||
|
||||
@C.0.1173 = external constant [33 x i8] ; <[33 x i8]*> [#uses=1]
|
||||
|
||||
define void @Bork() {
|
||||
entry:
|
||||
%Qux = alloca [33 x i8] ; <[33 x i8]*> [#uses=1]
|
||||
%Qux1 = bitcast [33 x i8]* %Qux to i8* ; <i8*> [#uses=1]
|
||||
call void @llvm.memcpy.i64( i8* %Qux1, i8* getelementptr ([33 x i8]* @C.0.1173, i32 0, i32 0), i64 33, i32 8 )
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @llvm.memcpy.i64(i8*, i8*, i64, i32)
|
Loading…
Reference in New Issue
Block a user