From 2ccdbc6675fd5bafb6da65dfca850b6e2587f9f3 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Tue, 2 Apr 2013 22:27:45 +0000 Subject: [PATCH] Allow MachineTraceMetrics to be used when the model has no resources. It it still possible to extract information from itineraries, for example. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178582 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/EarlyIfConversion.cpp | 4 ---- lib/CodeGen/MachineTraceMetrics.cpp | 14 +++++++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/CodeGen/EarlyIfConversion.cpp b/lib/CodeGen/EarlyIfConversion.cpp index fc767362be7..5447df09cbb 100644 --- a/lib/CodeGen/EarlyIfConversion.cpp +++ b/lib/CodeGen/EarlyIfConversion.cpp @@ -677,10 +677,6 @@ bool EarlyIfConverter::shouldConvertIf() { if (Stress) return true; - // Without a scheduling model, we can't make decisions. - if (!SchedModel->hasInstrSchedModel()) - return false; - if (!MinInstr) MinInstr = Traces->getEnsemble(MachineTraceMetrics::TS_MinInstrCount); diff --git a/lib/CodeGen/MachineTraceMetrics.cpp b/lib/CodeGen/MachineTraceMetrics.cpp index c154b5c9c10..49d8c4e9470 100644 --- a/lib/CodeGen/MachineTraceMetrics.cpp +++ b/lib/CodeGen/MachineTraceMetrics.cpp @@ -105,6 +105,8 @@ MachineTraceMetrics::getResources(const MachineBasicBlock *MBB) { FBI->HasCalls = true; // Count processor resources used. + if (!SchedModel.hasInstrSchedModel()) + continue; const MCSchedClassDesc *SC = SchedModel.resolveSchedClass(MI); if (!SC->isValid()) continue; @@ -132,7 +134,9 @@ MachineTraceMetrics::getProcResourceCycles(unsigned MBBNum) const { assert(BlockInfo[MBBNum].hasResources() && "getResources() must be called before getProcResourceCycles()"); unsigned PRKinds = SchedModel.getNumProcResourceKinds(); - return ArrayRef(&ProcResourceCycles[MBBNum * PRKinds], PRKinds); + assert((MBBNum+1) * PRKinds <= ProcResourceCycles.size()); + return ArrayRef(ProcResourceCycles.data() + MBBNum * PRKinds, + PRKinds); } @@ -251,7 +255,9 @@ ArrayRef MachineTraceMetrics::Ensemble:: getProcResourceDepths(unsigned MBBNum) const { unsigned PRKinds = MTM.SchedModel.getNumProcResourceKinds(); - return ArrayRef(&ProcResourceDepths[MBBNum * PRKinds], PRKinds); + assert((MBBNum+1) * PRKinds <= ProcResourceDepths.size()); + return ArrayRef(ProcResourceDepths.data() + MBBNum * PRKinds, + PRKinds); } /// Get an array of processor resource heights for MBB. Indexed by processor @@ -263,7 +269,9 @@ ArrayRef MachineTraceMetrics::Ensemble:: getProcResourceHeights(unsigned MBBNum) const { unsigned PRKinds = MTM.SchedModel.getNumProcResourceKinds(); - return ArrayRef(&ProcResourceHeights[MBBNum * PRKinds], PRKinds); + assert((MBBNum+1) * PRKinds <= ProcResourceHeights.size()); + return ArrayRef(ProcResourceHeights.data() + MBBNum * PRKinds, + PRKinds); } //===----------------------------------------------------------------------===// -- 2.34.1