It's not necessary to do rounding for alloca operations when the requested

alignment is equal to the stack alignment.

llvm-svn: 40004
This commit is contained in:
Dan Gohman 2007-07-18 16:29:46 +00:00
parent bd27073f2a
commit a7b65c30a3
2 changed files with 14 additions and 5 deletions

View File

@ -2327,13 +2327,13 @@ void SelectionDAGLowering::visitAlloca(AllocaInst &I) {
AllocSize = DAG.getNode(ISD::MUL, IntPtr, AllocSize,
getIntPtrConstant(TySize));
// Handle alignment. If the requested alignment is less than or equal to the
// stack alignment, ignore it and round the size of the allocation up to the
// stack alignment size. If the size is greater than the stack alignment, we
// note this in the DYNAMIC_STACKALLOC node.
// Handle alignment. If the requested alignment is less than the stack
// alignment, ignore it and round the size of the allocation up to the stack
// alignment size. If the size is greater than or equal to the stack
// alignment, we note this in the DYNAMIC_STACKALLOC node.
unsigned StackAlign =
TLI.getTargetMachine().getFrameInfo()->getStackAlignment();
if (Align <= StackAlign) {
if (Align < StackAlign) {
Align = 0;
// Add SA-1 to the size.
AllocSize = DAG.getNode(ISD::ADD, AllocSize.getValueType(), AllocSize,

View File

@ -0,0 +1,9 @@
; RUN: llvm-as < %s | llc -march=x86-64 | not grep and
declare void @bar(<2 x i64>* %n)
define void @foo(i32 %h) {
%p = alloca <2 x i64>, i32 %h
call void @bar(<2 x i64>* %p)
ret void
}