<div dir="ltr">The bots sees the same. Please fix or revert ASAP. <div><a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/8301/steps/bootstrap%20clang/logs/stdio">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/8301/steps/bootstrap%20clang/logs/stdio</a><br></div><div><pre style="font-family:"Courier New",courier,monotype,monospace;color:rgb(0,0,0);font-size:medium;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial"><span class="gmail-stdout" style="font-family:"Courier New",courier,monotype,monospace;color:black">In file included from /b/sanitizer-x86_64-linux/build/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCTargetDesc.cpp:34:
/b/sanitizer-x86_64-linux/build/llvm_build64/lib/Target/Lanai/LanaiGenSubtargetInfo.inc:128:39: error: missing field 'SubUnitsIdxBegin' initializer [-Werror,-Wmissing-field-initializers]
  {DBGFIELD("InvalidUnit")     0, 0, 0},
                                      ^
1 error generated.</span></pre><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 8, 2018 at 10:33 AM, Craig Topper via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Is this responsible for this warning I'm seeing now<div><br></div><div><div>lib/Target/X86/<wbr>X86GenSubtargetInfo.inc:52484:<wbr>39: warning: missing field 'SubUnitsIdxBegin' initializer [-Wmissing-field-initializers]</div><span class=""><div>  {DBGFIELD("InvalidUnit")     0, 0, 0},</div></span></div></div><div class="gmail_extra"><br clear="all"><div><div class="m_-8678641453557366051gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><div><div class="h5">
<br><div class="gmail_quote">On Thu, Feb 8, 2018 at 12:46 AM, Clement Courbet via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: courbet<br>
Date: Thu Feb  8 00:46:48 2018<br>
New Revision: 324582<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=324582&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=324582&view=rev</a><br>
Log:<br>
[TargetSchedule] Expose sub-units of a ProcResGroup in MCProcResourceDesc.<br>
<br>
Summary:<br>
Right now using a ProcResource automatically counts as usage of all<br>
super ProcResGroups. All this is done during codegen, so there is no<br>
way for schedulers to get this information at runtime.<br>
<br>
This adds the information of which individual ProcRes units are<br>
contained in a ProcResGroup in MCProcResourceDesc.<br>
<br>
Reviewers: gchatelet<br>
<br>
Subscribers: llvm-commits<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D43023" rel="noreferrer" target="_blank">https://reviews.llvm.org/D4302<wbr>3</a><br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/MC/MCS<wbr>chedule.h<br>
    llvm/trunk/include/llvm/Target<wbr>/TargetSchedule.td<br>
    llvm/trunk/utils/TableGen/Subt<wbr>argetEmitter.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/MC/MCS<wbr>chedule.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCSchedule.h?rev=324582&r1=324581&r2=324582&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/include/llvm/<wbr>MC/MCSchedule.h?rev=324582&r1=<wbr>324581&r2=324582&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/MC/MCS<wbr>chedule.h (original)<br>
+++ llvm/trunk/include/llvm/MC/MCS<wbr>chedule.h Thu Feb  8 00:46:48 2018<br>
@@ -44,6 +44,11 @@ struct MCProcResourceDesc {<br>
   // an out-of-order cpus.<br>
   int BufferSize;<br>
<br>
+  // If the resource has sub-units, a pointer to the first element of an array<br>
+  // of `NumUnits` elements containing the ProcResourceIdx of the sub units.<br>
+  // nullptr if the resource does not have sub-units.<br>
+  const unsigned *SubUnitsIdxBegin;<br>
+<br>
   bool operator==(const MCProcResourceDesc &Other) const {<br>
     return NumUnits == Other.NumUnits && SuperIdx == Other.SuperIdx<br>
       && BufferSize == Other.BufferSize;<br>
<br>
Modified: llvm/trunk/include/llvm/Target<wbr>/TargetSchedule.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetSchedule.td?rev=324582&r1=324581&r2=324582&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/include/llvm/<wbr>Target/TargetSchedule.td?rev=<wbr>324582&r1=324581&r2=324582&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/Target<wbr>/TargetSchedule.td (original)<br>
+++ llvm/trunk/include/llvm/Target<wbr>/TargetSchedule.td Thu Feb  8 00:46:48 2018<br>
@@ -175,8 +175,7 @@ class ProcResourceKind;<br>
 // BufferSize=1.<br>
 //<br>
 // SchedModel ties these units to a processor for any stand-alone defs<br>
-// of this class. Instances of subclass ProcResource will be automatically<br>
-// attached to a processor, so SchedModel is not needed.<br>
+// of this class.<br>
 class ProcResourceUnits<ProcResource<wbr>Kind kind, int num> {<br>
   ProcResourceKind Kind = kind;<br>
   int NumUnits = num;<br>
<br>
Modified: llvm/trunk/utils/TableGen/Subt<wbr>argetEmitter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/SubtargetEmitter.cpp?rev=324582&r1=324581&r2=324582&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/TableGe<wbr>n/SubtargetEmitter.cpp?rev=<wbr>324582&r1=324581&r2=324582&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/TableGen/Subt<wbr>argetEmitter.cpp (original)<br>
+++ llvm/trunk/utils/TableGen/Subt<wbr>argetEmitter.cpp Thu Feb  8 00:46:48 2018<br>
@@ -92,6 +92,8 @@ class SubtargetEmitter {<br>
                          &ProcItinLists);<br>
   void EmitProcessorProp(raw_ostream &OS, const Record *R, StringRef Name,<br>
                          char Separator);<br>
+  void EmitProcessorResourceSubUnits(<wbr>const CodeGenProcModel &ProcModel,<br>
+                                     raw_ostream &OS);<br>
   void EmitProcessorResources(const CodeGenProcModel &ProcModel,<br>
                               raw_ostream &OS);<br>
   Record *FindWriteResources(const CodeGenSchedRW &SchedWrite,<br>
@@ -578,24 +580,52 @@ void SubtargetEmitter::EmitProcesso<wbr>rProp<br>
   OS << '\n';<br>
 }<br>
<br>
+void SubtargetEmitter::EmitProcesso<wbr>rResourceSubUnits(<br>
+    const CodeGenProcModel &ProcModel, raw_ostream &OS) {<br>
+  OS << "\nstatic const unsigned " << ProcModel.ModelName<br>
+     << "ProcResourceSubUnits[] = {\n"<br>
+     << "  0,  // Invalid\n";<br>
+<br>
+  for (unsigned i = 0, e = ProcModel.ProcResourceDefs.siz<wbr>e(); i < e; ++i) {<br>
+    Record *PRDef = ProcModel.ProcResourceDefs[i];<br>
+    if (!PRDef->isSubClassOf("ProcRes<wbr>Group"))<br>
+      continue;<br>
+    RecVec ResUnits = PRDef->getValueAsListOfDefs("R<wbr>esources");<br>
+    for (Record *RUDef : ResUnits) {<br>
+      Record *const RU =<br>
+          SchedModels.findProcResUnits(R<wbr>UDef, ProcModel, PRDef->getLoc());<br>
+      for (unsigned J = 0; J < RU->getValueAsInt("NumUnits"); ++J) {<br>
+        OS << "  " << ProcModel.getProcResourceIdx(R<wbr>U) << ", ";<br>
+      }<br>
+    }<br>
+    OS << "  // " << PRDef->getName() << "\n";<br>
+  }<br>
+  OS << "};\n";<br>
+}<br>
+<br>
 void SubtargetEmitter::EmitProcesso<wbr>rResources(const CodeGenProcModel &ProcModel,<br>
                                               raw_ostream &OS) {<br>
-  OS << "\n// {Name, NumUnits, SuperIdx, IsBuffered}\n";<br>
+  EmitProcessorResourceSubUnits(<wbr>ProcModel, OS);<br>
+<br>
+  OS << "\n// {Name, NumUnits, SuperIdx, IsBuffered, SubUnitsIdxBegin}\n";<br>
   OS << "static const llvm::MCProcResourceDesc "<br>
      << ProcModel.ModelName << "ProcResources" << "[] = {\n"<br>
      << "  {DBGFIELD(\"InvalidUnit\")     0, 0, 0},\n";<br>
<br>
+  unsigned SubUnitsOffset = 1;<br>
   for (unsigned i = 0, e = ProcModel.ProcResourceDefs.siz<wbr>e(); i < e; ++i) {<br>
     Record *PRDef = ProcModel.ProcResourceDefs[i];<br>
<br>
     Record *SuperDef = nullptr;<br>
     unsigned SuperIdx = 0;<br>
     unsigned NumUnits = 0;<br>
+    const unsigned SubUnitsBeginOffset = SubUnitsOffset;<br>
     int BufferSize = PRDef->getValueAsInt("BufferSi<wbr>ze");<br>
     if (PRDef->isSubClassOf("ProcResG<wbr>roup")) {<br>
       RecVec ResUnits = PRDef->getValueAsListOfDefs("R<wbr>esources");<br>
       for (Record *RU : ResUnits) {<br>
         NumUnits += RU->getValueAsInt("NumUnits");<br>
+        SubUnitsOffset += NumUnits;<br>
       }<br>
     }<br>
     else {<br>
@@ -612,8 +642,14 @@ void SubtargetEmitter::EmitProcesso<wbr>rReso<br>
     OS << "  {DBGFIELD(\"" << PRDef->getName() << "\") ";<br>
     if (PRDef->getName().size() < 15)<br>
       OS.indent(15 - PRDef->getName().size());<br>
-    OS << NumUnits << ", " << SuperIdx << ", "<br>
-       << BufferSize << "}, // #" << i+1;<br>
+    OS << NumUnits << ", " << SuperIdx << ", " << BufferSize << ", ";<br>
+    if (SubUnitsBeginOffset != SubUnitsOffset) {<br>
+      OS << ProcModel.ModelName << "ProcResourceSubUnits + "<br>
+         << SubUnitsBeginOffset;<br>
+    } else {<br>
+      OS << "nullptr";<br>
+    }<br>
+    OS << "}, // #" << i+1;<br>
     if (SuperDef)<br>
       OS << ", Super=" << SuperDef->getName();<br>
     OS << "\n";<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div></div>
<br>______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>