[llvm-commits] CVS: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp LiveIntervalAnalysis.h

Chris Lattner lattner at cs.uiuc.edu
Fri Jul 23 14:24:29 PDT 2004



Changes in directory llvm/lib/CodeGen:

LiveIntervalAnalysis.cpp updated: 1.106 -> 1.107
LiveIntervalAnalysis.h updated: 1.34 -> 1.35

---
Log message:

More minor changes:
 * Inline some functions
 * Eliminate some comparisons from the release build

This is good for another .3 on gcc.


---
Diffs of the changes:  (+31 -44)

Index: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.106 llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.107
--- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.106	Fri Jul 23 12:56:30 2004
+++ llvm/lib/CodeGen/LiveIntervalAnalysis.cpp	Fri Jul 23 16:24:19 2004
@@ -374,7 +374,7 @@
     DEBUG(std::cerr << '\n');
 }
 
-void LiveIntervals::handlePhysicalRegisterDef(MachineBasicBlock* mbb,
+void LiveIntervals::handlePhysicalRegisterDef(MachineBasicBlock *MBB,
                                               MachineBasicBlock::iterator mi,
                                               LiveInterval& interval)
 {
@@ -383,7 +383,6 @@
     DEBUG(std::cerr << "\t\tregister: "; printRegName(interval.reg));
     typedef LiveVariables::killed_iterator KillIter;
 
-    MachineBasicBlock::iterator e = mbb->end();
     unsigned baseIndex = getInstructionIndex(mi);
     unsigned start = getDefIndex(baseIndex);
     unsigned end = start;
@@ -403,8 +402,9 @@
     // If it is not dead on definition, it must be killed by a
     // subsequent instruction. Hence its interval is:
     // [defSlot(def), useSlot(kill)+1)
-    do {
+    while (1) {
         ++mi;
+        assert(mi != MBB->end() && "physreg was not killed in defining block!");
         baseIndex += InstrSlots::NUM;
         for (KillIter ki = lv_->killed_begin(mi), ke = lv_->killed_end(mi);
              ki != ke; ++ki) {
@@ -414,7 +414,7 @@
                 goto exit;
             }
         }
-    } while (mi != e);
+    }
 
 exit:
     assert(start < end && "did not find end of interval?");
@@ -422,35 +422,16 @@
     DEBUG(std::cerr << " +" << LiveRange(start, end) << '\n');
 }
 
-void LiveIntervals::handleRegisterDef(MachineBasicBlock* mbb,
-                                      MachineBasicBlock::iterator mi,
-                                      unsigned reg)
-{
-    if (MRegisterInfo::isPhysicalRegister(reg)) {
-        if (lv_->getAllocatablePhysicalRegisters()[reg]) {
-            handlePhysicalRegisterDef(mbb, mi, getOrCreateInterval(reg));
-            for (const unsigned* as = mri_->getAliasSet(reg); *as; ++as)
-                handlePhysicalRegisterDef(mbb, mi, getOrCreateInterval(*as));
-        }
-    }
-    else
-        handleVirtualRegisterDef(mbb, mi, getOrCreateInterval(reg));
-}
-
-unsigned LiveIntervals::getInstructionIndex(MachineInstr* instr) const
-{
-    Mi2IndexMap::const_iterator it = mi2iMap_.find(instr);
-    return (it == mi2iMap_.end() ?
-            std::numeric_limits<unsigned>::max() :
-            it->second);
-}
-
-MachineInstr* LiveIntervals::getInstructionFromIndex(unsigned index) const
-{
-    index /= InstrSlots::NUM; // convert index to vector index
-    assert(index < i2miMap_.size() &&
-           "index does not correspond to an instruction");
-    return i2miMap_[index];
+void LiveIntervals::handleRegisterDef(MachineBasicBlock *MBB,
+                                      MachineBasicBlock::iterator MI,
+                                      unsigned reg) {
+  if (MRegisterInfo::isVirtualRegister(reg))
+    handleVirtualRegisterDef(MBB, MI, getOrCreateInterval(reg));
+  else if (lv_->getAllocatablePhysicalRegisters()[reg]) {
+    handlePhysicalRegisterDef(MBB, MI, getOrCreateInterval(reg));
+    for (const unsigned* AS = mri_->getAliasSet(reg); *AS; ++AS)
+      handlePhysicalRegisterDef(MBB, MI, getOrCreateInterval(*AS));
+  }
 }
 
 /// computeIntervals - computes the live intervals for virtual
@@ -490,14 +471,6 @@
     }
 }
 
-unsigned LiveIntervals::rep(unsigned reg)
-{
-    Reg2RegMap::iterator it = r2rMap_.find(reg);
-    if (it != r2rMap_.end())
-        return it->second = rep(it->second);
-    return reg;
-}
-
 void LiveIntervals::joinIntervalsInMachineBB(MachineBasicBlock *MBB) {
     DEBUG(std::cerr << ((Value*)MBB->getBasicBlock())->getName() << ":\n");
     const TargetInstrInfo& tii = *tm_->getInstrInfo();


Index: llvm/lib/CodeGen/LiveIntervalAnalysis.h
diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.h:1.34 llvm/lib/CodeGen/LiveIntervalAnalysis.h:1.35
--- llvm/lib/CodeGen/LiveIntervalAnalysis.h:1.34	Fri Jul 23 13:38:52 2004
+++ llvm/lib/CodeGen/LiveIntervalAnalysis.h	Fri Jul 23 16:24:19 2004
@@ -101,11 +101,20 @@
         }
 
         /// getInstructionIndex - returns the base index of instr
-        unsigned getInstructionIndex(MachineInstr* instr) const;
+        unsigned getInstructionIndex(MachineInstr* instr) const {
+          Mi2IndexMap::const_iterator it = mi2iMap_.find(instr);
+          assert(it != mi2iMap_.end() && "Invalid instruction!");
+          return it->second;
+        }
 
         /// getInstructionFromIndex - given an index in any slot of an
         /// instruction return a pointer the instruction
-        MachineInstr* getInstructionFromIndex(unsigned index) const;
+        MachineInstr* getInstructionFromIndex(unsigned index) const {
+          index /= InstrSlots::NUM; // convert index to vector index
+          assert(index < i2miMap_.size() &&
+                 "index does not correspond to an instruction");
+          return i2miMap_[index];
+        }
 
         Intervals& getIntervals() { return intervals_; }
 
@@ -150,7 +159,12 @@
         LiveInterval& getOrCreateInterval(unsigned reg);
 
         /// rep - returns the representative of this register
-        unsigned rep(unsigned reg);
+        unsigned rep(unsigned reg) {
+          Reg2RegMap::iterator it = r2rMap_.find(reg);
+          if (it != r2rMap_.end())
+            return it->second = rep(it->second);
+          return reg;
+        }
 
         void printRegName(unsigned reg) const;
     };





More information about the llvm-commits mailing list