diff options
author | Vikram S. Adve <vadve@cs.uiuc.edu> | 2002-03-24 03:39:26 +0000 |
---|---|---|
committer | Vikram S. Adve <vadve@cs.uiuc.edu> | 2002-03-24 03:39:26 +0000 |
commit | 377646fcfdac435f09371b8c81e02443a395950e (patch) | |
tree | af678291a46076340dc20132fe00cb4288ffbd4f /llvm/lib/CodeGen/MachineFunction.cpp | |
parent | dc96167e00e8c9dcb733cd7725670a8035abe2a6 (diff) | |
download | llvm-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.cpp | 31 |
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; } |