Move MachineCodeForInstruction.h and MachineFunctionInfo.h into lib/Target/SparcV9

llvm-svn: 15830
diff --git a/llvm/lib/Target/SparcV9/MachineFunctionInfo.h b/llvm/lib/Target/SparcV9/MachineFunctionInfo.h
new file mode 100644
index 0000000..74a75e8
--- /dev/null
+++ b/llvm/lib/Target/SparcV9/MachineFunctionInfo.h
@@ -0,0 +1,124 @@
+//===-- MachineFunctionInfo.h -----------------------------------*- C++ -*-===//
+// 
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// 
+//===----------------------------------------------------------------------===//
+// 
+// This class keeps track of information about the stack frame and about the
+// per-function constant pool.
+//
+// FIXME: This class is completely SparcV9 specific.  Do not use it for future
+// targets.  This file will be eliminated in future versions of LLVM.
+//   
+//===----------------------------------------------------------------------===//
+
+#ifndef MACHINEFUNCTIONINFO_H
+#define MACHINEFUNCTIONINFO_H
+
+#include "MachineCodeForInstruction.h"
+#include "Support/HashExtras.h"
+#include "Support/hash_set"
+
+namespace llvm {
+
+class MachineFunction;
+class Constant;
+class Type;
+
+class MachineFunctionInfo {
+  hash_set<const Constant*> constantsForConstPool;
+  hash_map<const Value*, int> offsets;
+
+  unsigned	staticStackSize;
+  unsigned	automaticVarsSize;
+  unsigned	regSpillsSize;
+  unsigned	maxOptionalArgsSize;
+  unsigned	maxOptionalNumArgs;
+  unsigned	currentTmpValuesSize;
+  unsigned	maxTmpValuesSize;
+  bool          compiledAsLeaf;
+  bool          spillsAreaFrozen;
+  bool          automaticVarsAreaFrozen;
+
+  MachineFunction &MF;
+public:
+  hash_map<const Instruction*, MachineCodeForInstruction> MCFIEntries;
+
+  MachineFunctionInfo(MachineFunction &mf) : MF(mf) {
+    staticStackSize = automaticVarsSize = regSpillsSize = 0;
+    maxOptionalArgsSize = maxOptionalNumArgs = currentTmpValuesSize = 0;
+    maxTmpValuesSize = 0;
+    compiledAsLeaf = spillsAreaFrozen = automaticVarsAreaFrozen = false;
+  }
+
+  /// CalculateArgSize - Call this method to fill in the maxOptionalArgsSize &
+  /// staticStackSize fields...
+  ///
+  void CalculateArgSize();
+
+  //
+  // Accessors for global information about generated code for a method.
+  // 
+  bool     isCompiledAsLeafMethod() const { return compiledAsLeaf; }
+  unsigned getStaticStackSize()     const { return staticStackSize; }
+  unsigned getAutomaticVarsSize()   const { return automaticVarsSize; }
+  unsigned getRegSpillsSize()       const { return regSpillsSize; }
+  unsigned getMaxOptionalArgsSize() const { return maxOptionalArgsSize;}
+  unsigned getMaxOptionalNumArgs()  const { return maxOptionalNumArgs;}
+  const hash_set<const Constant*> &getConstantPoolValues() const {
+    return constantsForConstPool;
+  }
+  
+  //
+  // Modifiers used during code generation
+  // 
+  void            initializeFrameLayout    ();
+  
+  void            addToConstantPool        (const Constant* constVal) {
+    constantsForConstPool.insert(constVal);
+  }
+  
+  void markAsLeafMethod() { compiledAsLeaf = true; }
+  
+  int             computeOffsetforLocalVar (const Value*  local,
+                                            unsigned& getPaddedSize,
+                                            unsigned  sizeToUse = 0);
+  int             allocateLocalVar         (const Value* local,
+                                            unsigned sizeToUse = 0);
+  
+  int             allocateSpilledValue     (const Type* type);
+  int             pushTempValue            (unsigned size);
+  void            popAllTempValues         ();
+  
+  void            freezeSpillsArea         () { spillsAreaFrozen = true; } 
+  void            freezeAutomaticVarsArea  () { automaticVarsAreaFrozen=true; }
+  
+private:
+  void incrementAutomaticVarsSize(int incr) {
+    automaticVarsSize+= incr;
+    staticStackSize += incr;
+  }
+  void incrementRegSpillsSize(int incr) {
+    regSpillsSize+= incr;
+    staticStackSize += incr;
+  }
+  void incrementTmpAreaSize(int incr) {
+    currentTmpValuesSize += incr;
+    if (maxTmpValuesSize < currentTmpValuesSize)
+      {
+        staticStackSize += currentTmpValuesSize - maxTmpValuesSize;
+        maxTmpValuesSize = currentTmpValuesSize;
+      }
+  }
+  void resetTmpAreaSize() {
+    currentTmpValuesSize = 0;
+  }
+  int allocateOptionalArg(const Type* type);
+};
+
+} // End llvm namespace
+
+#endif