[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