diff options
Diffstat (limited to 'include/llvm/CodeGen/MachineBasicBlock.h')
-rw-r--r-- | include/llvm/CodeGen/MachineBasicBlock.h | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/include/llvm/CodeGen/MachineBasicBlock.h b/include/llvm/CodeGen/MachineBasicBlock.h index f0f9d54..8ee75c9 100644 --- a/include/llvm/CodeGen/MachineBasicBlock.h +++ b/include/llvm/CodeGen/MachineBasicBlock.h @@ -19,30 +19,34 @@ #include "llvm/Support/Streams.h" namespace llvm { - class MachineFunction; + +class BasicBlock; +class MachineFunction; template <> -struct alist_traits<MachineInstr, MachineInstr> { -protected: +class ilist_traits<MachineInstr> : public ilist_default_traits<MachineInstr> { + mutable MachineInstr Sentinel; + // this is only set by the MachineBasicBlock owning the LiveList friend class MachineBasicBlock; MachineBasicBlock* Parent; - typedef alist_iterator<MachineInstr> iterator; - public: - alist_traits<MachineInstr, MachineInstr>() : Parent(0) { } + MachineInstr *createSentinel() const { return &Sentinel; } + void destroySentinel(MachineInstr *) const {} void addNodeToList(MachineInstr* N); void removeNodeFromList(MachineInstr* N); - void transferNodesFromList(alist_traits &, iterator, iterator); + void transferNodesFromList(ilist_traits &SrcTraits, + ilist_iterator<MachineInstr> first, + ilist_iterator<MachineInstr> last); void deleteNode(MachineInstr *N); +private: + void createNode(const MachineInstr &); }; -class BasicBlock; - -class MachineBasicBlock { - typedef alist<MachineInstr> Instructions; +class MachineBasicBlock : public ilist_node<MachineBasicBlock> { + typedef ilist<MachineInstr> Instructions; Instructions Insts; const BasicBlock *BB; int Number; @@ -65,6 +69,10 @@ class MachineBasicBlock { /// exception handler. bool IsLandingPad; + // Intrusive list support + friend class ilist_sentinel_traits<MachineBasicBlock>; + MachineBasicBlock() {} + explicit MachineBasicBlock(MachineFunction &mf, const BasicBlock *bb); ~MachineBasicBlock(); @@ -287,7 +295,7 @@ public: void setNumber(int N) { Number = N; } private: // Methods used to maintain doubly linked list of blocks... - friend struct alist_traits<MachineBasicBlock>; + friend struct ilist_traits<MachineBasicBlock>; // Machine-CFG mutators |