From: Chris Lattner Date: Sat, 14 May 2005 05:34:15 +0000 (+0000) Subject: Print the symbolic register name in a register allocator debug dump. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=38135af219c48a8626d6af34a92e7e8bb957c81f;p=oota-llvm.git Print the symbolic register name in a register allocator debug dump. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22002 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/CodeGen/LiveInterval.h b/include/llvm/CodeGen/LiveInterval.h index d67e018b473..6cac0960b21 100644 --- a/include/llvm/CodeGen/LiveInterval.h +++ b/include/llvm/CodeGen/LiveInterval.h @@ -26,6 +26,8 @@ #include 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 ffa4caab06f..01298e9c6c9 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 #include #include @@ -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 d67e018b473..6cac0960b21 100644 --- a/lib/CodeGen/LiveInterval.h +++ b/lib/CodeGen/LiveInterval.h @@ -26,6 +26,8 @@ #include 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 d75bf3fb0ef..9f0bce8296f 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();