Register scavenger is now capable of scavenging. It spills a register whose use of...
[oota-llvm.git] / include / llvm / CodeGen / MachineFunction.h
index 340e2f936b469e95c557cb90d3061482f4aa32e6..0ba5970ac5b8a284de8a9abdbfd7e0cf2ecaf5a2 100644 (file)
@@ -18,7 +18,7 @@
 #ifndef LLVM_CODEGEN_MACHINEFUNCTION_H
 #define LLVM_CODEGEN_MACHINEFUNCTION_H
 
-#include "llvm/CodeGen/MachineDebugInfo.h"
+#include "llvm/CodeGen/MachineModuleInfo.h"
 #include "llvm/CodeGen/MachineBasicBlock.h"
 #include "llvm/Support/Annotation.h"
 
@@ -184,7 +184,7 @@ public:
 
   /// isPhysRegUsed - Return true if the specified register is used in this
   /// function.  This only works after register allocation.
-  bool isPhysRegUsed(unsigned Reg) { return UsedPhysRegs[Reg]; }
+  bool isPhysRegUsed(unsigned Reg) const { return UsedPhysRegs[Reg]; }
 
   /// changePhyRegUsed - This method allows code that runs after register
   /// allocation to keep the PhysRegsUsed array up-to-date.
@@ -223,18 +223,22 @@ public:
     return MBBNumbering[N];
   }
 
-  /// getLastBlock - Returns the MachineBasicBlock with the greatest number
-  MachineBasicBlock *getLastBlock() {
-    return MBBNumbering.back();
-  }
-  const MachineBasicBlock *getLastBlock() const {
-    return MBBNumbering.back();
-  }
+  /// getNumBlockIDs - Return the number of MBB ID's allocated.
+  ///
+  unsigned getNumBlockIDs() const { return MBBNumbering.size(); }
+  
+  /// RenumberBlocks - This discards all of the MachineBasicBlock numbers and
+  /// recomputes them.  This guarantees that the MBB numbers are sequential,
+  /// dense, and match the ordering of the blocks within the function.  If a
+  /// specific MachineBasicBlock is specified, only that block and those after
+  /// it are renumbered.
+  void RenumberBlocks(MachineBasicBlock *MBBFrom = 0);
   
   /// print - Print out the MachineFunction in a format suitable for debugging
   /// to the specified stream.
   ///
   void print(std::ostream &OS) const;
+  void print(std::ostream *OS) const { if (OS) print(*OS); }
 
   /// viewCFG - This function is meant for use from the debugger.  You can just
   /// say 'call F->viewCFG()' and a ghostview window should pop up from the