diff options
-rw-r--r-- | lib/CodeGen/EarlyIfConversion.cpp | 6 | ||||
-rw-r--r-- | lib/CodeGen/MachineTraceMetrics.cpp | 33 | ||||
-rw-r--r-- | lib/CodeGen/MachineTraceMetrics.h | 12 |
3 files changed, 48 insertions, 3 deletions
diff --git a/lib/CodeGen/EarlyIfConversion.cpp b/lib/CodeGen/EarlyIfConversion.cpp index cfe3e9d..a19e9ad 100644 --- a/lib/CodeGen/EarlyIfConversion.cpp +++ b/lib/CodeGen/EarlyIfConversion.cpp @@ -590,6 +590,7 @@ void EarlyIfConverter::invalidateTraces() { Traces->invalidate(IfConv.Tail); Traces->invalidate(IfConv.TBB); Traces->invalidate(IfConv.FBB); + DEBUG(if (MinInstr) MinInstr->print(dbgs())); } /// Apply cost model and heuristics to the if-conversion in IfConv. @@ -598,7 +599,10 @@ void EarlyIfConverter::invalidateTraces() { bool EarlyIfConverter::shouldConvertIf() { if (!MinInstr) MinInstr = Traces->getEnsemble(MachineTraceMetrics::TS_MinInstrCount); - DEBUG(dbgs() << MinInstr->getTrace(IfConv.Head)); + DEBUG({ + dbgs() << MinInstr->getTrace(IfConv.Head); + MinInstr->print(dbgs()); + }); return true; } diff --git a/lib/CodeGen/MachineTraceMetrics.cpp b/lib/CodeGen/MachineTraceMetrics.cpp index 8ae6f37..54c886b 100644 --- a/lib/CodeGen/MachineTraceMetrics.cpp +++ b/lib/CodeGen/MachineTraceMetrics.cpp @@ -211,7 +211,7 @@ getHeightResources(const MachineBasicBlock *MBB) const { // instructions. namespace { class MinInstrCountEnsemble : public MachineTraceMetrics::Ensemble { - const char *getName() { return "MinInstr"; } + const char *getName() const { return "MinInstr"; } const MachineBasicBlock *pickTracePred(const MachineBasicBlock*); const MachineBasicBlock *pickTraceSucc(const MachineBasicBlock*); @@ -458,6 +458,37 @@ MachineTraceMetrics::Ensemble::getTrace(const MachineBasicBlock *MBB) { return Trace(*this, BlockInfo[MBB->getNumber()]); } +void MachineTraceMetrics::Ensemble::print(raw_ostream &OS) const { + OS << getName() << " ensemble:\n"; + for (unsigned i = 0, e = BlockInfo.size(); i != e; ++i) { + OS << " BB#" << i << '\t'; + BlockInfo[i].print(OS); + OS << '\n'; + } +} + +void MachineTraceMetrics::TraceBlockInfo::print(raw_ostream &OS) const { + if (hasValidDepth()) { + OS << "depth=" << InstrDepth; + if (Pred) + OS << " pred=BB#" << Pred->getNumber(); + else + OS << " pred=null"; + OS << " head=BB#" << Head; + } else + OS << "depth invalid"; + OS << ", "; + if (hasValidHeight()) { + OS << "height=" << InstrHeight; + if (Succ) + OS << " succ=BB#" << Succ->getNumber(); + else + OS << " succ=null"; + OS << " tail=BB#" << Tail; + } else + OS << "height invalid"; +} + void MachineTraceMetrics::Trace::print(raw_ostream &OS) const { unsigned MBBNum = &TBI - &TE.BlockInfo[0]; diff --git a/lib/CodeGen/MachineTraceMetrics.h b/lib/CodeGen/MachineTraceMetrics.h index 26136fa..40da272 100644 --- a/lib/CodeGen/MachineTraceMetrics.h +++ b/lib/CodeGen/MachineTraceMetrics.h @@ -105,9 +105,11 @@ public: /// block in a trace ensemble. struct TraceBlockInfo { /// Trace predecessor, or NULL for the first block in the trace. + /// Valid when hasValidDepth(). const MachineBasicBlock *Pred; /// Trace successor, or NULL for the last block in the trace. + /// Valid when hasValidHeight(). const MachineBasicBlock *Succ; /// The block number of the head of the trace. (When hasValidDepth()). @@ -139,6 +141,8 @@ public: /// Invalidate height resources when a block below this one has changed. void invalidateHeight() { InstrHeight = ~0u; } + + void print(raw_ostream&) const; }; /// A trace represents a plausible sequence of executed basic blocks that @@ -180,7 +184,8 @@ public: public: virtual ~Ensemble(); - virtual const char *getName() =0; + virtual const char *getName() const =0; + void print(raw_ostream&) const; void invalidate(const MachineBasicBlock *MBB); /// Get the trace that passes through MBB. @@ -219,6 +224,11 @@ inline raw_ostream &operator<<(raw_ostream &OS, return OS; } +inline raw_ostream &operator<<(raw_ostream &OS, + const MachineTraceMetrics::Ensemble &En) { + En.print(OS); + return OS; +} } // end namespace llvm #endif |