diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-07-31 13:00:51 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-07-31 13:00:51 +0000 |
| commit | 0aa28675451a28f87def5fc5938504fe3ebd3df8 (patch) | |
| tree | c1d630d530f5a49b66e74cc1edd0170ba3d42a12 /llvm/utils/TableGen | |
| parent | 2f12e45d5ae1adbc2b45f11191d0db6a0f8352b9 (diff) | |
| download | bcm5719-llvm-0aa28675451a28f87def5fc5938504fe3ebd3df8.tar.gz bcm5719-llvm-0aa28675451a28f87def5fc5938504fe3ebd3df8.zip | |
Revert r338365: [X86] Improved sched models for X86 BT*rr instructions.
https://reviews.llvm.org/D49243
Contains WIP code that should not have been included.
llvm-svn: 338369
Diffstat (limited to 'llvm/utils/TableGen')
| -rw-r--r-- | llvm/utils/TableGen/CodeGenSchedule.cpp | 92 | ||||
| -rw-r--r-- | llvm/utils/TableGen/CodeGenSchedule.h | 2 |
2 files changed, 0 insertions, 94 deletions
diff --git a/llvm/utils/TableGen/CodeGenSchedule.cpp b/llvm/utils/TableGen/CodeGenSchedule.cpp index ebfdd36577a..9331fadf409 100644 --- a/llvm/utils/TableGen/CodeGenSchedule.cpp +++ b/llvm/utils/TableGen/CodeGenSchedule.cpp @@ -21,7 +21,6 @@ #include "llvm/ADT/SmallSet.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Support/Casting.h" -#include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Regex.h" #include "llvm/Support/raw_ostream.h" @@ -34,16 +33,6 @@ using namespace llvm; #define DEBUG_TYPE "subtarget-emitter" -#ifdef EXPENSIVE_CHECKS -// FIXME: TableGen is failed iff EXPENSIVE_CHECKS defined -static constexpr bool OptCheckSchedClasses = true; -#else -// FIXME: the default value should be false -static cl::opt<bool> OptCheckSchedClasses( - "check-sched-class-table", cl::init(true), cl::Hidden, - cl::desc("Check sched class table on different types of inconsistencies")); -#endif - #ifndef NDEBUG static void dumpIdxVec(ArrayRef<unsigned> V) { for (unsigned Idx : V) @@ -234,7 +223,6 @@ CodeGenSchedModels::CodeGenSchedModels(RecordKeeper &RK, collectOptionalProcessorInfo(); checkCompleteness(); - checkSchedClasses(); } void CodeGenSchedModels::collectRetireControlUnits() { @@ -711,86 +699,6 @@ void CodeGenSchedModels::collectSchedClasses() { } } -void CodeGenSchedModels::checkSchedClasses() { - if (!OptCheckSchedClasses) - return; - - std::string str; - raw_string_ostream OS(str); - - // Check each instruction for each model to see if its overridden too often. - // Iff YES it's a candidate for more fine-grained Sched Class. - for (const CodeGenInstruction *Inst : Target.getInstructionsByEnumValue()) { - StringRef InstName = Inst->TheDef->getName(); - unsigned SCIdx = getSchedClassIdx(*Inst); - if (!SCIdx) - continue; - CodeGenSchedClass &SC = getSchedClass(SCIdx); - if (SC.Writes.empty()) - continue; - const RecVec &RWDefs = SchedClasses[SCIdx].InstRWs; - if (RWDefs.empty()) - continue; - // FIXME: what should be threshold here? - if (RWDefs.size() > (ProcModels.size() / 2)) { - // FIXME: this dump hangs the execution !!! - // SC.dump(&Target.getSchedModels()); - OS << "SchedRW machine model for inst '" << InstName << "' ("; - for (auto I : SC.Writes) - OS << " " << SchedWrites[I].Name; - for (auto I : SC.Reads) - OS << " " << SchedReads[I].Name; - OS << " ) should be updated /improvedbecause it's overriden " << RWDefs.size() - << " times out of " << ProcModels.size() << " models:\n\t"; - for (Record *RWDef : RWDefs) - OS << " " << getProcModel(RWDef->getValueAsDef("SchedModel")).ModelName; - PrintWarning(OS.str()); - str.clear(); - } - - // TODO: here we should check latency/uop in SC vs. RWDef. Maybe we - // should do it iff RWDefs.size() == 1 only. - // Iff latency/uop are the same then warn about unnecessary redefine. - if (RWDefs.size()) { - for (Record *RWDef : RWDefs) { - IdxVec Writes; - IdxVec Reads; - findRWs(RWDef->getValueAsListOfDefs("OperandReadWrites"), Writes, - Reads); - - if ((Writes.size() == SC.Writes.size()) && - (Reads.size() == SC.Reads.size())) { - // TODO: do we need sorting Write & Reads? - for (unsigned I = 0, S = SC.Writes.size(); I < S; I++) { - auto SCSchedW = SchedWrites[SC.Writes[I]]; - auto SchedW = SchedWrites[Writes[I]]; - if (!SCSchedW.TheDef || !SchedW.TheDef) - continue; - const RecordVal *R = SCSchedW.TheDef->getValue("Latency"); - // FIXME: We should deal with default Latency here - if (!R || !R->getValue()) - continue; - auto SCLat = SCSchedW.TheDef->getValueAsInt("Latency"); - auto SCuOp = SCSchedW.TheDef->getValueAsInt("NumMicroOps"); - auto Lat = SchedW.TheDef->getValueAsInt("Latency"); - auto uOp = SchedW.TheDef->getValueAsInt("NumMicroOps"); - if ((SCLat == Lat) && (SCuOp == uOp)) - OS << "Overridden verion of inst '" << InstName - << "' has the same latency & uOp values as the original one " - "for model '" - << getProcModel(RWDef->getValueAsDef("SchedModel")).ModelName - << "'\n"; - } - if (!str.empty()) { - PrintWarning(OS.str()); - str.clear(); - } - } - } - } - } -} - // Get the SchedClass index for an instruction. unsigned CodeGenSchedModels::getSchedClassIdx(const CodeGenInstruction &Inst) const { diff --git a/llvm/utils/TableGen/CodeGenSchedule.h b/llvm/utils/TableGen/CodeGenSchedule.h index ce53d67bd81..07c11596ade 100644 --- a/llvm/utils/TableGen/CodeGenSchedule.h +++ b/llvm/utils/TableGen/CodeGenSchedule.h @@ -443,8 +443,6 @@ private: void collectSchedClasses(); - void checkSchedClasses(); - void collectRetireControlUnits(); void collectRegisterFiles(); |

