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

Chris Lattner lattner at cs.uiuc.edu
Sun Oct 27 23:31:00 PST 2002


Changes in directory llvm/include/llvm/CodeGen:

MachineBasicBlock.h updated: 1.8 -> 1.9
MachineFunction.h updated: 1.13 -> 1.14

---
Log message:

Change MachineBasicBlock's to not be Annotations, instead they are kept as
part of a linked list tracked by MachineFunction.  MachineBasicBlock::get
is now linear time instead of constant time, and thus is deprecated!



---
Diffs of the changes:

Index: llvm/include/llvm/CodeGen/MachineBasicBlock.h
diff -u llvm/include/llvm/CodeGen/MachineBasicBlock.h:1.8 llvm/include/llvm/CodeGen/MachineBasicBlock.h:1.9
--- llvm/include/llvm/CodeGen/MachineBasicBlock.h:1.8	Sun Oct 27 20:08:43 2002
+++ llvm/include/llvm/CodeGen/MachineBasicBlock.h	Sun Oct 27 23:30:41 2002
@@ -7,31 +7,28 @@
 #ifndef LLVM_CODEGEN_MACHINEBASICBLOCK_H
 #define LLVM_CODEGEN_MACHINEBASICBLOCK_H
 
-#include "llvm/Annotation.h"
 #include <vector>
 class BasicBlock;
 class MachineInstr;
 template <typename T> struct ilist_traits;
 
-extern AnnotationID MCFBB_AID;
-
-class MachineBasicBlock : public Annotation {
+class MachineBasicBlock {
   std::vector<MachineInstr*> Insts;
   MachineBasicBlock *Prev, *Next;
+  BasicBlock *BB;
 public:
-  MachineBasicBlock() : Annotation(MCFBB_AID) {}
+  MachineBasicBlock(BasicBlock *bb = 0) : Prev(0), Next(0), BB(bb) {}
   ~MachineBasicBlock() {}
   
-  // Static methods to retrieve or destroy the MachineBasicBlock
-  // object for a given basic block.
-  static MachineBasicBlock& get(const BasicBlock *BB) {
-    return *(MachineBasicBlock*)
-      ((Annotable*)BB)->getOrCreateAnnotation(MCFBB_AID);
-  }
-  
-  static void destroy(const BasicBlock *BB) {
-    ((Annotable*)BB)->deleteAnnotation(MCFBB_AID);
-  }
+  // get - This deprecated static method returns the MachineBasicBlock object
+  // for the specified BasicBlock.
+  //
+  static MachineBasicBlock& get(const BasicBlock *BB);
+
+  /// getBasicBlock - Return the LLVM basic block that this instance
+  /// corresponded to originally.
+  ///
+  BasicBlock *getBasicBlock() const { return BB; }
   
   typedef std::vector<MachineInstr*>::iterator                iterator;
   typedef std::vector<MachineInstr*>::const_iterator    const_iterator;


Index: llvm/include/llvm/CodeGen/MachineFunction.h
diff -u llvm/include/llvm/CodeGen/MachineFunction.h:1.13 llvm/include/llvm/CodeGen/MachineFunction.h:1.14
--- llvm/include/llvm/CodeGen/MachineFunction.h:1.13	Sun Oct 27 20:08:43 2002
+++ llvm/include/llvm/CodeGen/MachineFunction.h	Sun Oct 27 23:30:41 2002
@@ -10,6 +10,7 @@
 #define LLVM_CODEGEN_MACHINEFUNCTION_H
 
 #include "llvm/CodeGen/MachineBasicBlock.h"
+#include "llvm/Annotation.h"
 #include "Support/NonCopyable.h"
 #include "Support/HashExtras.h"
 #include "Support/hash_set"
@@ -59,9 +60,38 @@
   static MachineFunction& construct(const Function *method,
                                          const TargetMachine &target);
   static void destruct(const Function *F);
-  static MachineFunction& get(const Function* function);
-  
+  static MachineFunction& get(const Function *F);
 
+  // Provide accessors for the MachineBasicBlock list...
+  typedef iplist<MachineBasicBlock> BasicBlockListType;
+  typedef BasicBlockListType::iterator iterator;
+  typedef BasicBlockListType::const_iterator const_iterator;
+  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+  typedef std::reverse_iterator<iterator>             reverse_iterator;
+
+  // Provide accessors for basic blocks...
+  const BasicBlockListType &getBasicBlockList() const { return BasicBlocks; }
+        BasicBlockListType &getBasicBlockList()       { return BasicBlocks; }
+ 
+  //===--------------------------------------------------------------------===//
+  // BasicBlock iterator forwarding functions
+  //
+  iterator                 begin()       { return BasicBlocks.begin(); }
+  const_iterator           begin() const { return BasicBlocks.begin(); }
+  iterator                 end  ()       { return BasicBlocks.end();   }
+  const_iterator           end  () const { return BasicBlocks.end();   }
+
+  reverse_iterator        rbegin()       { return BasicBlocks.rbegin(); }
+  const_reverse_iterator  rbegin() const { return BasicBlocks.rbegin(); }
+  reverse_iterator        rend  ()       { return BasicBlocks.rend();   }
+  const_reverse_iterator  rend  () const { return BasicBlocks.rend();   }
+
+  unsigned                  size() const { return BasicBlocks.size(); }
+  bool                     empty() const { return BasicBlocks.empty(); }
+  const MachineBasicBlock &front() const { return BasicBlocks.front(); }
+        MachineBasicBlock &front()       { return BasicBlocks.front(); }
+  const MachineBasicBlock &back() const { return BasicBlocks.back(); }
+        MachineBasicBlock &back()       { return BasicBlocks.back(); }
 
   //===--------------------------------------------------------------------===//
   //





More information about the llvm-commits mailing list