diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/CodeGen/MachineBasicBlock.h | 7 | ||||
-rw-r--r-- | include/llvm/CodeGen/MachineFunction.h | 33 |
2 files changed, 37 insertions, 3 deletions
diff --git a/include/llvm/CodeGen/MachineBasicBlock.h b/include/llvm/CodeGen/MachineBasicBlock.h index a035ba1477..4dfda90ae8 100644 --- a/include/llvm/CodeGen/MachineBasicBlock.h +++ b/include/llvm/CodeGen/MachineBasicBlock.h @@ -64,10 +64,11 @@ public: std::vector<MachineBasicBlock *> Predecessors; std::vector<MachineBasicBlock *> Successors; int Number; + MachineFunction *Parent; public: MachineBasicBlock(const BasicBlock *bb = 0) : Prev(0), Next(0), BB(bb), - Number(-1) { + Number(-1), Parent(0) { Insts.parent = this; } ~MachineBasicBlock() {} @@ -79,8 +80,8 @@ public: /// getParent - Return the MachineFunction containing this basic block. /// - const MachineFunction *getParent() const; - MachineFunction *getParent(); + const MachineFunction *getParent() const { return Parent; } + MachineFunction *getParent() { return Parent; } typedef ilist<MachineInstr>::iterator iterator; typedef ilist<MachineInstr>::const_iterator const_iterator; diff --git a/include/llvm/CodeGen/MachineFunction.h b/include/llvm/CodeGen/MachineFunction.h index cb9958bb1f..dcec822f8e 100644 --- a/include/llvm/CodeGen/MachineFunction.h +++ b/include/llvm/CodeGen/MachineFunction.h @@ -23,6 +23,39 @@ namespace llvm { +// ilist_traits +template <> +class ilist_traits<MachineBasicBlock> { + // this is only set by the MachineFunction owning the ilist + friend class MachineFunction; + MachineFunction* parent; + +public: + ilist_traits<MachineBasicBlock>() : parent(0) { } + + static MachineBasicBlock* getPrev(MachineBasicBlock* N) { return N->Prev; } + static MachineBasicBlock* getNext(MachineBasicBlock* N) { return N->Next; } + + static const MachineBasicBlock* + getPrev(const MachineBasicBlock* N) { return N->Prev; } + + static const MachineBasicBlock* + getNext(const MachineBasicBlock* N) { return N->Next; } + + static void setPrev(MachineBasicBlock* N, MachineBasicBlock* prev) { N->Prev = prev; } + static void setNext(MachineBasicBlock* N, MachineBasicBlock* next) { N->Next = next; } + + static MachineBasicBlock* createNode(); + void addNodeToList(MachineBasicBlock* N); + void removeNodeFromList(MachineBasicBlock* N); + void transferNodesFromList( + iplist<MachineBasicBlock, ilist_traits<MachineBasicBlock> >& toList, + ilist_iterator<MachineBasicBlock> first, + ilist_iterator<MachineBasicBlock> last); +}; + + + class Function; class TargetMachine; class SSARegMap; |