MachineBasicBlock.h revision fce1143bcfa73f61845002fa50473d1a01384202
1fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman//===-- llvm/CodeGen/MachineBasicBlock.h ------------------------*- C++ -*--=// 2deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve// 3e8b5413e5d0c7c0fc5b384e975c4ca87f4c00699Chris Lattner// Collect the sequence of machine instructions for a basic block. 4e8b5413e5d0c7c0fc5b384e975c4ca87f4c00699Chris Lattner// 5deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve//===---------------------------------------------------------------------===// 6deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 7fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman#ifndef LLVM_CODEGEN_MACHINEBASICBLOCK_H 8fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman#define LLVM_CODEGEN_MACHINEBASICBLOCK_H 9deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 10deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve#include "llvm/BasicBlock.h" 11deb9654056939a12981446f6ed1139dca3412746Vikram S. Adveclass MachineInstr; 12deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 13deb9654056939a12981446f6ed1139dca3412746Vikram S. Adveextern AnnotationID MCFBB_AID; 14deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 15fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman// FIXME: this should go away soon 16fce1143bcfa73f61845002fa50473d1a01384202Misha Brukmanclass MachineBasicBlock; 17fce1143bcfa73f61845002fa50473d1a01384202Misha Brukmantypedef MachineBasicBlock MachineCodeForBasicBlock; 18fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman 19fce1143bcfa73f61845002fa50473d1a01384202Misha Brukmanclass MachineBasicBlock: public Annotation { 20deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve std::vector<MachineInstr*> Insts; 21deb9654056939a12981446f6ed1139dca3412746Vikram S. Advepublic: 22fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman MachineBasicBlock(); 23fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman ~MachineBasicBlock() {} 24deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 25fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman // Static methods to retrieve or destroy the MachineBasicBlock 26deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve // object for a given basic block. 27fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman static MachineBasicBlock& get(const BasicBlock *bb) { 28fce1143bcfa73f61845002fa50473d1a01384202Misha Brukman return *(MachineBasicBlock*)bb->getOrCreateAnnotation(MCFBB_AID); 29deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve } 30deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 31deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve static void destroy(const BasicBlock *bb) { 32deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve bb->deleteAnnotation(MCFBB_AID); 33deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve } 34deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 35deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve typedef std::vector<MachineInstr*>::iterator iterator; 36deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve typedef std::vector<MachineInstr*>::const_iterator const_iterator; 37deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve typedef std::reverse_iterator<const_iterator> const_reverse_iterator; 38deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve typedef std::reverse_iterator<iterator> reverse_iterator; 39deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 40deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve unsigned size() const { return Insts.size(); } 41deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve bool empty() const { return Insts.empty(); } 42deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 43deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr * operator[](unsigned i) const { return Insts[i]; } 44deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr *&operator[](unsigned i) { return Insts[i]; } 45deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 46deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr *front() const { return Insts.front(); } 47deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr *back() const { return Insts.back(); } 48deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 49deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve iterator begin() { return Insts.begin(); } 50deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve const_iterator begin() const { return Insts.begin(); } 51deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve iterator end() { return Insts.end(); } 52deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve const_iterator end() const { return Insts.end(); } 53deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve reverse_iterator rbegin() { return Insts.rbegin(); } 54deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve const_reverse_iterator rbegin() const { return Insts.rbegin(); } 55deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve reverse_iterator rend () { return Insts.rend(); } 56deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve const_reverse_iterator rend () const { return Insts.rend(); } 57deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 58deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve void push_back(MachineInstr *MI) { Insts.push_back(MI); } 59deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve template<typename IT> 60deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve void insert(iterator I, IT S, IT E) { Insts.insert(I, S, E); } 61deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve iterator insert(iterator I, MachineInstr *M) { return Insts.insert(I, M); } 62deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 6346d6a1aeb549a2e4ccd982a1a2cefda541d79c52Vikram S. Adve // erase - Remove the specified element or range from the instruction list. 6446d6a1aeb549a2e4ccd982a1a2cefda541d79c52Vikram S. Adve // These functions do not delete any instructions removed. 65deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve // 6646d6a1aeb549a2e4ccd982a1a2cefda541d79c52Vikram S. Adve iterator erase(iterator I) { return Insts.erase(I); } 67deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve iterator erase(iterator I, iterator E) { return Insts.erase(I, E); } 68deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 69deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr *pop_back() { 70deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve MachineInstr *R = back(); 71deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve Insts.pop_back(); 72deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve return R; 73deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve } 74deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve}; 75deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 76deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve 77deb9654056939a12981446f6ed1139dca3412746Vikram S. Adve#endif 78