1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 03:23:01 +02:00

Fix a memcpy lowering bug. Even though the memcpy alignment is smaller than the desired alignment, the frame destination alignment may still be larger than the desired alignment. Don't change its alignment to something smaller.

llvm-svn: 51970
This commit is contained in:
Evan Cheng 2008-06-04 23:37:54 +00:00
parent 264b60b69d
commit e77d6a1a2d
2 changed files with 22 additions and 2 deletions

View File

@ -2633,8 +2633,9 @@ bool MeetsMaxMemopRequirement(std::vector<MVT::ValueType> &MemOps,
if (AllowUnalign)
VT = MVT::iAny;
} else {
// Give the stack frame object a larger alignment.
MFI->setObjectAlignment(FI, NewAlign);
// Give the stack frame object a larger alignment if needed.
if (MFI->getObjectAlignment(FI) < NewAlign)
MFI->setObjectAlignment(FI, NewAlign);
Align = NewAlign;
}
}

View File

@ -0,0 +1,19 @@
; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin -mattr=+sse2 -disable-fp-elim | grep subl | grep 24
%struct.argument_t = type { i8*, %struct.argument_t*, i32, %struct.ipc_type_t*, i32, void (...)*, void (...)*, void (...)*, void (...)*, void (...)*, i8*, i8*, i8*, i8*, i8*, i32, i32, i32, %struct.routine*, %struct.argument_t*, %struct.argument_t*, %struct.argument_t*, %struct.argument_t*, %struct.argument_t*, %struct.argument_t*, %struct.argument_t*, i32, i32, i32, i32, i32, i32 }
%struct.ipc_type_t = type { i8*, %struct.ipc_type_t*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8*, i8*, i32, i32, i32, i32, i32, i32, %struct.ipc_type_t*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8* }
%struct.routine = type opaque
@"\01LC" = external constant [11 x i8] ; <[11 x i8]*> [#uses=1]
define i8* @InArgMsgField(%struct.argument_t* %arg, i8* %str) nounwind {
entry:
%who = alloca [20 x i8] ; <[20 x i8]*> [#uses=1]
%who1 = getelementptr [20 x i8]* %who, i32 0, i32 0 ; <i8*> [#uses=2]
call void @llvm.memset.i32( i8* %who1, i8 0, i32 20, i32 1 )
call void @llvm.memcpy.i32( i8* %who1, i8* getelementptr ([11 x i8]* @"\01LC", i32 0, i32 0), i32 11, i32 1 )
unreachable
}
declare void @llvm.memset.i32(i8*, i8, i32, i32) nounwind
declare void @llvm.memcpy.i32(i8*, i8*, i32, i32) nounwind