diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-08-08 23:44:07 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-08-08 23:44:07 +0000 |
commit | fdd6484b41ef0fa7eb8c995fb34b728b193c6258 (patch) | |
tree | 8f3b3303c242bbd4cfa6d5d1a5d5c96b5f4b4837 /include | |
parent | 0c5f5f4916a5c72b2a6a9cb13f0b2c2add95b6f1 (diff) | |
download | external_llvm-fdd6484b41ef0fa7eb8c995fb34b728b193c6258.zip external_llvm-fdd6484b41ef0fa7eb8c995fb34b728b193c6258.tar.gz external_llvm-fdd6484b41ef0fa7eb8c995fb34b728b193c6258.tar.bz2 |
Move getNextOperandForReg() into MachineRegisterInfo.
MRI provides iterators for traversing the use-def chains. They should
not be accessible from anywhere else.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161543 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/CodeGen/MachineOperand.h | 12 | ||||
-rw-r--r-- | include/llvm/CodeGen/MachineRegisterInfo.h | 13 |
2 files changed, 14 insertions, 11 deletions
diff --git a/include/llvm/CodeGen/MachineOperand.h b/include/llvm/CodeGen/MachineOperand.h index c08b22d..d3cf090 100644 --- a/include/llvm/CodeGen/MachineOperand.h +++ b/include/llvm/CodeGen/MachineOperand.h @@ -138,6 +138,9 @@ private: /// This is valid for all operand types, when the operand is in an instr. MachineInstr *ParentMI; + // MRI accesses Contents.Reg directly. + friend class MachineRegisterInfo; + /// Contents union - This contains the payload for the various operand types. union { MachineBasicBlock *MBB; // For MO_MachineBasicBlock. @@ -305,15 +308,6 @@ public: return !isUndef() && !isInternalRead() && (isUse() || getSubReg()); } - /// getNextOperandForReg - Return the next MachineOperand in the linked list - /// of operands that use or define the same register. - /// Don't call this function directly, see the def-use iterators in - /// MachineRegisterInfo instead. - MachineOperand *getNextOperandForReg() const { - assert(isReg() && "This is not a register operand!"); - return Contents.Reg.Next; - } - //===--------------------------------------------------------------------===// // Mutators for Register Operands //===--------------------------------------------------------------------===// diff --git a/include/llvm/CodeGen/MachineRegisterInfo.h b/include/llvm/CodeGen/MachineRegisterInfo.h index 061d60a..aad79f6 100644 --- a/include/llvm/CodeGen/MachineRegisterInfo.h +++ b/include/llvm/CodeGen/MachineRegisterInfo.h @@ -57,6 +57,12 @@ class MachineRegisterInfo { /// physical registers. MachineOperand **PhysRegUseDefLists; + /// Get the next element in the use-def chain. + static MachineOperand *getNextOperandForReg(const MachineOperand *MO) { + assert(MO && MO->isReg() && "This is not a register operand!"); + return MO->Contents.Reg.Next; + } + /// UsedPhysRegs - This is a bit vector that is computed and set by the /// register allocator, and must be kept up to date by passes that run after /// register allocation (though most don't modify this). This is used @@ -135,6 +141,9 @@ public: template<bool Uses, bool Defs, bool SkipDebug> class defusechain_iterator; + // Make it a friend so it can access getNextOperandForReg(). + template<bool, bool, bool> friend class defusechain_iterator; + /// reg_iterator/reg_begin/reg_end - Walk all defs and uses of the specified /// register. typedef defusechain_iterator<true,true,false> reg_iterator; @@ -500,13 +509,13 @@ public: // Iterator traversal: forward iteration only defusechain_iterator &operator++() { // Preincrement assert(Op && "Cannot increment end iterator!"); - Op = Op->getNextOperandForReg(); + Op = getNextOperandForReg(Op); // If this is an operand we don't care about, skip it. while (Op && ((!ReturnUses && Op->isUse()) || (!ReturnDefs && Op->isDef()) || (SkipDebug && Op->isDebug()))) - Op = Op->getNextOperandForReg(); + Op = getNextOperandForReg(Op); return *this; } |