aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
//---------------------------------------------------------------------------