[llvm] r324582 - [TargetSchedule] Expose sub-units of a ProcResGroup in MCProcResourceDesc.

Clement Courbet via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 9 00:17:47 PST 2018


Yes, thanks for pointing that out.

On Thu, Feb 8, 2018 at 7:33 PM, Craig Topper <craig.topper at gmail.com> wrote:

> Is this responsible for this warning I'm seeing now
>
> lib/Target/X86/X86GenSubtargetInfo.inc:52484:39: warning: missing field
> 'SubUnitsIdxBegin' initializer [-Wmissing-field-initializers]
>   {DBGFIELD("InvalidUnit")     0, 0, 0},
>
> ~Craig
>
> On Thu, Feb 8, 2018 at 12:46 AM, Clement Courbet via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: courbet
>> Date: Thu Feb  8 00:46:48 2018
>> New Revision: 324582
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=324582&view=rev
>> Log:
>> [TargetSchedule] Expose sub-units of a ProcResGroup in MCProcResourceDesc.
>>
>> Summary:
>> Right now using a ProcResource automatically counts as usage of all
>> super ProcResGroups. All this is done during codegen, so there is no
>> way for schedulers to get this information at runtime.
>>
>> This adds the information of which individual ProcRes units are
>> contained in a ProcResGroup in MCProcResourceDesc.
>>
>> Reviewers: gchatelet
>>
>> Subscribers: llvm-commits
>>
>> Differential Revision: https://reviews.llvm.org/D43023
>>
>> Modified:
>>     llvm/trunk/include/llvm/MC/MCSchedule.h
>>     llvm/trunk/include/llvm/Target/TargetSchedule.td
>>     llvm/trunk/utils/TableGen/SubtargetEmitter.cpp
>>
>> Modified: llvm/trunk/include/llvm/MC/MCSchedule.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
>> MC/MCSchedule.h?rev=324582&r1=324581&r2=324582&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/include/llvm/MC/MCSchedule.h (original)
>> +++ llvm/trunk/include/llvm/MC/MCSchedule.h Thu Feb  8 00:46:48 2018
>> @@ -44,6 +44,11 @@ struct MCProcResourceDesc {
>>    // an out-of-order cpus.
>>    int BufferSize;
>>
>> +  // If the resource has sub-units, a pointer to the first element of an
>> array
>> +  // of `NumUnits` elements containing the ProcResourceIdx of the sub
>> units.
>> +  // nullptr if the resource does not have sub-units.
>> +  const unsigned *SubUnitsIdxBegin;
>> +
>>    bool operator==(const MCProcResourceDesc &Other) const {
>>      return NumUnits == Other.NumUnits && SuperIdx == Other.SuperIdx
>>        && BufferSize == Other.BufferSize;
>>
>> Modified: llvm/trunk/include/llvm/Target/TargetSchedule.td
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
>> Target/TargetSchedule.td?rev=324582&r1=324581&r2=324582&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/include/llvm/Target/TargetSchedule.td (original)
>> +++ llvm/trunk/include/llvm/Target/TargetSchedule.td Thu Feb  8 00:46:48
>> 2018
>> @@ -175,8 +175,7 @@ class ProcResourceKind;
>>  // BufferSize=1.
>>  //
>>  // SchedModel ties these units to a processor for any stand-alone defs
>> -// of this class. Instances of subclass ProcResource will be
>> automatically
>> -// attached to a processor, so SchedModel is not needed.
>> +// of this class.
>>  class ProcResourceUnits<ProcResourceKind kind, int num> {
>>    ProcResourceKind Kind = kind;
>>    int NumUnits = num;
>>
>> Modified: llvm/trunk/utils/TableGen/SubtargetEmitter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGe
>> n/SubtargetEmitter.cpp?rev=324582&r1=324581&r2=324582&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/utils/TableGen/SubtargetEmitter.cpp (original)
>> +++ llvm/trunk/utils/TableGen/SubtargetEmitter.cpp Thu Feb  8 00:46:48
>> 2018
>> @@ -92,6 +92,8 @@ class SubtargetEmitter {
>>                           &ProcItinLists);
>>    void EmitProcessorProp(raw_ostream &OS, const Record *R, StringRef
>> Name,
>>                           char Separator);
>> +  void EmitProcessorResourceSubUnits(const CodeGenProcModel &ProcModel,
>> +                                     raw_ostream &OS);
>>    void EmitProcessorResources(const CodeGenProcModel &ProcModel,
>>                                raw_ostream &OS);
>>    Record *FindWriteResources(const CodeGenSchedRW &SchedWrite,
>> @@ -578,24 +580,52 @@ void SubtargetEmitter::EmitProcessorProp
>>    OS << '\n';
>>  }
>>
>> +void SubtargetEmitter::EmitProcessorResourceSubUnits(
>> +    const CodeGenProcModel &ProcModel, raw_ostream &OS) {
>> +  OS << "\nstatic const unsigned " << ProcModel.ModelName
>> +     << "ProcResourceSubUnits[] = {\n"
>> +     << "  0,  // Invalid\n";
>> +
>> +  for (unsigned i = 0, e = ProcModel.ProcResourceDefs.size(); i < e;
>> ++i) {
>> +    Record *PRDef = ProcModel.ProcResourceDefs[i];
>> +    if (!PRDef->isSubClassOf("ProcResGroup"))
>> +      continue;
>> +    RecVec ResUnits = PRDef->getValueAsListOfDefs("Resources");
>> +    for (Record *RUDef : ResUnits) {
>> +      Record *const RU =
>> +          SchedModels.findProcResUnits(RUDef, ProcModel,
>> PRDef->getLoc());
>> +      for (unsigned J = 0; J < RU->getValueAsInt("NumUnits"); ++J) {
>> +        OS << "  " << ProcModel.getProcResourceIdx(RU) << ", ";
>> +      }
>> +    }
>> +    OS << "  // " << PRDef->getName() << "\n";
>> +  }
>> +  OS << "};\n";
>> +}
>> +
>>  void SubtargetEmitter::EmitProcessorResources(const CodeGenProcModel
>> &ProcModel,
>>                                                raw_ostream &OS) {
>> -  OS << "\n// {Name, NumUnits, SuperIdx, IsBuffered}\n";
>> +  EmitProcessorResourceSubUnits(ProcModel, OS);
>> +
>> +  OS << "\n// {Name, NumUnits, SuperIdx, IsBuffered,
>> SubUnitsIdxBegin}\n";
>>    OS << "static const llvm::MCProcResourceDesc "
>>       << ProcModel.ModelName << "ProcResources" << "[] = {\n"
>>       << "  {DBGFIELD(\"InvalidUnit\")     0, 0, 0},\n";
>>
>> +  unsigned SubUnitsOffset = 1;
>>    for (unsigned i = 0, e = ProcModel.ProcResourceDefs.size(); i < e;
>> ++i) {
>>      Record *PRDef = ProcModel.ProcResourceDefs[i];
>>
>>      Record *SuperDef = nullptr;
>>      unsigned SuperIdx = 0;
>>      unsigned NumUnits = 0;
>> +    const unsigned SubUnitsBeginOffset = SubUnitsOffset;
>>      int BufferSize = PRDef->getValueAsInt("BufferSize");
>>      if (PRDef->isSubClassOf("ProcResGroup")) {
>>        RecVec ResUnits = PRDef->getValueAsListOfDefs("Resources");
>>        for (Record *RU : ResUnits) {
>>          NumUnits += RU->getValueAsInt("NumUnits");
>> +        SubUnitsOffset += NumUnits;
>>        }
>>      }
>>      else {
>> @@ -612,8 +642,14 @@ void SubtargetEmitter::EmitProcessorReso
>>      OS << "  {DBGFIELD(\"" << PRDef->getName() << "\") ";
>>      if (PRDef->getName().size() < 15)
>>        OS.indent(15 - PRDef->getName().size());
>> -    OS << NumUnits << ", " << SuperIdx << ", "
>> -       << BufferSize << "}, // #" << i+1;
>> +    OS << NumUnits << ", " << SuperIdx << ", " << BufferSize << ", ";
>> +    if (SubUnitsBeginOffset != SubUnitsOffset) {
>> +      OS << ProcModel.ModelName << "ProcResourceSubUnits + "
>> +         << SubUnitsBeginOffset;
>> +    } else {
>> +      OS << "nullptr";
>> +    }
>> +    OS << "}, // #" << i+1;
>>      if (SuperDef)
>>        OS << ", Super=" << SuperDef->getName();
>>      OS << "\n";
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180209/49bb590d/attachment.html>


More information about the llvm-commits mailing list