[llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineFunction.h

Chris Lattner lattner at cs.uiuc.edu
Thu Jul 1 01:02:02 PDT 2004


Changes in directory llvm/include/llvm/CodeGen:

MachineFunction.h updated: 1.36 -> 1.37

---
Log message:

Change the implementation of the autonumbering for MBB's a bit to provide
the reverse mapping as well as the mapping from MBB->unsigned


---
Diffs of the changes:  (+33 -6)

Index: llvm/include/llvm/CodeGen/MachineFunction.h
diff -u llvm/include/llvm/CodeGen/MachineFunction.h:1.36 llvm/include/llvm/CodeGen/MachineFunction.h:1.37
--- llvm/include/llvm/CodeGen/MachineFunction.h:1.36	Fri Jun  4 09:51:25 2004
+++ llvm/include/llvm/CodeGen/MachineFunction.h	Thu Jul  1 01:01:36 2004
@@ -82,8 +82,10 @@
   // Keep track of constants which are spilled to memory
   MachineConstantPool *ConstantPool;
 
-  // Function-level unique numbering for MachineBasicBlocks
-  int NextMBBNumber;
+  // Function-level unique numbering for MachineBasicBlocks.  When a
+  // MachineBasicBlock is inserted into a MachineFunction is it automatically
+  // numbered and this vector keeps track of the mapping from ID's to MBB's.
+  std::vector<MachineBasicBlock*> MBBNumbering;
 
 public:
   MachineFunction(const Function *Fn, const TargetMachine &TM);
@@ -118,10 +120,15 @@
   ///
   MachineFunctionInfo *getInfo() const { return MFInfo; }
 
-  /// getNextMBBNumber - Returns the next unique number to be assigned
-  /// to a MachineBasicBlock in this MachineFunction.
-  ///
-  int getNextMBBNumber() { return NextMBBNumber++; }
+  /// getBlockNumbered - MachineBasicBlocks are automatically numbered when they
+  /// are inserted into the machine function.  The block number for a machine
+  /// basic block can be found by using the MBB::getBlockNumber method, this
+  /// method provides the inverse mapping.
+  MachineBasicBlock *getBlockNumbered(unsigned N) {
+    assert(N < MBBNumbering.size() && "Illegal block number");
+    assert(MBBNumbering[N] && "Block was removed from the machine function!");
+    return MBBNumbering[N];
+  }
 
   /// print - Print out the MachineFunction in a format suitable for debugging
   /// to the specified stream.
@@ -177,6 +184,26 @@
         MachineBasicBlock &front()       { return BasicBlocks.front(); }
   const MachineBasicBlock & back() const { return BasicBlocks.back(); }
         MachineBasicBlock & back()       { return BasicBlocks.back(); }
+
+  //===--------------------------------------------------------------------===//
+  // Internal functions used to automatically number MachineBasicBlocks
+  //
+
+  /// getNextMBBNumber - Returns the next unique number to be assigned
+  /// to a MachineBasicBlock in this MachineFunction.
+  ///
+  unsigned addToMBBNumbering(MachineBasicBlock *MBB) {
+    MBBNumbering.push_back(MBB);
+    return MBBNumbering.size()-1;
+  }
+
+  /// removeFromMBBNumbering - Remove the specific machine basic block from our
+  /// tracker, this is only really to be used by the MachineBasicBlock
+  /// implementation.
+  void removeFromMBBNumbering(unsigned N) {
+    assert(N < MBBNumbering.size() && "Illegal basic block #");
+    MBBNumbering[N] = 0;
+  }
 };
 
 } // End llvm namespace





More information about the llvm-commits mailing list