diff options
author | Andrew Trick <atrick@apple.com> | 2012-09-15 00:19:59 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2012-09-15 00:19:59 +0000 |
commit | 5e613c260bb3044eb059dea74cd6bccfa9b85bdd (patch) | |
tree | 711be1c8a44ea361d94af6884331469570bc45be /utils/TableGen/CodeGenSchedule.h | |
parent | 48605c340614fc1fb2ae1d975fc565a4188182e0 (diff) |
TableGen subtarget parser. Handle new machine model.
Infer SchedClasses from variants defined by the target or subtarget.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163952 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/CodeGenSchedule.h')
-rw-r--r-- | utils/TableGen/CodeGenSchedule.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/utils/TableGen/CodeGenSchedule.h b/utils/TableGen/CodeGenSchedule.h index 5e8b711fcb..e9c8359410 100644 --- a/utils/TableGen/CodeGenSchedule.h +++ b/utils/TableGen/CodeGenSchedule.h @@ -83,6 +83,13 @@ struct CodeGenSchedRW { #endif }; +/// Represent a transition between SchedClasses induced by SchedWriteVariant. +struct CodeGenSchedTransition { + unsigned ToClassIdx; + IdxVec ProcIndices; + RecVec PredTerm; +}; + /// Scheduling class. /// /// Each instruction description will be mapped to a scheduling class. There are @@ -116,6 +123,8 @@ struct CodeGenSchedClass { // Sorted list of ProcIdx, where ProcIdx==0 implies any processor. IdxVec ProcIndices; + std::vector<CodeGenSchedTransition> Transitions; + // InstReadWrite records associated with this class. Any Instrs that the // definitions refer to that are not mapped to this class should be ignored. RecVec InstRWs; @@ -308,6 +317,7 @@ public: void findRWs(const RecVec &RWDefs, IdxVec &Writes, IdxVec &Reads) const; void findRWs(const RecVec &RWDefs, IdxVec &RWs, bool IsRead) const; + void expandRWSequence(unsigned RWIdx, IdxVec &RWSeq, bool IsRead) const; unsigned addSchedClass(const IdxVec &OperWrites, const IdxVec &OperReads, const IdxVec &ProcIndices); @@ -337,6 +347,13 @@ private: void collectProcItins(); void collectProcItinRW(); + + void inferSchedClasses(); + + void inferFromRW(const IdxVec &OperWrites, const IdxVec &OperReads, + unsigned FromClassIdx, const IdxVec &ProcIndices); + void inferFromItinClass(Record *ItinClassDef, unsigned FromClassIdx); + void inferFromInstRWs(unsigned SCIdx); }; } // namespace llvm |