diff options
author | Chris Lattner <sabre@nondot.org> | 2002-08-09 20:04:28 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-08-09 20:04:28 +0000 |
commit | 919c4f8a44ddb63eb65f34e3fd1b14b0ec919e59 (patch) | |
tree | fb814725a2f7c140fa2de989e2b0eb05f0547089 /include/llvm/CodeGen/MachineCodeForInstruction.h | |
parent | 5b2f502968b67a5b5ab24335734466fb9eec6aab (diff) | |
download | external_llvm-919c4f8a44ddb63eb65f34e3fd1b14b0ec919e59.zip external_llvm-919c4f8a44ddb63eb65f34e3fd1b14b0ec919e59.tar.gz external_llvm-919c4f8a44ddb63eb65f34e3fd1b14b0ec919e59.tar.bz2 |
Change machinecode for instruction to not inherit from vector.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3274 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen/MachineCodeForInstruction.h')
-rw-r--r-- | include/llvm/CodeGen/MachineCodeForInstruction.h | 55 |
1 files changed, 39 insertions, 16 deletions
diff --git a/include/llvm/CodeGen/MachineCodeForInstruction.h b/include/llvm/CodeGen/MachineCodeForInstruction.h index 03e0250..050a626 100644 --- a/include/llvm/CodeGen/MachineCodeForInstruction.h +++ b/include/llvm/CodeGen/MachineCodeForInstruction.h @@ -1,18 +1,17 @@ -//===-- llvm/CodeGen/MachineCodeForInstruction.h -----------------*- C++ -*--=// +//===-- llvm/CodeGen/MachineCodeForInstruction.h ----------------*- C++ -*-===// // -// Representation of the sequence of machine instructions created -// for a single VM instruction. Additionally records information -// about hidden and implicit values used by the machine instructions: -// about hidden values used by the machine instructions: +// Representation of the sequence of machine instructions created for a single +// VM instruction. Additionally records information about hidden and implicit +// values used by the machine instructions: about hidden values used by the +// machine instructions: // -// "Temporary values" are intermediate values used in the machine -// instruction sequence, but not in the VM instruction -// Note that such values should be treated as pure SSA values with -// no interpretation of their operands (i.e., as a TmpInstruction -// object which actually represents such a value). +// "Temporary values" are intermediate values used in the machine instruction +// sequence, but not in the VM instruction Note that such values should be +// treated as pure SSA values with no interpretation of their operands (i.e., as +// a TmpInstruction object which actually represents such a value). // -// (2) "Implicit uses" are values used in the VM instruction but not in -// the machine instruction sequence +// (2) "Implicit uses" are values used in the VM instruction but not in +// the machine instruction sequence // //===----------------------------------------------------------------------===// @@ -25,10 +24,9 @@ class MachineInstr; class Instruction; class Value; -class MachineCodeForInstruction - : public Annotation, public std::vector<MachineInstr*> { +class MachineCodeForInstruction : public Annotation { std::vector<Value*> tempVec; // used by m/c instr but not VM instr - + std::vector<MachineInstr*> Contents; public: MachineCodeForInstruction(); ~MachineCodeForInstruction(); @@ -36,6 +34,31 @@ public: static MachineCodeForInstruction &get(const Instruction *I); static void destroy(const Instruction *I); + // Access to underlying machine instructions... + typedef std::vector<MachineInstr*>::iterator iterator; + typedef std::vector<MachineInstr*>::const_iterator const_iterator; + + unsigned size() const { return Contents.size(); } + bool empty() const { return Contents.empty(); } + MachineInstr *front() const { return Contents.front(); } + MachineInstr *back() const { return Contents.back(); } + MachineInstr *&operator[](unsigned i) { return Contents[i]; } + MachineInstr *operator[](unsigned i) const { return Contents[i]; } + void pop_back() { Contents.pop_back(); } + + iterator begin() { return Contents.begin(); } + iterator end() { return Contents.end(); } + const_iterator begin() const { return Contents.begin(); } + const_iterator end() const { return Contents.end(); } + + template<class InIt> + void insert(iterator where, InIt first, InIt last) { + Contents.insert(where, first, last); + } + iterator erase(iterator where) { return Contents.erase(where); } + iterator erase(iterator s, iterator e) { return Contents.erase(s, e); } + + // dropAllReferences() - This function drops all references within // temporary (hidden) instructions created in implementing the original // VM intruction. This ensures there are no remaining "uses" within @@ -46,7 +69,7 @@ public: const std::vector<Value*> &getTempValues() const { return tempVec; } std::vector<Value*> &getTempValues() { return tempVec; } - inline MachineCodeForInstruction &addTemp(Value *tmp) { + MachineCodeForInstruction &addTemp(Value *tmp) { tempVec.push_back(tmp); return *this; } |