MachineBasicBlock.h revision d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68
151a8d8528135ba4e3e4cf7cd711a9e47b19078a3Chris Lattner//===-- llvm/CodeGen/MachineBasicBlock.h ------------------------*- C++ -*-===// 2deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve// 3e8b5413e5d0c7c0fc5b384e975c4ca87f4c00699Chris Lattner// Collect the sequence of machine instructions for a basic block. 4e8b5413e5d0c7c0fc5b384e975c4ca87f4c00699Chris Lattner// 551a8d8528135ba4e3e4cf7cd711a9e47b19078a3Chris Lattner//===----------------------------------------------------------------------===// 6deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 7fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman#ifndef LLVM_CODEGEN_MACHINEBASICBLOCK_H 8fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman#define LLVM_CODEGEN_MACHINEBASICBLOCK_H 9deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 10aec11f1decda111112c39803cb89dace81cd0568Chris Lattner#include <vector> 11aec11f1decda111112c39803cb89dace81cd0568Chris Lattnerclass BasicBlock; 12deb9654056939a12981446f6ed1139dca3412746Vikram S. Adveclass MachineInstr; 138e7ae9860bd1f29c95e4e10fe151a22aaafafef9Chris Lattnertemplate <typename T> struct ilist_traits; 14deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 15d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattnerclass MachineBasicBlock { 16deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve std::vector<MachineInstr*> Insts; 178e7ae9860bd1f29c95e4e10fe151a22aaafafef9Chris Lattner MachineBasicBlock *Prev, *Next; 18d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner BasicBlock *BB; 19deb9654056939a12981446f6ed1139dca3412746Vikram S. Advepublic: 20d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner MachineBasicBlock(BasicBlock *bb = 0) : Prev(0), Next(0), BB(bb) {} 21fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman ~MachineBasicBlock() {} 22deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 23d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner // get - This deprecated static method returns the MachineBasicBlock object 24d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner // for the specified BasicBlock. 25d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner // 26d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner static MachineBasicBlock& get(const BasicBlock *BB); 27d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner 28d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner /// getBasicBlock - Return the LLVM basic block that this instance 29d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner /// corresponded to originally. 30d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner /// 31d0aa0cdbc6fee00f2b2019633a9b9d00d301ac68Chris Lattner BasicBlock *getBasicBlock() const { return BB; } 32deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 33deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve typedef std::vector<MachineInstr*>::iterator iterator; 34deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve typedef std::vector<MachineInstr*>::const_iterator const_iterator; 35deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve typedef std::reverse_iterator<const_iterator> const_reverse_iterator; 36deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve typedef std::reverse_iterator<iterator> reverse_iterator; 37deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 38deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve unsigned size() const { return Insts.size(); } 39deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve bool empty() const { return Insts.empty(); } 40deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 41deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr * operator[](unsigned i) const { return Insts[i]; } 42deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr *&operator[](unsigned i) { return Insts[i]; } 43deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 44deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr *front() const { return Insts.front(); } 45deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr *back() const { return Insts.back(); } 46deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 47deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve iterator begin() { return Insts.begin(); } 48deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve const_iterator begin() const { return Insts.begin(); } 49deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve iterator end() { return Insts.end(); } 50deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve const_iterator end() const { return Insts.end(); } 51deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve reverse_iterator rbegin() { return Insts.rbegin(); } 52deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve const_reverse_iterator rbegin() const { return Insts.rbegin(); } 53deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve reverse_iterator rend () { return Insts.rend(); } 54deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve const_reverse_iterator rend () const { return Insts.rend(); } 55deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 56deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve void push_back(MachineInstr *MI) { Insts.push_back(MI); } 57deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve template<typename IT> 58deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve void insert(iterator I, IT S, IT E) { Insts.insert(I, S, E); } 59deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve iterator insert(iterator I, MachineInstr *M) { return Insts.insert(I, M); } 60deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 6146d6a1aeb549a2e4ccd982a1a2cefda541d79c52Vikram S. Adve // erase - Remove the specified element or range from the instruction list. 6246d6a1aeb549a2e4ccd982a1a2cefda541d79c52Vikram S. Adve // These functions do not delete any instructions removed. 63deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve // 6446d6a1aeb549a2e4ccd982a1a2cefda541d79c52Vikram S. Adve iterator erase(iterator I) { return Insts.erase(I); } 65deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve iterator erase(iterator I, iterator E) { return Insts.erase(I, E); } 66deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 67deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr *pop_back() { 68deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr *R = back(); 69deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve Insts.pop_back(); 70deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve return R; 71deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve } 728e7ae9860bd1f29c95e4e10fe151a22aaafafef9Chris Lattner 738e7ae9860bd1f29c95e4e10fe151a22aaafafef9Chris Lattnerprivate: // Methods used to maintain doubly linked list of blocks... 748e7ae9860bd1f29c95e4e10fe151a22aaafafef9Chris Lattner friend class ilist_traits<MachineBasicBlock>; 758e7ae9860bd1f29c95e4e10fe151a22aaafafef9Chris Lattner 768e7ae9860bd1f29c95e4e10fe151a22aaafafef9Chris Lattner MachineBasicBlock *getPrev() const { return Prev; } 778e7ae9860bd1f29c95e4e10fe151a22aaafafef9Chris Lattner MachineBasicBlock *getNext() const { return Next; } 788e7ae9860bd1f29c95e4e10fe151a22aaafafef9Chris Lattner void setPrev(MachineBasicBlock *P) { Prev = P; } 798e7ae9860bd1f29c95e4e10fe151a22aaafafef9Chris Lattner void setNext(MachineBasicBlock *N) { Next = N; } 80deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve}; 81deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 82deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 83deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve#endif 84