]> granicus.if.org Git - llvm/commitdiff
[MCA] Ignore invalid processor resource writes of zero cycles. NFCI
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Fri, 14 Jun 2019 13:31:21 +0000 (13:31 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Fri, 14 Jun 2019 13:31:21 +0000 (13:31 +0000)
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

index 3aaed0e3e945806861a1021bd20487108abc3a98..829920366c90d2357b491e573cdb0ff35c16ceef 100644 (file)
@@ -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';
   });
 }