aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/llvm/CodeGen/LiveInterval.h8
-rw-r--r--lib/CodeGen/LiveInterval.cpp28
-rw-r--r--lib/CodeGen/LiveInterval.h8
-rw-r--r--lib/CodeGen/LiveIntervalAnalysis.cpp10
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();