Lines Matching refs:OS
72 void Enumeration(raw_ostream &OS);
73 unsigned FeatureKeyValues(raw_ostream &OS);
74 unsigned CPUKeyValues(raw_ostream &OS);
83 void EmitStageAndOperandCycleData(raw_ostream &OS,
86 void EmitItineraries(raw_ostream &OS,
89 void EmitProcessorProp(raw_ostream &OS, const Record *R, const char *Name,
92 raw_ostream &OS);
101 void EmitSchedClassTables(SchedClassTables &SchedTables, raw_ostream &OS);
102 void EmitProcessorModels(raw_ostream &OS);
103 void EmitProcessorLookup(raw_ostream &OS);
104 void EmitSchedModelHelpers(const std::string &ClassName, raw_ostream &OS);
105 void EmitSchedModel(raw_ostream &OS);
106 void ParseFeaturesFunction(raw_ostream &OS, unsigned NumFeatures,
121 void SubtargetEmitter::Enumeration(raw_ostream &OS) { in Enumeration() argument
133 OS << "namespace " << Target << " {\n"; in Enumeration()
136 OS << "enum {\n"; in Enumeration()
144 OS << " " << Def->getName() << " = " << i; in Enumeration()
145 if (++i < N) OS << ","; in Enumeration()
147 OS << "\n"; in Enumeration()
151 OS << "};\n"; in Enumeration()
152 OS << "} // end namespace " << Target << "\n"; in Enumeration()
159 unsigned SubtargetEmitter::FeatureKeyValues(raw_ostream &OS) { in FeatureKeyValues() argument
170 OS << "// Sorted (by key) array of values for CPU features.\n" in FeatureKeyValues()
187 OS << " { " in FeatureKeyValues()
195 OS << "{"; in FeatureKeyValues()
197 OS << " " << Target << "::" << ImpliesList[j]->getName(); in FeatureKeyValues()
198 if (++j < M) OS << ","; in FeatureKeyValues()
200 OS << " }"; in FeatureKeyValues()
202 OS << " }"; in FeatureKeyValues()
206 if ((i + 1) < N) OS << ","; in FeatureKeyValues()
208 OS << "\n"; in FeatureKeyValues()
212 OS << "};\n"; in FeatureKeyValues()
221 unsigned SubtargetEmitter::CPUKeyValues(raw_ostream &OS) { in CPUKeyValues() argument
228 OS << "// Sorted (by key) array of values for CPU subtype.\n" in CPUKeyValues()
242 OS << " { " in CPUKeyValues()
246 OS << "{"; in CPUKeyValues()
248 OS << " " << Target << "::" << FeatureList[j]->getName(); in CPUKeyValues()
249 if (++j < M) OS << ","; in CPUKeyValues()
251 OS << " }"; in CPUKeyValues()
254 OS << ", { } }"; in CPUKeyValues()
257 if (++i < N) OS << ","; in CPUKeyValues()
259 OS << "\n"; in CPUKeyValues()
263 OS << "};\n"; in CPUKeyValues()
359 EmitStageAndOperandCycleData(raw_ostream &OS, in EmitStageAndOperandCycleData() argument
377 OS << "\n// Functional units for \"" << Name << "\"\n" in EmitStageAndOperandCycleData()
381 OS << " const unsigned " << FUs[j]->getName() in EmitStageAndOperandCycleData()
384 OS << "} // end namespace " << Name << "FU\n"; in EmitStageAndOperandCycleData()
388 OS << "\n// Pipeline forwarding pathes for itineraries \"" << Name in EmitStageAndOperandCycleData()
391 OS << " const unsigned NoBypass = 0;\n"; in EmitStageAndOperandCycleData()
393 OS << " const unsigned " << BPs[j]->getName() in EmitStageAndOperandCycleData()
396 OS << "} // end namespace " << Name << "Bypass\n"; in EmitStageAndOperandCycleData()
520 OS << StageTable; in EmitStageAndOperandCycleData()
521 OS << OperandCycleTable; in EmitStageAndOperandCycleData()
522 OS << BypassTable; in EmitStageAndOperandCycleData()
532 EmitItineraries(raw_ostream &OS, in EmitItineraries() argument
560 OS << "\n"; in EmitItineraries()
561 OS << "static const llvm::InstrItinerary "; in EmitItineraries()
564 OS << Name << "[] = {\n"; in EmitItineraries()
572 OS << " { " << in EmitItineraries()
581 OS << " { 0, ~0U, ~0U, ~0U, ~0U } // end marker\n"; in EmitItineraries()
582 OS << "};\n"; in EmitItineraries()
589 void SubtargetEmitter::EmitProcessorProp(raw_ostream &OS, const Record *R, in EmitProcessorProp() argument
591 OS << " "; in EmitProcessorProp()
594 OS << V << Separator << " // " << Name; in EmitProcessorProp()
596 OS << "MCSchedModel::Default" << Name << Separator; in EmitProcessorProp()
597 OS << '\n'; in EmitProcessorProp()
601 raw_ostream &OS) { in EmitProcessorResources() argument
604 OS << "\n// {Name, NumUnits, SuperIdx, IsBuffered}\n"; in EmitProcessorResources()
605 OS << "static const llvm::MCProcResourceDesc " in EmitProcessorResources()
634 OS << " {DBGFIELD(\"" << PRDef->getName() << "\") "; in EmitProcessorResources()
636 OS.indent(15 - PRDef->getName().size()); in EmitProcessorResources()
637 OS << NumUnits << ", " << SuperIdx << ", " in EmitProcessorResources()
640 OS << ", Super=" << SuperDef->getName(); in EmitProcessorResources()
641 OS << "\n"; in EmitProcessorResources()
643 OS << "};\n"; in EmitProcessorResources()
1054 raw_ostream &OS) { in EmitSchedClassTables() argument
1056 OS << "\n// {ProcResourceIdx, Cycles}\n" in EmitSchedClassTables()
1063 OS << " {" << format("%2d", WPREntry.ProcResourceIdx) << ", " in EmitSchedClassTables()
1066 OS << ','; in EmitSchedClassTables()
1067 OS << " // #" << WPRIdx << '\n'; in EmitSchedClassTables()
1069 OS << "}; // " << Target << "WriteProcResTable\n"; in EmitSchedClassTables()
1072 OS << "\n// {Cycles, WriteResourceID}\n" in EmitSchedClassTables()
1079 OS << " {" << format("%2d", WLEntry.Cycles) << ", " in EmitSchedClassTables()
1082 OS << ','; in EmitSchedClassTables()
1083 OS << " // #" << WLIdx << " " << SchedTables.WriterNames[WLIdx] << '\n'; in EmitSchedClassTables()
1085 OS << "}; // " << Target << "WriteLatencyTable\n"; in EmitSchedClassTables()
1088 OS << "\n// {UseIdx, WriteResourceID, Cycles}\n" in EmitSchedClassTables()
1095 OS << " {" << RAEntry.UseIdx << ", " in EmitSchedClassTables()
1099 OS << ','; in EmitSchedClassTables()
1100 OS << " // #" << RAIdx << '\n'; in EmitSchedClassTables()
1102 OS << "}; // " << Target << "ReadAdvanceTable\n"; in EmitSchedClassTables()
1113 OS << "\n// {Name, NumMicroOps, BeginGroup, EndGroup," in EmitSchedClassTables()
1115 OS << "static const llvm::MCSchedClassDesc " in EmitSchedClassTables()
1122 OS << " {DBGFIELD(\"InvalidSchedClass\") " in EmitSchedClassTables()
1129 OS << " {DBGFIELD(\"" << SchedClass.Name << "\") "; in EmitSchedClassTables()
1131 OS.indent(18 - SchedClass.Name.size()); in EmitSchedClassTables()
1132 OS << MCDesc.NumMicroOps in EmitSchedClassTables()
1142 OS << ','; in EmitSchedClassTables()
1143 OS << " // #" << SCIdx << '\n'; in EmitSchedClassTables()
1145 OS << "}; // " << PI->ModelName << "SchedClasses\n"; in EmitSchedClassTables()
1149 void SubtargetEmitter::EmitProcessorModels(raw_ostream &OS) { in EmitProcessorModels() argument
1154 EmitProcessorResources(PM, OS); in EmitProcessorModels()
1160 OS << "\n"; in EmitProcessorModels()
1161 OS << "static const llvm::MCSchedModel " << PM.ModelName << " = {\n"; in EmitProcessorModels()
1162 EmitProcessorProp(OS, PM.ModelDef, "IssueWidth", ','); in EmitProcessorModels()
1163 EmitProcessorProp(OS, PM.ModelDef, "MicroOpBufferSize", ','); in EmitProcessorModels()
1164 EmitProcessorProp(OS, PM.ModelDef, "LoopMicroOpBufferSize", ','); in EmitProcessorModels()
1165 EmitProcessorProp(OS, PM.ModelDef, "LoadLatency", ','); in EmitProcessorModels()
1166 EmitProcessorProp(OS, PM.ModelDef, "HighLatency", ','); in EmitProcessorModels()
1167 EmitProcessorProp(OS, PM.ModelDef, "MispredictPenalty", ','); in EmitProcessorModels()
1172 OS << " " << (PostRAScheduler ? "true" : "false") << ", // " in EmitProcessorModels()
1178 OS << " " << (CompleteModel ? "true" : "false") << ", // " in EmitProcessorModels()
1181 OS << " " << PM.Index << ", // Processor ID\n"; in EmitProcessorModels()
1183 OS << " " << PM.ModelName << "ProcResources" << ",\n" in EmitProcessorModels()
1189 OS << " nullptr, nullptr, 0, 0," in EmitProcessorModels()
1192 OS << " " << PM.ItinsDef->getName() << "};\n"; in EmitProcessorModels()
1194 OS << " nullptr}; // No Itinerary\n"; in EmitProcessorModels()
1201 void SubtargetEmitter::EmitProcessorLookup(raw_ostream &OS) { in EmitProcessorLookup() argument
1208 OS << "\n"; in EmitProcessorLookup()
1209 OS << "// Sorted (by key) array of itineraries for CPU subtype.\n" in EmitProcessorLookup()
1223 OS << " { \"" << Name << "\", (const void *)&" << ProcModelName << " }"; in EmitProcessorLookup()
1226 if (++i < N) OS << ","; in EmitProcessorLookup()
1228 OS << "\n"; in EmitProcessorLookup()
1232 OS << "};\n"; in EmitProcessorLookup()
1238 void SubtargetEmitter::EmitSchedModel(raw_ostream &OS) { in EmitSchedModel() argument
1239 OS << "#ifdef DBGFIELD\n" in EmitSchedModel()
1251 EmitStageAndOperandCycleData(OS, ProcItinLists); in EmitSchedModel()
1252 EmitItineraries(OS, ProcItinLists); in EmitSchedModel()
1254 OS << "\n// ===============================================================\n" in EmitSchedModel()
1261 EmitSchedClassTables(SchedTables, OS); in EmitSchedModel()
1264 EmitProcessorModels(OS); in EmitSchedModel()
1266 EmitProcessorLookup(OS); in EmitSchedModel()
1268 OS << "#undef DBGFIELD"; in EmitSchedModel()
1272 raw_ostream &OS) { in EmitSchedModelHelpers() argument
1273 OS << "unsigned " << ClassName in EmitSchedModelHelpers()
1280 OS << P->getValueAsString("Code") << '\n'; in EmitSchedModelHelpers()
1289 OS << " switch (SchedClass) {\n"; in EmitSchedModelHelpers()
1292 OS << " case " << VC << ": // " << SC.Name << '\n'; in EmitSchedModelHelpers()
1302 OS << " "; in EmitSchedModelHelpers()
1304 OS << "if (SchedModel->getProcessorID() == " << PI << ") "; in EmitSchedModelHelpers()
1305 OS << "{ // " << (SchedModels.procModelBegin() + PI)->ModelName in EmitSchedModelHelpers()
1312 OS << " if ("; in EmitSchedModelHelpers()
1316 OS << "\n && "; in EmitSchedModelHelpers()
1317 OS << "(" << (*RI)->getValueAsString("Predicate") << ")"; in EmitSchedModelHelpers()
1319 OS << ")\n" in EmitSchedModelHelpers()
1323 OS << " }\n"; in EmitSchedModelHelpers()
1328 OS << " return " << SC.Index << ";\n"; in EmitSchedModelHelpers()
1329 OS << " break;\n"; in EmitSchedModelHelpers()
1331 OS << " };\n"; in EmitSchedModelHelpers()
1333 OS << " report_fatal_error(\"Expected a variant SchedClass\");\n" in EmitSchedModelHelpers()
1341 void SubtargetEmitter::ParseFeaturesFunction(raw_ostream &OS, in ParseFeaturesFunction() argument
1348 OS << "// ParseSubtargetFeatures - Parses features string setting specified\n" in ParseFeaturesFunction()
1351 OS << Target; in ParseFeaturesFunction()
1352 OS << "Subtarget::ParseSubtargetFeatures(StringRef CPU, StringRef FS) {\n" in ParseFeaturesFunction()
1357 OS << "}\n"; in ParseFeaturesFunction()
1361 OS << " InitMCProcessorInfo(CPU, FS);\n" in ParseFeaturesFunction()
1371 OS << " if (Bits[" << Target << "::" in ParseFeaturesFunction()
1375 OS << " if (Bits[" << Target << "::" in ParseFeaturesFunction()
1381 OS << "}\n"; in ParseFeaturesFunction()
1387 void SubtargetEmitter::run(raw_ostream &OS) { in run() argument
1388 emitSourceFileHeader("Subtarget Enumeration Source Fragment", OS); in run()
1390 OS << "\n#ifdef GET_SUBTARGETINFO_ENUM\n"; in run()
1391 OS << "#undef GET_SUBTARGETINFO_ENUM\n\n"; in run()
1393 OS << "namespace llvm {\n"; in run()
1394 Enumeration(OS); in run()
1395 OS << "} // end namespace llvm\n\n"; in run()
1396 OS << "#endif // GET_SUBTARGETINFO_ENUM\n\n"; in run()
1398 OS << "\n#ifdef GET_SUBTARGETINFO_MC_DESC\n"; in run()
1399 OS << "#undef GET_SUBTARGETINFO_MC_DESC\n\n"; in run()
1401 OS << "namespace llvm {\n"; in run()
1403 OS << "namespace {\n"; in run()
1405 unsigned NumFeatures = FeatureKeyValues(OS); in run()
1406 OS << "\n"; in run()
1407 unsigned NumProcs = CPUKeyValues(OS); in run()
1408 OS << "\n"; in run()
1409 EmitSchedModel(OS); in run()
1410 OS << "\n"; in run()
1412 OS << "} // end anonymous namespace\n\n"; in run()
1416 OS << "static inline MCSubtargetInfo *create" << Target in run()
1419 OS << " return new MCSubtargetInfo(TT, CPU, FS, "; in run()
1421 OS << Target << "FeatureKV, "; in run()
1423 OS << "None, "; in run()
1425 OS << Target << "SubTypeKV, "; in run()
1427 OS << "None, "; in run()
1428 OS << '\n'; OS.indent(22); in run()
1429 OS << Target << "ProcSchedKV, " in run()
1434 OS << '\n'; OS.indent(22); in run()
1435 OS << Target << "Stages, " in run()
1439 OS << "0, 0, 0"; in run()
1440 OS << ");\n}\n\n"; in run()
1442 OS << "} // end namespace llvm\n\n"; in run()
1444 OS << "#endif // GET_SUBTARGETINFO_MC_DESC\n\n"; in run()
1446 OS << "\n#ifdef GET_SUBTARGETINFO_TARGET_DESC\n"; in run()
1447 OS << "#undef GET_SUBTARGETINFO_TARGET_DESC\n\n"; in run()
1449 OS << "#include \"llvm/Support/Debug.h\"\n"; in run()
1450 OS << "#include \"llvm/Support/raw_ostream.h\"\n\n"; in run()
1451 ParseFeaturesFunction(OS, NumFeatures, NumProcs); in run()
1453 OS << "#endif // GET_SUBTARGETINFO_TARGET_DESC\n\n"; in run()
1456 OS << "\n#ifdef GET_SUBTARGETINFO_HEADER\n"; in run()
1457 OS << "#undef GET_SUBTARGETINFO_HEADER\n\n"; in run()
1460 OS << "namespace llvm {\n"; in run()
1461 OS << "class DFAPacketizer;\n"; in run()
1462 OS << "struct " << ClassName << " : public TargetSubtargetInfo {\n" in run()
1472 OS << "} // end namespace llvm\n\n"; in run()
1474 OS << "#endif // GET_SUBTARGETINFO_HEADER\n\n"; in run()
1476 OS << "\n#ifdef GET_SUBTARGETINFO_CTOR\n"; in run()
1477 OS << "#undef GET_SUBTARGETINFO_CTOR\n\n"; in run()
1479 OS << "#include \"llvm/CodeGen/TargetSchedule.h\"\n\n"; in run()
1480 OS << "namespace llvm {\n"; in run()
1481 OS << "extern const llvm::SubtargetFeatureKV " << Target << "FeatureKV[];\n"; in run()
1482 OS << "extern const llvm::SubtargetFeatureKV " << Target << "SubTypeKV[];\n"; in run()
1483 OS << "extern const llvm::SubtargetInfoKV " << Target << "ProcSchedKV[];\n"; in run()
1484 OS << "extern const llvm::MCWriteProcResEntry " in run()
1486 OS << "extern const llvm::MCWriteLatencyEntry " in run()
1488 OS << "extern const llvm::MCReadAdvanceEntry " in run()
1492 OS << "extern const llvm::InstrStage " << Target << "Stages[];\n"; in run()
1493 OS << "extern const unsigned " << Target << "OperandCycles[];\n"; in run()
1494 OS << "extern const unsigned " << Target << "ForwardingPaths[];\n"; in run()
1497 OS << ClassName << "::" << ClassName << "(const Triple &TT, StringRef CPU, " in run()
1501 OS << "makeArrayRef(" << Target << "FeatureKV, " << NumFeatures << "), "; in run()
1503 OS << "None, "; in run()
1505 OS << "makeArrayRef(" << Target << "SubTypeKV, " << NumProcs << "), "; in run()
1507 OS << "None, "; in run()
1508 OS << '\n'; OS.indent(24); in run()
1509 OS << Target << "ProcSchedKV, " in run()
1513 OS << '\n'; OS.indent(24); in run()
1515 OS << Target << "Stages, " in run()
1519 OS << "0, 0, 0"; in run()
1520 OS << ") {}\n\n"; in run()
1522 EmitSchedModelHelpers(ClassName, OS); in run()
1524 OS << "} // end namespace llvm\n\n"; in run()
1526 OS << "#endif // GET_SUBTARGETINFO_CTOR\n\n"; in run()
1531 void EmitSubtarget(RecordKeeper &RK, raw_ostream &OS) { in EmitSubtarget() argument
1533 SubtargetEmitter(RK, CGTarget).run(OS); in EmitSubtarget()