From 749bf3be5e08c780ae8402f4ed8a193d01a0fe44 Mon Sep 17 00:00:00 2001 From: Andrea Di Biagio Date: Fri, 14 Jun 2019 13:31:21 +0000 Subject: [PATCH] [MCA] Ignore invalid processor resource writes of zero cycles. NFCI In debug mode, the tool also raises a warning and prints out a message which helps identify the problematic MCWriteProcResEntry from the scheduling class. This message would have been useful to have when triaging PR42282. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363387 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MCA/InstrBuilder.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/MCA/InstrBuilder.cpp b/lib/MCA/InstrBuilder.cpp index 3aaed0e3e94..829920366c9 100644 --- a/lib/MCA/InstrBuilder.cpp +++ b/lib/MCA/InstrBuilder.cpp @@ -65,6 +65,17 @@ static void initializeUsedResources(InstrDesc &ID, for (unsigned I = 0, E = SCDesc.NumWriteProcResEntries; I < E; ++I) { const MCWriteProcResEntry *PRE = STI.getWriteProcResBegin(&SCDesc) + I; const MCProcResourceDesc &PR = *SM.getProcResource(PRE->ProcResourceIdx); + if (!PRE->Cycles) { +#ifndef NDEBUG + WithColor::warning() + << "Ignoring invalid write of zero cycles on processor resource " + << PR.Name << "\n"; + WithColor::note() << "found in scheduling class " << SCDesc.Name + << " (write index #" << I << ")\n"; +#endif + continue; + } + uint64_t Mask = ProcResourceMasks[PRE->ProcResourceIdx]; if (PR.BufferSize < 0) { AllInOrderResources = false; @@ -189,8 +200,9 @@ static void initializeUsedResources(InstrDesc &ID, << "cy=" << R.second.size() << '\n'; for (const uint64_t R : ID.Buffers) dbgs() << "\t\tBuffer Mask=" << format_hex(R, 16) << '\n'; - dbgs() << "\t\t Used Units=" << format_hex(ID.UsedProcResUnits, 16) << '\n'; - dbgs() << "\t\tUsed Groups=" << format_hex(ID.UsedProcResGroups, 16) << '\n'; + dbgs() << "\t\t Used Units=" << format_hex(ID.UsedProcResUnits, 16) << '\n'; + dbgs() << "\t\tUsed Groups=" << format_hex(ID.UsedProcResGroups, 16) + << '\n'; }); } -- 2.40.0