diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-01-08 23:10:57 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-01-08 23:10:57 +0000 |
commit | b421c566f512ed0ec87851866d335e9086c3f8be (patch) | |
tree | ba001da8c2c2f846ad33823f32ae45426e0b9f1d /include | |
parent | 56e4d89642d0850f6392a90136848b3647abed97 (diff) | |
download | external_llvm-b421c566f512ed0ec87851866d335e9086c3f8be.zip external_llvm-b421c566f512ed0ec87851866d335e9086c3f8be.tar.gz external_llvm-b421c566f512ed0ec87851866d335e9086c3f8be.tar.bz2 |
Use an IndexedMap for LiveVariables::VirtRegInfo.
Provide MRI::getNumVirtRegs() and TRI::index2VirtReg() functions to allow
iteration over virtual registers without depending on the representation of
virtual register numbers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123098 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/CodeGen/LiveVariables.h | 7 | ||||
-rw-r--r-- | include/llvm/CodeGen/MachineRegisterInfo.h | 6 | ||||
-rw-r--r-- | include/llvm/Target/TargetRegisterInfo.h | 6 |
3 files changed, 15 insertions, 4 deletions
diff --git a/include/llvm/CodeGen/LiveVariables.h b/include/llvm/CodeGen/LiveVariables.h index ea32efa..f9b81b1 100644 --- a/include/llvm/CodeGen/LiveVariables.h +++ b/include/llvm/CodeGen/LiveVariables.h @@ -32,8 +32,10 @@ #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstr.h" +#include "llvm/Target/TargetRegisterInfo.h" #include "llvm/ADT/BitVector.h" #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/IndexedMap.h" #include "llvm/ADT/SmallSet.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/SparseBitVector.h" @@ -121,10 +123,9 @@ public: private: /// VirtRegInfo - This list is a mapping from virtual register number to - /// variable information. FirstVirtualRegister is subtracted from the virtual - /// register number before indexing into this list. + /// variable information. /// - std::vector<VarInfo> VirtRegInfo; + IndexedMap<VarInfo, VirtReg2IndexFunctor> VirtRegInfo; /// PHIJoins - list of virtual registers that are PHI joins. These registers /// may have multiple definitions, and they require special handling when diff --git a/include/llvm/CodeGen/MachineRegisterInfo.h b/include/llvm/CodeGen/MachineRegisterInfo.h index ddba61b..20f8bc8 100644 --- a/include/llvm/CodeGen/MachineRegisterInfo.h +++ b/include/llvm/CodeGen/MachineRegisterInfo.h @@ -216,10 +216,14 @@ public: /// unsigned createVirtualRegister(const TargetRegisterClass *RegClass); + /// getNumVirtRegs - Return the number of virtual registers created. + /// + unsigned getNumVirtRegs() const { return VRegInfo.size(); } + /// getLastVirtReg - Return the highest currently assigned virtual register. /// unsigned getLastVirtReg() const { - return (unsigned)VRegInfo.size()+TargetRegisterInfo::FirstVirtualRegister-1; + return TargetRegisterInfo::index2VirtReg(getNumVirtRegs() - 1); } /// getRegClassVirtRegs - Return the list of virtual registers of the given diff --git a/include/llvm/Target/TargetRegisterInfo.h b/include/llvm/Target/TargetRegisterInfo.h index 05ccf04..d26c67b 100644 --- a/include/llvm/Target/TargetRegisterInfo.h +++ b/include/llvm/Target/TargetRegisterInfo.h @@ -321,6 +321,12 @@ public: return Reg >= FirstVirtualRegister; } + /// index2VirtReg - Convert a 0-based index to a virtual register number. + /// This is the inverse operation of VirtReg2IndexFunctor below. + static unsigned index2VirtReg(unsigned Index) { + return Index + FirstVirtualRegister; + } + /// printReg - Print a virtual or physical register on OS. void printReg(unsigned Reg, raw_ostream &OS) const; |