diff --git a/include/llvm/CodeGen/MachineCodeForMethod.h b/include/llvm/CodeGen/MachineCodeForMethod.h index d8f3339e170..01c9fd9d24f 100644 --- a/include/llvm/CodeGen/MachineCodeForMethod.h +++ b/include/llvm/CodeGen/MachineCodeForMethod.h @@ -29,6 +29,7 @@ class MachineCodeForMethod : private Annotation { unsigned currentOptionalArgsSize; unsigned maxOptionalArgsSize; unsigned currentTmpValuesSize; + unsigned maxTmpValuesSize; std::hash_set constantsForConstPool; std::hash_map offsets; @@ -108,6 +109,17 @@ private: regSpillsSize+= incr; staticStackSize += incr; } + inline void incrementTmpAreaSize(int incr) { + currentTmpValuesSize += incr; + if (maxTmpValuesSize < currentTmpValuesSize) + { + staticStackSize += currentTmpValuesSize - maxTmpValuesSize; + maxTmpValuesSize = currentTmpValuesSize; + } + } + inline void resetTmpAreaSize() { + currentTmpValuesSize = 0; + } inline void incrementCurrentOptionalArgsSize(int incr) { currentOptionalArgsSize+= incr; // stack size already includes this! } diff --git a/include/llvm/CodeGen/MachineFunction.h b/include/llvm/CodeGen/MachineFunction.h index d8f3339e170..01c9fd9d24f 100644 --- a/include/llvm/CodeGen/MachineFunction.h +++ b/include/llvm/CodeGen/MachineFunction.h @@ -29,6 +29,7 @@ class MachineCodeForMethod : private Annotation { unsigned currentOptionalArgsSize; unsigned maxOptionalArgsSize; unsigned currentTmpValuesSize; + unsigned maxTmpValuesSize; std::hash_set constantsForConstPool; std::hash_map offsets; @@ -108,6 +109,17 @@ private: regSpillsSize+= incr; staticStackSize += incr; } + inline void incrementTmpAreaSize(int incr) { + currentTmpValuesSize += incr; + if (maxTmpValuesSize < currentTmpValuesSize) + { + staticStackSize += currentTmpValuesSize - maxTmpValuesSize; + maxTmpValuesSize = currentTmpValuesSize; + } + } + inline void resetTmpAreaSize() { + currentTmpValuesSize = 0; + } inline void incrementCurrentOptionalArgsSize(int incr) { currentOptionalArgsSize+= incr; // stack size already includes this! } diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp index de3e4f694f3..ef27dbae71c 100644 --- a/lib/CodeGen/MachineFunction.cpp +++ b/lib/CodeGen/MachineFunction.cpp @@ -124,7 +124,7 @@ MachineCodeForMethod::MachineCodeForMethod(const Method* _M, method(_M), compiledAsLeaf(false), staticStackSize(0), automaticVarsSize(0), regSpillsSize(0), currentOptionalArgsSize(0), maxOptionalArgsSize(0), - currentTmpValuesSize(0) + currentTmpValuesSize(0), maxTmpValuesSize(0) { maxOptionalArgsSize = ComputeMaxOptionalArgsSize(target, method); staticStackSize = maxOptionalArgsSize @@ -284,14 +284,14 @@ MachineCodeForMethod::pushTempValue(const TargetMachine& target, offset = growUp ? firstTmpOffset + offset : firstTmpOffset - offset; - currentTmpValuesSize += size; + incrementTmpAreaSize(size); return offset; } void MachineCodeForMethod::popAllTempValues(const TargetMachine& target) { - currentTmpValuesSize = 0; + resetTmpAreaSize(); } int