summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2013-02-01 03:19:54 +0000
committerAndrew Trick <atrick@apple.com>2013-02-01 03:19:54 +0000
commit4fe440d45c2d9effa89b7e3ad7b2e15433230d24 (patch)
tree1ec8198088035edf698ab5ca96a8b5ed5471755d /llvm
parentabb487f57a1929b20e87af1380eb9d964bd0ce1e (diff)
downloadbcm5719-llvm-4fe440d45c2d9effa89b7e3ad7b2e15433230d24.tar.gz
bcm5719-llvm-4fe440d45c2d9effa89b7e3ad7b2e15433230d24.zip
MachineModel: Inconsequential TableGen SubtargetEmitter fix.
Drive by fix. I noticed some missing logic that might bite future users. This shouldn't affect the final output on currently modeled targets. llvm-svn: 174142
Diffstat (limited to 'llvm')
-rw-r--r--llvm/utils/TableGen/CodeGenSchedule.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/llvm/utils/TableGen/CodeGenSchedule.cpp b/llvm/utils/TableGen/CodeGenSchedule.cpp
index c653c49f252..23b79fcddf3 100644
--- a/llvm/utils/TableGen/CodeGenSchedule.cpp
+++ b/llvm/utils/TableGen/CodeGenSchedule.cpp
@@ -1380,8 +1380,22 @@ void CodeGenSchedModels::collectProcResources() {
SCI != SCE; ++SCI) {
if (SCI->ItinClassDef)
collectItinProcResources(SCI->ItinClassDef);
- else
+ else {
+ // This class may have a default ReadWrite list which can be overriden by
+ // InstRW definitions.
+ if (!SCI->InstRWs.empty()) {
+ for (RecIter RWI = SCI->InstRWs.begin(), RWE = SCI->InstRWs.end();
+ RWI != RWE; ++RWI) {
+ Record *RWModelDef = (*RWI)->getValueAsDef("SchedModel");
+ IdxVec ProcIndices(1, getProcModel(RWModelDef).Index);
+ IdxVec Writes, Reads;
+ findRWs((*RWI)->getValueAsListOfDefs("OperandReadWrites"),
+ Writes, Reads);
+ collectRWResources(Writes, Reads, ProcIndices);
+ }
+ }
collectRWResources(SCI->Writes, SCI->Reads, SCI->ProcIndices);
+ }
}
// Add resources separately defined by each subtarget.
RecVec WRDefs = Records.getAllDerivedDefinitions("WriteRes");
OpenPOWER on IntegriCloud