[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