aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorVikram S. Adve <vadve@cs.uiuc.edu>2001-10-22 13:57:39 +0000
committerVikram S. Adve <vadve@cs.uiuc.edu>2001-10-22 13:57:39 +0000
commit1876f92599b90f0a4b276aae413a1b965954174d (patch)
treed41e8911ac644fa78d5819ef398b66c8cbeab7c9 /include
parentb4a1e4bea978b9a2978f8bcbd7eb518cc98b25d9 (diff)
downloadexternal_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.h70
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
//---------------------------------------------------------------------------