Skip to content

Commit

Permalink
[Tblgen][MCA] Add the ability to mark groups as LoadQueue and StoreQu…
Browse files Browse the repository at this point in the history
…eue. NFCI

Before this patch, users were not allowed to optionally mark processor resource
groups as load/store queues. That is because tablegen class MemoryQueue was
originally declared as expecting a ProcResource template argument (instead of a
more generic ProcResourceKind).

That was an oversight, since the original intention from D54957 was to let user
mark any processor resource as either load/store queue.  This patch adds the
ability to use processor resource groups in MemoryQueue definitions. This is not
a user visible change.

Differential Revision: https://reviews.llvm.org/D66810

llvm-svn: 370091
  • Loading branch information
Andrea Di Biagio authored and Andrea Di Biagio committed Aug 27, 2019
1 parent 2d24735 commit 2f51a43
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
8 changes: 4 additions & 4 deletions llvm/include/llvm/Target/TargetSchedule.td
Expand Up @@ -563,10 +563,10 @@ class RetireControlUnit<int bufferSize, int retirePerCycle> {

// Base class for Load/StoreQueue. It is used to identify processor resources
// which describe load/store queues in the LS unit.
class MemoryQueue<ProcResource PR> {
ProcResource QueueDescriptor = PR;
class MemoryQueue<ProcResourceKind PR> {
ProcResourceKind QueueDescriptor = PR;
SchedMachineModel SchedModel = ?;
}

class LoadQueue<ProcResource LDQueue> : MemoryQueue<LDQueue>;
class StoreQueue<ProcResource STQueue> : MemoryQueue<STQueue>;
class LoadQueue<ProcResourceKind LDQueue> : MemoryQueue<LDQueue>;
class StoreQueue<ProcResourceKind STQueue> : MemoryQueue<STQueue>;
4 changes: 2 additions & 2 deletions llvm/lib/MCA/HardwareUnits/LSUnit.cpp
Expand Up @@ -29,12 +29,12 @@ LSUnitBase::LSUnitBase(const MCSchedModel &SM, unsigned LQ, unsigned SQ,
const MCExtraProcessorInfo &EPI = SM.getExtraProcessorInfo();
if (!LQSize && EPI.LoadQueueID) {
const MCProcResourceDesc &LdQDesc = *SM.getProcResource(EPI.LoadQueueID);
LQSize = LdQDesc.BufferSize;
LQSize = std::max(0, LdQDesc.BufferSize);
}

if (!SQSize && EPI.StoreQueueID) {
const MCProcResourceDesc &StQDesc = *SM.getProcResource(EPI.StoreQueueID);
SQSize = StQDesc.BufferSize;
SQSize = std::max(0, StQDesc.BufferSize);
}
}
}
Expand Down

0 comments on commit 2f51a43

Please sign in to comment.