Fix padding for variables allocated on stack.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1969 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Vikram S. Adve 2002-03-24 03:39:26 +00:00
parent c941b87397
commit e4e4d4e2f9

View File

@ -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;
}