aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineFunction.cpp
diff options
context:
space:
mode:
authorVikram S. Adve <vadve@cs.uiuc.edu>2002-03-24 03:39:26 +0000
committerVikram S. Adve <vadve@cs.uiuc.edu>2002-03-24 03:39:26 +0000
commit377646fcfdac435f09371b8c81e02443a395950e (patch)
treeaf678291a46076340dc20132fe00cb4288ffbd4f /llvm/lib/CodeGen/MachineFunction.cpp
parentdc96167e00e8c9dcb733cd7725670a8035abe2a6 (diff)
downloadllvm-377646fcfdac435f09371b8c81e02443a395950e.zip
llvm-377646fcfdac435f09371b8c81e02443a395950e.tar.gz
llvm-377646fcfdac435f09371b8c81e02443a395950e.tar.bz2
Fix padding for variables allocated on stack.
llvm-svn: 1969
Diffstat (limited to 'llvm/lib/CodeGen/MachineFunction.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineFunction.cpp31
1 files changed, 18 insertions, 13 deletions
diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp
index 8e1a80b..de3e4f6 100644
--- a/llvm/lib/CodeGen/MachineFunction.cpp
+++ b/llvm/lib/CodeGen/MachineFunction.cpp
@@ -134,49 +134,54 @@ MachineCodeForMethod::MachineCodeForMethod(const Method* _M,
int
MachineCodeForMethod::computeOffsetforLocalVar(const TargetMachine& target,
const Value* val,
- unsigned int size)
+ unsigned int& getPaddedSize,
+ unsigned int sizeToUse = 0)
{
bool growUp;
int firstOffset =target.getFrameInfo().getFirstAutomaticVarOffset(*this,
growUp);
unsigned char align;
- if (size == 0)
+ if (sizeToUse == 0)
{
- size = target.findOptimalStorageSize(val->getType());
+ sizeToUse = target.findOptimalStorageSize(val->getType());
// align = target.DataLayout.getTypeAlignment(val->getType());
}
-
- align = SizeToAlignment(size, target);
+
+ align = SizeToAlignment(sizeToUse, target);
int offset = getAutomaticVarsSize();
if (! growUp)
- offset += size;
+ offset += sizeToUse;
if (unsigned int mod = offset % align)
{
- offset += align - mod;
- size += align - mod;
+ offset += align - mod;
+ getPaddedSize = sizeToUse + align - mod;
}
-
+ else
+ getPaddedSize = sizeToUse;
+
offset = growUp? firstOffset + offset
: firstOffset - offset;
-
+
return offset;
}
int
MachineCodeForMethod::allocateLocalVar(const TargetMachine& target,
const Value* val,
- unsigned int size)
+ unsigned int sizeToUse = 0)
{
// Check if we've allocated a stack slot for this value already
//
int offset = getOffset(val);
if (offset == INVALID_FRAME_OFFSET)
{
- offset = this->computeOffsetforLocalVar(target, val, size);
+ unsigned int getPaddedSize;
+ offset = this->computeOffsetforLocalVar(target, val, getPaddedSize,
+ sizeToUse);
offsets[val] = offset;
- incrementAutomaticVarsSize(size);
+ incrementAutomaticVarsSize(getPaddedSize);
}
return offset;
}