Added an automatic cast to "std::ostream*" etc. from OStream. We then can
[oota-llvm.git] / include / llvm / CodeGen / MachineJumpTableInfo.h
index 2cb268ad539921460e8a672671e2a3a214cd7deb..404ed15fd985ef22266aa06034f2e167b1d7267c 100644 (file)
@@ -26,6 +26,7 @@
 namespace llvm {
 
 class MachineBasicBlock;
+class TargetData;
 
 /// MachineJumpTableEntry - One jump table in the jump table info.
 ///
@@ -33,18 +34,20 @@ struct MachineJumpTableEntry {
   /// MBBs - The vector of basic blocks from which to create the jump table.
   std::vector<MachineBasicBlock*> MBBs;
   
-  MachineJumpTableEntry(std::vector<MachineBasicBlock*> &M) : MBBs(M) {}
+  MachineJumpTableEntry(const std::vector<MachineBasicBlock*> &M) : MBBs(M) {}
 };
   
 class MachineJumpTableInfo {
-  const TargetData &TD;
+  unsigned EntrySize;
+  unsigned Alignment;
   std::vector<MachineJumpTableEntry> JumpTables;
 public:
-  MachineJumpTableInfo(const TargetData &td) : TD(td) {}
+  MachineJumpTableInfo(unsigned Size, unsigned Align)
+  : EntrySize(Size), Alignment(Align) {}
     
   /// getJumpTableIndex - Create a new jump table or return an existing one.
   ///
-  unsigned getJumpTableIndex(std::vector<MachineBasicBlock*> &DestBBs);
+  unsigned getJumpTableIndex(const std::vector<MachineBasicBlock*> &DestBBs);
   
   /// isEmpty - Return true if there are no jump tables.
   ///
@@ -54,16 +57,40 @@ public:
     return JumpTables;
   }
   
-  /// getEntrySize - returns the size of an individual field in a jump table 
-  unsigned getEntrySize() const;
+  /// RemoveJumpTable - Mark the specific index as being dead.  This will cause
+  /// it to not be emitted.
+  void RemoveJumpTable(unsigned Idx) {
+    JumpTables[Idx].MBBs.clear();
+  }
+  
+  /// ReplaceMBBInJumpTables - If Old is the target of any jump tables, update
+  /// the jump tables to branch to New instead.
+  bool ReplaceMBBInJumpTables(MachineBasicBlock *Old, MachineBasicBlock *New) {
+    assert(Old != New && "Not making a change?");
+    bool MadeChange = false;
+    for (unsigned i = 0, e = JumpTables.size(); i != e; ++i) {
+      MachineJumpTableEntry &JTE = JumpTables[i];
+      for (unsigned j = 0, e = JTE.MBBs.size(); j != e; ++j)
+        if (JTE.MBBs[j] == Old) {
+          JTE.MBBs[j] = New;
+          MadeChange = true;
+        }
+    }
+    return MadeChange;
+  }
+  
+  /// getEntrySize - Returns the size of an individual field in a jump table. 
+  ///
+  unsigned getEntrySize() const { return EntrySize; }
   
   /// getAlignment - returns the target's preferred alignment for jump tables
-  unsigned getAlignment() const;
+  unsigned getAlignment() const { return Alignment; }
   
   /// print - Used by the MachineFunction printer to print information about
   /// jump tables.  Implemented in MachineFunction.cpp
   ///
   void print(std::ostream &OS) const;
+  void print(std::ostream *OS) const { if (OS) print(*OS); }
 
   /// dump - Call print(std::cerr) to be called from the debugger.
   ///