Lines Matching full:os
170 unsigned StartIdx, raw_ostream &OS);
172 unsigned SizeMatcherList(Matcher *N, raw_ostream &OS);
174 void EmitPredicateFunctions(raw_ostream &OS);
176 void EmitHistogram(const Matcher *N, raw_ostream &OS);
178 void EmitPatternMatchTable(raw_ostream &OS);
182 StringRef Decl, raw_ostream &OS);
184 unsigned SizeMatcher(Matcher *N, raw_ostream &OS);
187 unsigned CurrentIdx, raw_ostream &OS);
238 static unsigned EmitVBRValue(uint64_t Val, raw_ostream &OS) {
240 OS << Val << ", ";
247 OS << (Val & 127) << "|128,";
251 OS << Val;
253 OS << "/*" << InVal << "*/";
254 OS << ", ";
261 static unsigned EmitSignedVBRValue(uint64_t Val, raw_ostream &OS) {
267 return EmitVBRValue(Val, OS);
292 unsigned MatcherTableEmitter::SizeMatcherList(Matcher *N, raw_ostream &OS) {
295 Size += SizeMatcher(N, OS);
304 unsigned MatcherTableEmitter::SizeMatcher(Matcher *N, raw_ostream &OS) {
316 const unsigned ChildSize = SizeMatcherList(SM->getChild(i), OS);
344 const unsigned ChildSize = SizeMatcherList(Child, OS);
355 return EmitMatcher(N, 0, Idx, OS);
360 static void BeginEmitFunction(raw_ostream &OS, StringRef RetType,
362 OS << "#ifdef GET_DAGISEL_DECL\n";
363 OS << RetType << ' ' << Decl;
365 OS << " override";
366 OS << ";\n"
369 OS << RetType << " DAGISEL_CLASS_COLONCOLON " << Decl << "\n";
371 OS << "#if DAGISEL_INLINE\n"
377 static void EndEmitFunction(raw_ostream &OS) {
378 OS << "#endif // GET_DAGISEL_BODY\n\n";
381 void MatcherTableEmitter::EmitPatternMatchTable(raw_ostream &OS) {
388 BeginEmitFunction(OS, "StringRef", "getPatternForIndex(unsigned Index)",
390 OS << "{\n";
391 OS << "static const char *PATTERN_MATCH_TABLE[] = {\n";
394 OS << "\"" << It.first << "\",\n";
397 OS << "\n};";
398 OS << "\nreturn StringRef(PATTERN_MATCH_TABLE[Index]);";
399 OS << "\n}\n";
400 EndEmitFunction(OS);
402 BeginEmitFunction(OS, "StringRef", "getIncludePathForIndex(unsigned Index)",
404 OS << "{\n";
405 OS << "static const char *INCLUDE_PATH_TABLE[] = {\n";
408 OS << "\"" << It << "\",\n";
411 OS << "\n};";
412 OS << "\nreturn StringRef(INCLUDE_PATH_TABLE[Index]);";
413 OS << "\n}\n";
414 EndEmitFunction(OS);
422 raw_ostream &OS) {
423 OS.indent(Indent);
433 OS << "OPC_Scope, ";
437 OS << "/*" << format_decimal(CurrentIdx, IndexWidth) << "*/";
438 OS.indent(Indent) << "/*Scope*/ ";
440 OS.indent(Indent);
444 unsigned VBRSize = EmitVBRValue(ChildSize, OS);
446 OS << "/*->" << CurrentIdx + VBRSize + ChildSize << "*/";
448 OS << " // " << SM->getNumChildren() << " children in Scope";
450 OS << '\n';
453 CurrentIdx + VBRSize, OS);
461 OS << "/*" << format_decimal(CurrentIdx, IndexWidth) << "*/";
462 OS.indent(Indent) << "0, ";
464 OS << "/*End of Scope*/";
465 OS << '\n';
470 OS << "OPC_RecordNode,";
472 OS << " // #" << cast<RecordMatcher>(N)->getResultNo() << " = "
474 OS << '\n';
478 OS << "OPC_RecordChild" << cast<RecordChildMatcher>(N)->getChildNo() << ',';
480 OS << " // #" << cast<RecordChildMatcher>(N)->getResultNo() << " = "
482 OS << '\n';
486 OS << "OPC_RecordMemRef,\n";
490 OS << "OPC_CaptureGlueInput,\n";
496 OS << "OPC_MoveChild";
499 OS << ", ";
500 OS << MCM->getChildNo() << ",\n";
507 OS << "OPC_MoveSibling";
510 OS << ", ";
511 OS << MSM->getSiblingNo() << ",\n";
516 OS << "OPC_MoveParent,\n";
520 OS << "OPC_CheckSame, " << cast<CheckSameMatcher>(N)->getMatchNumber()
525 OS << "OPC_CheckChild" << cast<CheckChildSameMatcher>(N)->getChildNo()
533 OS << "OPC_CheckPatternPredicateTwoByte, TARGET_VAL(" << PredNo << "),";
535 OS << "OPC_CheckPatternPredicate" << PredNo << ',';
537 OS << "OPC_CheckPatternPredicate, " << PredNo << ',';
539 OS << " // " << Pred;
540 OS << '\n';
550 OS << "OPC_CheckPredicateWithOperands, " << NumOps << "/*#Ops*/, ";
552 OS << cast<CheckPredicateMatcher>(N)->getOperandNo(i) << ", ";
557 OS << "OPC_CheckPredicate" << PredNo << ", ";
559 OS << "OPC_CheckPredicate, ";
563 OS << PredNo << ',';
565 OS << " // " << Pred.getFnName();
566 OS << '\n';
571 OS << "OPC_CheckOpcode, TARGET_VAL("
581 OS << "OPC_SwitchOpcode ";
584 OS << "OPC_SwitchType ";
589 OS << "/*" << NumCases << " cases */";
590 OS << ", ";
607 OS << "/*" << format_decimal(CurrentIdx, IndexWidth) << "*/";
608 OS.indent(Indent);
610 OS << (isa<SwitchOpcodeMatcher>(N) ? "/*SwitchOpcode*/ "
615 CurrentIdx += EmitVBRValue(ChildSize, OS) + IdxSize;
617 OS << "TARGET_VAL(" << SOM->getCaseOpcode(i).getEnumName() << "),";
619 OS << getEnumName(cast<SwitchTypeMatcher>(N)->getCaseType(i)) << ',';
621 OS << "// ->" << CurrentIdx + ChildSize;
622 OS << '\n';
624 ChildSize = EmitMatcherList(Child, Indent + 1, CurrentIdx, OS);
632 OS << "/*" << format_decimal(CurrentIdx, IndexWidth) << "*/";
633 OS.indent(Indent) << "0,";
635 OS << (isa<SwitchOpcodeMatcher>(N) ? " // EndSwitchOpcode"
638 OS << '\n';
648 OS << "OPC_CheckTypeI" << MVT(VT).getSizeInBits() << ",\n";
651 OS << "OPC_CheckType, " << getEnumName(VT) << ",\n";
655 OS << "OPC_CheckTypeRes, " << cast<CheckTypeMatcher>(N)->getResNo() << ", "
664 OS << "OPC_CheckChild" << cast<CheckChildTypeMatcher>(N)->getChildNo()
668 OS << "OPC_CheckChild" << cast<CheckChildTypeMatcher>(N)->getChildNo()
675 OS << "OPC_CheckInteger, ";
677 1 + EmitSignedVBRValue(cast<CheckIntegerMatcher>(N)->getValue(), OS);
678 OS << '\n';
682 OS << "OPC_CheckChild" << cast<CheckChildIntegerMatcher>(N)->getChildNo()
685 cast<CheckChildIntegerMatcher>(N)->getValue(), OS);
686 OS << '\n';
690 OS << "OPC_CheckCondCode, ISD::"
695 OS << "OPC_CheckChild2CondCode, ISD::"
700 OS << "OPC_CheckValueType, "
709 OS << "OPC_CheckComplexPat" << PatternNo << ", /*#*/"
712 OS << "OPC_CheckComplexPat, /*CP*/" << PatternNo << ", /*#*/"
716 OS << " // " << Pattern.getSelectFunc();
717 OS << ":$" << CCPM->getName();
719 OS << " #" << CCPM->getFirstResult() + i;
722 OS << " + chain result";
724 OS << '\n';
729 OS << "OPC_CheckAndImm, ";
731 1 + EmitVBRValue(cast<CheckAndImmMatcher>(N)->getValue(), OS);
732 OS << '\n';
737 OS << "OPC_CheckOrImm, ";
739 1 + EmitVBRValue(cast<CheckOrImmMatcher>(N)->getValue(), OS);
740 OS << '\n';
745 OS << "OPC_CheckFoldableChainNode,\n";
749 OS << "OPC_CheckImmAllOnesV,\n";
753 OS << "OPC_CheckImmAllZerosV,\n";
766 OS << "OPC_EmitInteger" << MVT(VT).getSizeInBits() << ", ";
770 OS << "OPC_EmitInteger, " << getEnumName(VT) << ", ";
773 unsigned Bytes = OpBytes + EmitSignedVBRValue(Val, OS);
774 OS << '\n';
785 OS << "OPC_EmitStringInteger" << MVT(VT).getSizeInBits() << ", ";
789 OS << "OPC_EmitStringInteger, " << getEnumName(VT) << ", ";
792 OS << Val << ",\n";
803 OS << "OPC_EmitRegister2, " << getEnumName(VT) << ", ";
804 OS << "TARGET_VAL(" << getQualifiedName(Reg->TheDef) << "),\n";
812 OS << "OPC_EmitRegisterI" << MVT(VT).getSizeInBits() << ", ";
816 OS << "OPC_EmitRegister, " << getEnumName(VT) << ", ";
820 OS << getQualifiedName(Reg->TheDef) << ",\n";
822 OS << "0 ";
824 OS << "/*zero_reg*/";
825 OS << ",\n";
833 OS << "OPC_EmitConvertToTarget" << Slot << ",\n";
836 OS << "OPC_EmitConvertToTarget, " << Slot << ",\n";
846 OS << "OPC_EmitMergeInputChains1_" << MN->getNode(0) << ",\n";
850 OS << "OPC_EmitMergeInputChains, " << MN->getNumNodes() << ", ";
852 OS << MN->getNode(i) << ", ";
853 OS << '\n';
863 OS << "OPC_EmitCopyToRegTwoByte, " << Slot << ", "
868 OS << "OPC_EmitCopyToReg" << Slot << ", "
872 OS << "OPC_EmitCopyToReg, " << Slot << ", "
880 OS << "OPC_EmitNodeXForm, " << getNodeXFormID(XF->getNodeXForm()) << ", "
883 OS << " // " << XF->getNodeXForm()->getName();
884 OS << '\n';
894 OS << "OPC_Coverage, ";
903 OS << "TARGET_VAL(" << Offset << "),\n";
904 OS.indent(FullIndexWidth + Indent);
909 OS << (IsEmitNode ? "OPC_EmitNode" : "OPC_MorphNodeTo");
913 OS << EN->getNumVTs();
917 OS << "None";
921 OS << "Chain";
926 OS << "GlueInput";
931 OS << "GlueOutput";
936 OS << ", TARGET_VAL(" << CGI.Namespace << "::" << CGI.TheDef->getName()
940 OS << ", 0";
942 OS << "|OPFL_Chain";
944 OS << "|OPFL_GlueInput";
946 OS << "|OPFL_GlueOutput";
948 OS << "|OPFL_MemRefs";
950 OS << "|OPFL_Variadic" << EN->getNumFixedArityOperands();
952 OS << ",\n";
954 OS.indent(FullIndexWidth + Indent + 4);
956 OS << EN->getNumVTs();
958 OS << "/*#VTs*/";
959 OS << ", ";
962 OS << getEnumName(EN->getVT(i)) << ", ";
964 OS << EN->getNumOperands();
966 OS << "/*#Ops*/";
967 OS << ", ";
970 NumOperandBytes += EmitVBRValue(EN->getOperand(i), OS);
976 OS << " // Results =";
979 OS << " #" << First + i;
982 OS << '\n';
985 OS.indent(FullIndexWidth + Indent)
989 OS.indent(FullIndexWidth + Indent)
993 OS << '\n';
1003 OS << "OPC_Coverage, ";
1012 OS << "TARGET_VAL(" << Offset << "),\n";
1013 OS.indent(FullIndexWidth + Indent);
1015 OS << "OPC_CompleteMatch, " << CM->getNumResults() << ", ";
1018 NumResultBytes += EmitVBRValue(CM->getResult(i), OS);
1019 OS << '\n';
1021 OS.indent(FullIndexWidth + Indent)
1025 OS.indent(FullIndexWidth + Indent)
1028 OS << '\n';
1040 raw_ostream &OS) {
1044 OS << "/*" << format_decimal(CurrentIdx, IndexWidth) << "*/";
1045 unsigned MatcherSize = EmitMatcher(N, Indent, CurrentIdx, OS);
1057 const std::vector<TreePattern *> &Preds, StringRef Decl, raw_ostream &OS) {
1061 BeginEmitFunction(OS, "bool", Decl, true /*AddOverride*/);
1062 OS << "{\n";
1063 OS << " switch (PredNo) {\n";
1064 OS << " default: llvm_unreachable(\"Invalid predicate in table?\");\n";
1071 OS << " case " << i << ": {\n";
1073 OS << " // " << TreePredicateFn(SimilarPred).getFnName() << '\n';
1074 OS << PredFnCodeStr << "\n }\n";
1076 OS << " }\n";
1077 OS << "}\n";
1078 EndEmitFunction(OS);
1081 void MatcherTableEmitter::EmitPredicateFunctions(raw_ostream &OS) {
1084 BeginEmitFunction(OS, "bool",
1087 OS << "{\n";
1088 OS << " switch (PredNo) {\n";
1089 OS << " default: llvm_unreachable(\"Invalid predicate in table?\");\n";
1091 OS << " case " << i << ": return " << PatternPredicates[i] << ";\n";
1092 OS << " }\n";
1093 OS << "}\n";
1094 EndEmitFunction(OS);
1100 OS);
1105 OS);
1111 OS, "bool",
1116 OS << "{\n";
1117 OS << " unsigned NextRes = Result.size();\n";
1118 OS << " switch (PatternNo) {\n";
1119 OS << " default: llvm_unreachable(\"Invalid pattern # in table?\");\n";
1127 OS << " case " << i << ":\n";
1129 OS << " {\n";
1130 OS << " Result.resize(NextRes+" << NumOps << ");\n";
1132 OS << " bool Succeeded = " << P.getSelectFunc();
1134 OS << " return " << P.getSelectFunc();
1136 OS << "(";
1140 OS << "Root, ";
1145 OS << "Parent, ";
1147 OS << "N";
1149 OS << ", Result[NextRes+" << i << "].first";
1150 OS << ");\n";
1152 OS << " if (Succeeded)\n";
1153 OS << " dbgs() << \"\\nCOMPLEX_PATTERN: " << P.getSelectFunc()
1155 OS << " return Succeeded;\n";
1156 OS << " }\n";
1159 OS << " }\n";
1160 OS << "}\n";
1161 EndEmitFunction(OS);
1167 BeginEmitFunction(OS, "SDValue",
1170 OS << "{\n";
1171 OS << " switch (XFormNo) {\n";
1172 OS << " default: llvm_unreachable(\"Invalid xform # in table?\");\n";
1182 OS << " case " << i << ": { ";
1184 OS << "// " << NodeXForms[i]->getName();
1185 OS << '\n';
1190 OS << " SDNode *N = V.getNode();\n";
1192 OS << " " << ClassName << " *N = cast<" << ClassName
1194 OS << Code << "\n }\n";
1196 OS << " }\n";
1197 OS << "}\n";
1198 EndEmitFunction(OS);
1285 void MatcherTableEmitter::EmitHistogram(const Matcher *M, raw_ostream &OS) {
1289 OS << " // Opcode Histogram:\n";
1291 OS << " // #"
1295 OS << '\n';
1299 raw_ostream &OS) {
1300 OS << "#if defined(GET_DAGISEL_DECL) && defined(GET_DAGISEL_BODY)\n";
1301 OS << "#error GET_DAGISEL_DECL and GET_DAGISEL_BODY cannot be both defined, ";
1302 OS << "undef both for inline definitions\n";
1303 OS << "#endif\n\n";
1306 OS << "#ifdef GET_DAGISEL_BODY\n";
1307 OS << "#define LOCAL_DAGISEL_STRINGIZE(X) LOCAL_DAGISEL_STRINGIZE_(X)\n";
1308 OS << "#define LOCAL_DAGISEL_STRINGIZE_(X) #X\n";
1309 OS << "static_assert(sizeof(LOCAL_DAGISEL_STRINGIZE(GET_DAGISEL_BODY)) > 1,"
1311 OS << " \"GET_DAGISEL_BODY is empty: it should be defined with the class "
1313 OS << "#undef LOCAL_DAGISEL_STRINGIZE_\n";
1314 OS << "#undef LOCAL_DAGISEL_STRINGIZE\n";
1315 OS << "#endif\n\n";
1317 OS << "#if !defined(GET_DAGISEL_DECL) && !defined(GET_DAGISEL_BODY)\n";
1318 OS << "#define DAGISEL_INLINE 1\n";
1319 OS << "#else\n";
1320 OS << "#define DAGISEL_INLINE 0\n";
1321 OS << "#endif\n\n";
1323 OS << "#if !DAGISEL_INLINE\n";
1324 OS << "#define DAGISEL_CLASS_COLONCOLON GET_DAGISEL_BODY ::\n";
1325 OS << "#else\n";
1326 OS << "#define DAGISEL_CLASS_COLONCOLON\n";
1327 OS << "#endif\n\n";
1329 BeginEmitFunction(OS, "void", "SelectCode(SDNode *N)", false /*AddOverride*/);
1343 OS << "{\n";
1344 OS << " // Some target values are emitted as 2 bytes, TARGET_VAL handles\n";
1345 OS << " // this.\n";
1346 OS << " #define TARGET_VAL(X) X & 255, unsigned(X) >> 8\n";
1347 OS << " static const unsigned char MatcherTable[] = {\n";
1348 TotalSize = MatcherEmitter.EmitMatcherList(TheMatcher, 1, 0, OS);
1349 OS << " 0\n }; // Total Array size is " << (TotalSize + 1)
1352 MatcherEmitter.EmitHistogram(TheMatcher, OS);
1354 OS << " #undef TARGET_VAL\n";
1355 OS << " SelectCodeCommon(N, MatcherTable, sizeof(MatcherTable));\n";
1356 OS << "}\n";
1357 EndEmitFunction(OS);
1360 MatcherEmitter.EmitPredicateFunctions(OS);
1363 MatcherEmitter.EmitPatternMatchTable(OS);
1366 OS << "\n";
1367 OS << "#ifdef DAGISEL_INLINE\n";
1368 OS << "#undef DAGISEL_INLINE\n";
1369 OS << "#endif\n";
1370 OS << "#ifdef DAGISEL_CLASS_COLONCOLON\n";
1371 OS << "#undef DAGISEL_CLASS_COLONCOLON\n";
1372 OS << "#endif\n";
1373 OS << "#ifdef GET_DAGISEL_DECL\n";
1374 OS << "#undef GET_DAGISEL_DECL\n";
1375 OS << "#endif\n";
1376 OS << "#ifdef GET_DAGISEL_BODY\n";
1377 OS << "#undef GET_DAGISEL_BODY\n";
1378 OS << "#endif\n";