diff --git a/lib/CodeGen/MachineInstr.cpp b/lib/CodeGen/MachineInstr.cpp
index 4e1865d..3ce7a2a 100644
--- a/lib/CodeGen/MachineInstr.cpp
+++ b/lib/CodeGen/MachineInstr.cpp
@@ -251,21 +251,24 @@
   int offset = getOffset(val);
   if (offset == INVALID_FRAME_OFFSET)
     {
+      bool growUp;
+      int firstOffset =target.getFrameInfo().getFirstAutomaticVarOffset(*this,
+                                                                       growUp);
       unsigned int  size  = target.findOptimalStorageSize(val->getType());
       unsigned char align = target.DataLayout.getTypeAlignment(val->getType());
       
       offset = getAutomaticVarsSize();
+      if (! growUp)
+        offset += size; 
+      
       if (unsigned int mod = offset % align)
         {
           offset += align - mod;
           size   += align - mod;
         }
       
-      bool growUp;
-      int firstOffset =target.getFrameInfo().getFirstAutomaticVarOffset(*this,
-                                                                       growUp);
       offset = growUp? firstOffset + offset
-                     : firstOffset - offset - size;
+                     : firstOffset - offset;
       
       offsets[val] = offset;
       
@@ -281,29 +284,33 @@
   unsigned int size  = target.findOptimalStorageSize(type);
   unsigned char align = target.DataLayout.getTypeAlignment(type);
   
-  int offset = getRegSpillsSize();
-  if (unsigned int mod = offset % align)
-    {
-      offset += align - mod;
-      size   += align - mod;
-    }
-  
   bool growUp;
   int firstOffset = target.getFrameInfo().getRegSpillAreaOffset(*this, growUp);
+  
+  int offset = getRegSpillsSize();
+  if (! growUp)
+    offset += size; 
+  
+  if (unsigned int mod = offset % align)
+    {
+      offset    += align - mod;
+      size += align - mod;
+    }
+  
   offset = growUp? firstOffset + offset
-                 : firstOffset - offset - size;
+                 : firstOffset - offset;
   
   incrementRegSpillsSize(size);
   
   return offset;
 }
-  
+
 int
 MachineCodeForMethod::allocateOptionalArg(const TargetMachine& target,
                                           const Type* type)
 {
   const MachineFrameInfo& frameInfo = target.getFrameInfo();
-
+  
   int size = MAXINT;
   if (frameInfo.argsOnStackHaveFixedSize())
     size = frameInfo.getSizeOfEachArgOnStack(); 
@@ -314,17 +321,21 @@
     }
   unsigned char align = target.DataLayout.getTypeAlignment(type);
   
+  bool growUp;
+  int firstOffset = frameInfo.getFirstOptionalOutgoingArgOffset(*this, growUp);
+  
   int offset = getCurrentOptionalArgsSize();
+  if (! growUp)
+    offset += size; 
+  
   if (unsigned int mod = offset % align)
     {
       offset += align - mod;
       size   += align - mod;
     }
   
-  bool growUp;
-  int firstOffset = frameInfo.getFirstOptionalOutgoingArgOffset(*this, growUp);
   offset = growUp? firstOffset + offset
-                 : firstOffset - offset - size;
+                 : firstOffset - offset;
   
   incrementCurrentOptionalArgsSize(size);
   
@@ -349,17 +360,21 @@
          align = 2*align)
     ;
   
+  bool growUp;
+  int firstTmpOffset = target.getFrameInfo().getTmpAreaOffset(*this, growUp);
+  
   int offset = currentTmpValuesSize;
+  if (! growUp)
+    offset += size; 
+  
   if (unsigned int mod = offset % align)
     {
       offset += align - mod;
       size   += align - mod;
     }
   
-  bool growUp;
-  int firstTmpOffset = target.getFrameInfo().getTmpAreaOffset(*this, growUp);
   offset = growUp? firstTmpOffset + offset
-                 : firstTmpOffset - offset - size;
+                 : firstTmpOffset - offset;
   
   currentTmpValuesSize += size;
   return offset;
@@ -371,17 +386,6 @@
   currentTmpValuesSize = 0;
 }
 
-
-// void
-// MachineCodeForMethod::putLocalVarAtOffsetFromSP(const Value* local,
-//                                                 int offset,
-//                                                 unsigned int size)
-// {
-//   offsetsFromSP[local] = offset;
-//   incrementAutomaticVarsSize(size);
-// }
-// 
-
 int
 MachineCodeForMethod::getOffset(const Value* val) const
 {
@@ -389,15 +393,6 @@
   return (pair == offsets.end())? INVALID_FRAME_OFFSET : (*pair).second;
 }
 
-
-// int
-// MachineCodeForMethod::getOffsetFromSP(const Value* local) const
-// {
-//   hash_map<const Value*, int>::const_iterator pair = offsetsFromSP.find(local);
-//   return (pair == offsetsFromSP.end())? INVALID_FRAME_OFFSET : (*pair).second;
-// }
-
-
 void
 MachineCodeForMethod::dump() const
 {
