diff options
-rw-r--r-- | include/llvm/CodeGen/MachineCodeForMethod.h | 12 | ||||
-rw-r--r-- | include/llvm/CodeGen/MachineFunction.h | 12 | ||||
-rw-r--r-- | lib/CodeGen/MachineFunction.cpp | 6 |
3 files changed, 27 insertions, 3 deletions
diff --git a/include/llvm/CodeGen/MachineCodeForMethod.h b/include/llvm/CodeGen/MachineCodeForMethod.h index d8f3339..01c9fd9 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<const Constant*> constantsForConstPool; std::hash_map<const Value*, int> 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 d8f3339..01c9fd9 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<const Constant*> constantsForConstPool; std::hash_map<const Value*, int> 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 de3e4f6..ef27dba 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 |