[llvm-commits] [llvm] r161543 - in /llvm/trunk/include/llvm/CodeGen: MachineOperand.h MachineRegisterInfo.h

Jakob Stoklund Olesen stoklund at 2pi.dk
Wed Aug 8 16:44:07 PDT 2012


Author: stoklund
Date: Wed Aug  8 18:44:07 2012
New Revision: 161543

URL: http://llvm.org/viewvc/llvm-project?rev=161543&view=rev
Log:
Move getNextOperandForReg() into MachineRegisterInfo.

MRI provides iterators for traversing the use-def chains. They should
not be accessible from anywhere else.

Modified:
    llvm/trunk/include/llvm/CodeGen/MachineOperand.h
    llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h

Modified: llvm/trunk/include/llvm/CodeGen/MachineOperand.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineOperand.h?rev=161543&r1=161542&r2=161543&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineOperand.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineOperand.h Wed Aug  8 18:44:07 2012
@@ -138,6 +138,9 @@
   /// 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 @@
     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
   //===--------------------------------------------------------------------===//

Modified: llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h?rev=161543&r1=161542&r2=161543&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h Wed Aug  8 18:44:07 2012
@@ -57,6 +57,12 @@
   /// 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 @@
   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 @@
     // 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;
     }





More information about the llvm-commits mailing list