summaryrefslogtreecommitdiff
path: root/include/llvm
diff options
context:
space:
mode:
authorVikram S. Adve <vadve@cs.uiuc.edu>2002-07-08 22:40:34 +0000
committerVikram S. Adve <vadve@cs.uiuc.edu>2002-07-08 22:40:34 +0000
commitdeb9654056939a12981446f6ed1139dca3412746 (patch)
tree6a81cc1abd8b0aa007e43ad5a91f64098c3d7505 /include/llvm
parentc2580ddb0888c0b823dab5e0b9f27bbf4afdd705 (diff)
downloadllvm-deb9654056939a12981446f6ed1139dca3412746.tar.gz
llvm-deb9654056939a12981446f6ed1139dca3412746.tar.bz2
llvm-deb9654056939a12981446f6ed1139dca3412746.tar.xz
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
Diffstat (limited to 'include/llvm')
-rw-r--r--include/llvm/CodeGen/MachineBasicBlock.h74
-rw-r--r--include/llvm/CodeGen/MachineCodeForBasicBlock.h74
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 0000000000..51714bc3be
--- /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 0000000000..51714bc3be
--- /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