diff options
author | Vikram S. Adve <vadve@cs.uiuc.edu> | 2001-10-22 13:57:39 +0000 |
---|---|---|
committer | Vikram S. Adve <vadve@cs.uiuc.edu> | 2001-10-22 13:57:39 +0000 |
commit | 1876f92599b90f0a4b276aae413a1b965954174d (patch) | |
tree | d41e8911ac644fa78d5819ef398b66c8cbeab7c9 /include | |
parent | b4a1e4bea978b9a2978f8bcbd7eb518cc98b25d9 (diff) | |
download | external_llvm-1876f92599b90f0a4b276aae413a1b965954174d.zip external_llvm-1876f92599b90f0a4b276aae413a1b965954174d.tar.gz external_llvm-1876f92599b90f0a4b276aae413a1b965954174d.tar.bz2 |
Added class MachineCodeForMethod to provide method-level information
about the generated native code (e.g., frame layout information).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@952 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/CodeGen/MachineInstr.h | 70 |
1 files changed, 68 insertions, 2 deletions
diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h index 9eaced4..eea3f03 100644 --- a/include/llvm/CodeGen/MachineInstr.h +++ b/include/llvm/CodeGen/MachineInstr.h @@ -139,10 +139,11 @@ private: public: - // replaces the Value with its corresponding physical register afeter + // replaces the Value with its corresponding physical register after // register allocation is complete void setRegForValue(int reg) { - assert(opType == MO_VirtualRegister || opType == MO_CCRegister); + assert(opType == MO_VirtualRegister || opType == MO_CCRegister || + opType == MO_MachineRegister); regNum = reg; } @@ -494,6 +495,71 @@ public: //--------------------------------------------------------------------------- +// class MachineCodeForMethod +// +// Purpose: +// Collect native machine code information for a method. +// This allows target-specific information about the generated code +// to be stored with each method. +//--------------------------------------------------------------------------- + + +class MachineCodeForMethod: public NonCopyable { +private: + Method* method; + bool compiledAsLeaf; + unsigned staticStackSize; + unsigned automaticVarsSize; + unsigned regSpillsSize; + unsigned optionalOutgoingArgsSize; + hash_map<const Value*, int> offsetsFromFP; + hash_map<const Value*, int> offsetsFromSP; + + inline void incrementAutomaticVarsSize(int incr) + { automaticVarsSize+= incr; + staticStackSize += incr; } + +public: + /*ctor*/ MachineCodeForMethod(Method* _M) + : method(_M), compiledAsLeaf(false), staticStackSize(0), + automaticVarsSize(0), regSpillsSize(0), optionalOutgoingArgsSize(0) {} + + inline bool isCompiledAsLeafMethod() const { return compiledAsLeaf; } + inline unsigned getStaticStackSize() const { return staticStackSize; } + inline unsigned getAutomaticVarsSize() const { return automaticVarsSize; } + inline unsigned getRegSpillsSize() const { return regSpillsSize; } + inline unsigned getOptionalOutgoingArgsSize() const + { return optionalOutgoingArgsSize;} + + inline void markAsLeafMethod() { compiledAsLeaf = true; } + + inline void incrementStackSize(int incr) { staticStackSize += incr; } + + inline void incrementRegSpillsSize(int incr) + { regSpillsSize+= incr; + staticStackSize += incr; } + + inline void incrementOptionalOutgoingArgsSize(int incr) + { optionalOutgoingArgsSize+= incr; + staticStackSize += incr; } + + void putLocalVarAtOffsetFromFP(const Value* local, + int offset, + unsigned int size); + + void putLocalVarAtOffsetFromSP(const Value* local, + int offset, + unsigned int size); + + int getOffsetFromFP (const Value* local) const; + + int getOffsetFromSP (const Value* local) const; + + void dump () const; +}; + + +//--------------------------------------------------------------------------- // Debugging Support //--------------------------------------------------------------------------- |