diff options
author | Vikram S. Adve <vadve@cs.uiuc.edu> | 2002-07-08 22:40:34 +0000 |
---|---|---|
committer | Vikram S. Adve <vadve@cs.uiuc.edu> | 2002-07-08 22:40:34 +0000 |
commit | deb9654056939a12981446f6ed1139dca3412746 (patch) | |
tree | 6a81cc1abd8b0aa007e43ad5a91f64098c3d7505 | |
parent | c2580ddb0888c0b823dab5e0b9f27bbf4afdd705 (diff) | |
download | external_llvm-deb9654056939a12981446f6ed1139dca3412746.zip external_llvm-deb9654056939a12981446f6ed1139dca3412746.tar.gz external_llvm-deb9654056939a12981446f6ed1139dca3412746.tar.bz2 |
Interface to class MachineCodeForBasicBlock.
Moved here from MachineInstr.h to make it an annotation on BasicBlock.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2823 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/MachineBasicBlock.h | 74 | ||||
-rw-r--r-- | include/llvm/CodeGen/MachineCodeForBasicBlock.h | 74 |
2 files changed, 148 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/MachineBasicBlock.h b/include/llvm/CodeGen/MachineBasicBlock.h new file mode 100644 index 0000000..51714bc --- /dev/null +++ b/include/llvm/CodeGen/MachineBasicBlock.h @@ -0,0 +1,74 @@ +//===-- llvm/CodeGen/MachineCodeForBasicBlock.h -----------------*- C++ -*--=// +// +// Purpose: +// Collect the sequence of machine instructions for a basic block. +//===---------------------------------------------------------------------===// + +#ifndef LLVM_CODEGEN_MACHINECODEFORBASICBLOCK_H +#define LLVM_CODEGEN_MACHINECODEFORBASICBLOCK_H + +#include "llvm/BasicBlock.h" +#include "llvm/Annotation.h" +#include <vector> +class MachineInstr; + +extern AnnotationID MCFBB_AID; + +class MachineCodeForBasicBlock: public Annotation { + std::vector<MachineInstr*> Insts; +public: + MachineCodeForBasicBlock(); + ~MachineCodeForBasicBlock() {} + + // Static methods to retrieve or destroy the MachineCodeForBasicBlock + // object for a given basic block. + static MachineCodeForBasicBlock& get(const BasicBlock *bb) { + return *(MachineCodeForBasicBlock*)bb->getOrCreateAnnotation(MCFBB_AID); + } + + static void destroy(const BasicBlock *bb) { + bb->deleteAnnotation(MCFBB_AID); + } + + typedef std::vector<MachineInstr*>::iterator iterator; + typedef std::vector<MachineInstr*>::const_iterator const_iterator; + typedef std::reverse_iterator<const_iterator> const_reverse_iterator; + typedef std::reverse_iterator<iterator> reverse_iterator; + + unsigned size() const { return Insts.size(); } + bool empty() const { return Insts.empty(); } + + MachineInstr * operator[](unsigned i) const { return Insts[i]; } + MachineInstr *&operator[](unsigned i) { return Insts[i]; } + + MachineInstr *front() const { return Insts.front(); } + MachineInstr *back() const { return Insts.back(); } + + iterator begin() { return Insts.begin(); } + const_iterator begin() const { return Insts.begin(); } + iterator end() { return Insts.end(); } + const_iterator end() const { return Insts.end(); } + reverse_iterator rbegin() { return Insts.rbegin(); } + const_reverse_iterator rbegin() const { return Insts.rbegin(); } + reverse_iterator rend () { return Insts.rend(); } + const_reverse_iterator rend () const { return Insts.rend(); } + + void push_back(MachineInstr *MI) { Insts.push_back(MI); } + template<typename IT> + void insert(iterator I, IT S, IT E) { Insts.insert(I, S, E); } + iterator insert(iterator I, MachineInstr *M) { return Insts.insert(I, M); } + + // erase - Remove the specified range from the instruction list. This does + // not delete in instructions removed. + // + iterator erase(iterator I, iterator E) { return Insts.erase(I, E); } + + MachineInstr *pop_back() { + MachineInstr *R = back(); + Insts.pop_back(); + return R; + } +}; + + +#endif diff --git a/include/llvm/CodeGen/MachineCodeForBasicBlock.h b/include/llvm/CodeGen/MachineCodeForBasicBlock.h new file mode 100644 index 0000000..51714bc --- /dev/null +++ b/include/llvm/CodeGen/MachineCodeForBasicBlock.h @@ -0,0 +1,74 @@ +//===-- llvm/CodeGen/MachineCodeForBasicBlock.h -----------------*- C++ -*--=// +// +// Purpose: +// Collect the sequence of machine instructions for a basic block. +//===---------------------------------------------------------------------===// + +#ifndef LLVM_CODEGEN_MACHINECODEFORBASICBLOCK_H +#define LLVM_CODEGEN_MACHINECODEFORBASICBLOCK_H + +#include "llvm/BasicBlock.h" +#include "llvm/Annotation.h" +#include <vector> +class MachineInstr; + +extern AnnotationID MCFBB_AID; + +class MachineCodeForBasicBlock: public Annotation { + std::vector<MachineInstr*> Insts; +public: + MachineCodeForBasicBlock(); + ~MachineCodeForBasicBlock() {} + + // Static methods to retrieve or destroy the MachineCodeForBasicBlock + // object for a given basic block. + static MachineCodeForBasicBlock& get(const BasicBlock *bb) { + return *(MachineCodeForBasicBlock*)bb->getOrCreateAnnotation(MCFBB_AID); + } + + static void destroy(const BasicBlock *bb) { + bb->deleteAnnotation(MCFBB_AID); + } + + typedef std::vector<MachineInstr*>::iterator iterator; + typedef std::vector<MachineInstr*>::const_iterator const_iterator; + typedef std::reverse_iterator<const_iterator> const_reverse_iterator; + typedef std::reverse_iterator<iterator> reverse_iterator; + + unsigned size() const { return Insts.size(); } + bool empty() const { return Insts.empty(); } + + MachineInstr * operator[](unsigned i) const { return Insts[i]; } + MachineInstr *&operator[](unsigned i) { return Insts[i]; } + + MachineInstr *front() const { return Insts.front(); } + MachineInstr *back() const { return Insts.back(); } + + iterator begin() { return Insts.begin(); } + const_iterator begin() const { return Insts.begin(); } + iterator end() { return Insts.end(); } + const_iterator end() const { return Insts.end(); } + reverse_iterator rbegin() { return Insts.rbegin(); } + const_reverse_iterator rbegin() const { return Insts.rbegin(); } + reverse_iterator rend () { return Insts.rend(); } + const_reverse_iterator rend () const { return Insts.rend(); } + + void push_back(MachineInstr *MI) { Insts.push_back(MI); } + template<typename IT> + void insert(iterator I, IT S, IT E) { Insts.insert(I, S, E); } + iterator insert(iterator I, MachineInstr *M) { return Insts.insert(I, M); } + + // erase - Remove the specified range from the instruction list. This does + // not delete in instructions removed. + // + iterator erase(iterator I, iterator E) { return Insts.erase(I, E); } + + MachineInstr *pop_back() { + MachineInstr *R = back(); + Insts.pop_back(); + return R; + } +}; + + +#endif |