[llvm-commits] [llvm] r45428 - in /llvm/trunk: include/llvm/CodeGen/MachineInstr.h lib/CodeGen/MachineInstr.cpp

Chris Lattner sabre at nondot.org
Sat Dec 29 16:12:25 PST 2007


Author: lattner
Date: Sat Dec 29 18:12:25 2007
New Revision: 45428

URL: http://llvm.org/viewvc/llvm-project?rev=45428&view=rev
Log:
simplify some code by factoring operand construction better.

Modified:
    llvm/trunk/include/llvm/CodeGen/MachineInstr.h
    llvm/trunk/lib/CodeGen/MachineInstr.cpp

Modified: llvm/trunk/include/llvm/CodeGen/MachineInstr.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstr.h?rev=45428&r1=45427&r2=45428&view=diff

==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineInstr.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineInstr.h Sat Dec 29 18:12:25 2007
@@ -98,10 +98,6 @@
     MachineOperand Op;
     Op.opType = MachineOperand::MO_Immediate;
     Op.contents.immedVal = Val;
-    Op.IsDef = false;
-    Op.IsImp = false;
-    Op.IsKill = false;
-    Op.IsDead = false;
     Op.auxInfo.offset = 0;
     return Op;
   }
@@ -110,14 +106,24 @@
     MachineOperand Op;
     Op.opType = MachineOperand::MO_FrameIndex;
     Op.contents.immedVal = Idx;
-    Op.IsDef = false;
-    Op.IsImp = false;
-    Op.IsKill = false;
-    Op.IsDead = false;
     Op.auxInfo.offset = 0;
     return Op;
   }
-
+  
+  static MachineOperand CreateReg(unsigned Reg, bool isDef, bool isImp = false,
+                                  bool isKill = false, bool isDead = false,
+                                  unsigned SubReg = 0) {
+    MachineOperand Op;
+    Op.opType = MachineOperand::MO_Register;
+    Op.IsDef = isDef;
+    Op.IsImp = isImp;
+    Op.IsKill = isKill;
+    Op.IsDead = isDead;
+    Op.contents.RegNo = Reg;
+    Op.auxInfo.subReg = SubReg;
+    return Op;
+  }
+  
   const MachineOperand &operator=(const MachineOperand &MO) {
     contents = MO.contents;
     IsDef    = MO.IsDef;
@@ -341,7 +347,6 @@
   void operator=(const MachineInstr&); // DO NOT IMPLEMENT
 
   // Intrusive list support
-  //
   friend struct ilist_traits<MachineInstr>;
 
 public:
@@ -350,7 +355,7 @@
   MachineInstr();
 
   /// MachineInstr ctor - This constructor create a MachineInstr and add the
-  /// implicit operands. It reserves space for number of operands specified by
+  /// implicit operands.  It reserves space for number of operands specified by
   /// TargetInstrDescriptor.
   explicit MachineInstr(const TargetInstrDescriptor &TID, bool NoImp = false);
 
@@ -465,24 +470,17 @@
   void addRegOperand(unsigned Reg, bool IsDef, bool IsImp = false,
                      bool IsKill = false, bool IsDead = false,
                      unsigned SubReg = 0) {
-    MachineOperand &Op = AddNewOperand(IsImp);
-    Op.opType = MachineOperand::MO_Register;
-    Op.IsDef = IsDef;
-    Op.IsImp = IsImp;
-    Op.IsKill = IsKill;
-    Op.IsDead = IsDead;
-    Op.contents.RegNo = Reg;
-    Op.auxInfo.subReg = (unsigned char)SubReg;
+    // FIXME: Make the AddNewOperand api sane.
+    AddNewOperand(IsImp) = MachineOperand::CreateReg(Reg, IsDef, IsImp, IsKill,
+                                                     IsDead, SubReg);
   }
 
   /// addImmOperand - Add a zero extended constant argument to the
   /// machine instruction.
   ///
   void addImmOperand(int64_t Val) {
-    MachineOperand &Op = AddNewOperand();
-    Op.opType = MachineOperand::MO_Immediate;
-    Op.contents.immedVal = Val;
-    Op.auxInfo.offset = 0;
+    // FIXME: Make the AddNewOperand api sane.
+    AddNewOperand() = MachineOperand::CreateImm(Val);
   }
 
   void addMachineBasicBlockOperand(MachineBasicBlock *MBB) {
@@ -495,10 +493,8 @@
   /// addFrameIndexOperand - Add an abstract frame index to the instruction
   ///
   void addFrameIndexOperand(unsigned Idx) {
-    MachineOperand &Op = AddNewOperand();
-    Op.opType = MachineOperand::MO_FrameIndex;
-    Op.contents.immedVal = Idx;
-    Op.auxInfo.offset = 0;
+    // FIXME: Make the AddNewOperand api sane.
+    AddNewOperand() = MachineOperand::CreateFrameIndex(Idx);
   }
 
   /// addConstantPoolndexOperand - Add a constant pool object index to the

Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=45428&r1=45427&r2=45428&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Sat Dec 29 18:12:25 2007
@@ -31,29 +31,11 @@
 
 void MachineInstr::addImplicitDefUseOperands() {
   if (TID->ImplicitDefs)
-    for (const unsigned *ImpDefs = TID->ImplicitDefs; *ImpDefs; ++ImpDefs) {
-      MachineOperand Op;
-      Op.opType = MachineOperand::MO_Register;
-      Op.IsDef = true;
-      Op.IsImp = true;
-      Op.IsKill = false;
-      Op.IsDead = false;
-      Op.contents.RegNo = *ImpDefs;
-      Op.auxInfo.subReg = 0;
-      Operands.push_back(Op);
-    }
+    for (const unsigned *ImpDefs = TID->ImplicitDefs; *ImpDefs; ++ImpDefs)
+      addRegOperand(*ImpDefs, true, true);
   if (TID->ImplicitUses)
-    for (const unsigned *ImpUses = TID->ImplicitUses; *ImpUses; ++ImpUses) {
-      MachineOperand Op;
-      Op.opType = MachineOperand::MO_Register;
-      Op.IsDef = false;
-      Op.IsImp = true;
-      Op.IsKill = false;
-      Op.IsDead = false;
-      Op.contents.RegNo = *ImpUses;
-      Op.auxInfo.subReg = 0;
-      Operands.push_back(Op);
-    }
+    for (const unsigned *ImpUses = TID->ImplicitUses; *ImpUses; ++ImpUses)
+      addRegOperand(*ImpUses, false, true);
 }
 
 /// MachineInstr ctor - This constructor create a MachineInstr and add the





More information about the llvm-commits mailing list