From 0271a5fa29f73150fad891ca4c43a0a89a64b3bf Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Fri, 27 Jul 2012 23:58:36 +0000 Subject: [PATCH] Keep track of the head and tail of the trace through each block. This makes it possible to quickly detect blocks that are outside the trace. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160904 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/MachineTraceMetrics.cpp | 16 ++++++++++++---- lib/CodeGen/MachineTraceMetrics.h | 6 ++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/MachineTraceMetrics.cpp b/lib/CodeGen/MachineTraceMetrics.cpp index 557d47314e9..8ae6f370300 100644 --- a/lib/CodeGen/MachineTraceMetrics.cpp +++ b/lib/CodeGen/MachineTraceMetrics.cpp @@ -142,6 +142,7 @@ computeDepthResources(const MachineBasicBlock *MBB) { // Compute resources from trace above. The top block is simple. if (!TBI->Pred) { TBI->InstrDepth = 0; + TBI->Head = MBB->getNumber(); return; } @@ -151,6 +152,7 @@ computeDepthResources(const MachineBasicBlock *MBB) { assert(PredTBI->hasValidDepth() && "Trace above has not been computed yet"); const FixedBlockInfo *PredFBI = CT.getResources(TBI->Pred); TBI->InstrDepth = PredTBI->InstrDepth + PredFBI->InstrCount; + TBI->Head = PredTBI->Head; } // Update resource-related information in the TraceBlockInfo for MBB. @@ -163,14 +165,17 @@ computeHeightResources(const MachineBasicBlock *MBB) { TBI->InstrHeight = CT.getResources(MBB)->InstrCount; // The trace tail is done. - if (!TBI->Succ) + if (!TBI->Succ) { + TBI->Tail = MBB->getNumber(); return; + } // Compute from the block below. A post-order traversal ensures the // predecessor is always computed first. TraceBlockInfo *SuccTBI = &BlockInfo[TBI->Succ->getNumber()]; assert(SuccTBI->hasValidHeight() && "Trace below has not been computed yet"); TBI->InstrHeight += SuccTBI->InstrHeight; + TBI->Tail = SuccTBI->Tail; } // Check if depth resources for MBB are valid and return the TBI. @@ -454,12 +459,15 @@ MachineTraceMetrics::Ensemble::getTrace(const MachineBasicBlock *MBB) { } void MachineTraceMetrics::Trace::print(raw_ostream &OS) const { - OS << TE.getName() << " trace:"; + unsigned MBBNum = &TBI - &TE.BlockInfo[0]; + + OS << TE.getName() << " trace BB#" << TBI.Head << " --> BB#" << MBBNum + << " --> BB#" << TBI.Tail << ':'; if (TBI.hasValidHeight() && TBI.hasValidDepth()) OS << ' ' << getInstrCount() << " instrs."; const MachineTraceMetrics::TraceBlockInfo *Block = &TBI; - OS << "\n *"; + OS << "\nBB#" << MBBNum; while (Block->hasValidDepth() && Block->Pred) { unsigned Num = Block->Pred->getNumber(); OS << " <- BB#" << Num; @@ -467,7 +475,7 @@ void MachineTraceMetrics::Trace::print(raw_ostream &OS) const { } Block = &TBI; - OS << "\n *"; + OS << "\n "; while (Block->hasValidHeight() && Block->Succ) { unsigned Num = Block->Succ->getNumber(); OS << " -> BB#" << Num; diff --git a/lib/CodeGen/MachineTraceMetrics.h b/lib/CodeGen/MachineTraceMetrics.h index 086d7eaebff..26136fa9ee9 100644 --- a/lib/CodeGen/MachineTraceMetrics.h +++ b/lib/CodeGen/MachineTraceMetrics.h @@ -110,6 +110,12 @@ public: /// Trace successor, or NULL for the last block in the trace. const MachineBasicBlock *Succ; + /// The block number of the head of the trace. (When hasValidDepth()). + unsigned Head; + + /// The block number of the tail of the trace. (When hasValidHeight()). + unsigned Tail; + /// Accumulated number of instructions in the trace above this block. /// Does not include instructions in this block. unsigned InstrDepth; -- 2.34.1