diff options
Diffstat (limited to 'llvm/utils/TableGen/CodeGenSchedule.h')
| -rw-r--r-- | llvm/utils/TableGen/CodeGenSchedule.h | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/utils/TableGen/CodeGenSchedule.h b/llvm/utils/TableGen/CodeGenSchedule.h index c487d142d46c..9020447c940b 100644 --- a/llvm/utils/TableGen/CodeGenSchedule.h +++ b/llvm/utils/TableGen/CodeGenSchedule.h @@ -16,10 +16,12 @@ #include "llvm/ADT/APInt.h" #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringMap.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/TableGen/Record.h" #include "llvm/TableGen/SetTheory.h" +#include <map> namespace llvm { @@ -94,7 +96,7 @@ struct CodeGenSchedRW { /// Represent a transition between SchedClasses induced by SchedVariant. struct CodeGenSchedTransition { unsigned ToClassIdx; - IdxVec ProcIndices; + unsigned ProcIndex; RecVec PredTerm; }; @@ -139,6 +141,8 @@ struct CodeGenSchedClass { // Instructions should be ignored by this class because they have been split // off to join another inferred class. RecVec InstRWs; + // InstRWs processor indices. Filled in inferFromInstRWs + DenseSet<unsigned> InstRWProcIndices; CodeGenSchedClass(unsigned Index, std::string Name, Record *ItinClassDef) : Index(Index), Name(std::move(Name)), ItinClassDef(ItinClassDef) {} @@ -358,8 +362,7 @@ public: OpcodeGroup(OpcodeGroup &&Other) = default; void addOpcode(const Record *Opcode) { - assert(std::find(Opcodes.begin(), Opcodes.end(), Opcode) == Opcodes.end() && - "Opcode already in set!"); + assert(!llvm::is_contained(Opcodes, Opcode) && "Opcode already in set!"); Opcodes.push_back(Opcode); } @@ -407,6 +410,8 @@ public: ArrayRef<OpcodeGroup> getGroups() const { return Groups; } }; +using ProcModelMapTy = DenseMap<const Record *, unsigned>; + /// Top level container for machine model data. class CodeGenSchedModels { RecordKeeper &Records; @@ -419,7 +424,6 @@ class CodeGenSchedModels { std::vector<CodeGenProcModel> ProcModels; // Map Processor's MachineModel or ProcItin to a CodeGenProcModel index. - using ProcModelMapTy = DenseMap<Record*, unsigned>; ProcModelMapTy ProcModelMap; // Per-operand SchedReadWrite types. @@ -441,6 +445,7 @@ class CodeGenSchedModels { InstClassMapTy InstrClassMap; std::vector<STIPredicateFunction> STIPredicates; + std::vector<unsigned> getAllProcIndices() const; public: CodeGenSchedModels(RecordKeeper& RK, const CodeGenTarget &TGT); |
