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

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 8 10:33:31 PST 2018


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/
> TableGen/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/20180208/9cd57e30/attachment.html>


More information about the llvm-commits mailing list