diff options
-rw-r--r-- | include/llvm/CodeGen/LiveInterval.h | 8 | ||||
-rw-r--r-- | lib/CodeGen/LiveInterval.cpp | 28 | ||||
-rw-r--r-- | lib/CodeGen/LiveInterval.h | 8 | ||||
-rw-r--r-- | lib/CodeGen/LiveIntervalAnalysis.cpp | 10 |
4 files changed, 36 insertions, 18 deletions
diff --git a/include/llvm/CodeGen/LiveInterval.h b/include/llvm/CodeGen/LiveInterval.h index d67e018..6cac096 100644 --- a/include/llvm/CodeGen/LiveInterval.h +++ b/include/llvm/CodeGen/LiveInterval.h @@ -26,6 +26,8 @@ #include <cassert> namespace llvm { + class MRegisterInfo; + /// LiveRange structure - This represents a simple register range in the /// program, with an inclusive start point and an exclusive end point. /// These ranges are rendered as [start,end). @@ -175,6 +177,7 @@ namespace llvm { return beginNumber() < other.beginNumber(); } + void print(std::ostream &OS, const MRegisterInfo *MRI = 0) const; void dump() const; private: @@ -185,7 +188,10 @@ namespace llvm { LiveInterval& operator=(const LiveInterval& rhs); // DO NOT IMPLEMENT }; - std::ostream& operator<<(std::ostream& os, const LiveInterval& li); + inline std::ostream &operator<<(std::ostream &OS, const LiveInterval &LI) { + LI.print(OS); + return OS; + } } #endif diff --git a/lib/CodeGen/LiveInterval.cpp b/lib/CodeGen/LiveInterval.cpp index ffa4caa..01298e9 100644 --- a/lib/CodeGen/LiveInterval.cpp +++ b/lib/CodeGen/LiveInterval.cpp @@ -20,6 +20,7 @@ #include "LiveInterval.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/Target/MRegisterInfo.h" #include <algorithm> #include <iostream> #include <map> @@ -351,17 +352,22 @@ void LiveRange::dump() const { std::cerr << *this << "\n"; } - -std::ostream& llvm::operator<<(std::ostream& os, const LiveInterval& li) { - os << "%reg" << li.reg << ',' << li.weight; - if (li.empty()) - return os << "EMPTY"; - - os << " = "; - for (LiveInterval::Ranges::const_iterator i = li.ranges.begin(), - e = li.ranges.end(); i != e; ++i) - os << *i; - return os; +void LiveInterval::print(std::ostream &OS, const MRegisterInfo *MRI) const { + if (MRI && MRegisterInfo::isPhysicalRegister(reg)) + OS << MRI->getName(reg); + else + OS << "%reg" << reg; + + OS << ',' << weight; + + if (empty()) + OS << "EMPTY"; + else { + OS << " = "; + for (LiveInterval::Ranges::const_iterator I = ranges.begin(), + E = ranges.end(); I != E; ++I) + OS << *I; + } } void LiveInterval::dump() const { diff --git a/lib/CodeGen/LiveInterval.h b/lib/CodeGen/LiveInterval.h index d67e018..6cac096 100644 --- a/lib/CodeGen/LiveInterval.h +++ b/lib/CodeGen/LiveInterval.h @@ -26,6 +26,8 @@ #include <cassert> namespace llvm { + class MRegisterInfo; + /// LiveRange structure - This represents a simple register range in the /// program, with an inclusive start point and an exclusive end point. /// These ranges are rendered as [start,end). @@ -175,6 +177,7 @@ namespace llvm { return beginNumber() < other.beginNumber(); } + void print(std::ostream &OS, const MRegisterInfo *MRI = 0) const; void dump() const; private: @@ -185,7 +188,10 @@ namespace llvm { LiveInterval& operator=(const LiveInterval& rhs); // DO NOT IMPLEMENT }; - std::ostream& operator<<(std::ostream& os, const LiveInterval& li); + inline std::ostream &operator<<(std::ostream &OS, const LiveInterval &LI) { + LI.print(OS); + return OS; + } } #endif diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index d75bf3f..9f0bce8 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -142,11 +142,11 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) { numIntervals += getNumIntervals(); -#if 1 - DEBUG(std::cerr << "********** INTERVALS **********\n"); - DEBUG(for (iterator I = begin(), E = end(); I != E; ++I) - std::cerr << I->second << "\n"); -#endif + DEBUG(std::cerr << "********** INTERVALS **********\n"; + for (iterator I = begin(), E = end(); I != E; ++I) { + I->second.print(std::cerr, mri_); + std::cerr << "\n"; + }); // join intervals if requested if (EnableJoining) joinIntervals(); |