Lines Matching refs: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);
345 const unsigned ChildSize = SizeMatcherList(Child, OS);
356 return EmitMatcher(N, 0, Idx, OS);
361 static void BeginEmitFunction(raw_ostream &OS, StringRef RetType,
363 OS << "#ifdef GET_DAGISEL_DECL\n";
364 OS << RetType << ' ' << Decl;
366 OS << " override";
367 OS << ";\n"
370 OS << RetType << " DAGISEL_CLASS_COLONCOLON " << Decl << "\n";
372 OS << "#if DAGISEL_INLINE\n"
378 static void EndEmitFunction(raw_ostream &OS) {
379 OS << "#endif // GET_DAGISEL_BODY\n\n";
382 void MatcherTableEmitter::EmitPatternMatchTable(raw_ostream &OS) {
391 BeginEmitFunction(OS, "StringRef", "getPatternForIndex(unsigned Index)",
393 OS << "{\n";
394 OS << "static const char *PATTERN_MATCH_TABLE[] = {\n";
397 OS << "\"" << It.first << "\",\n";
400 OS << "\n};";
401 OS << "\nreturn StringRef(PATTERN_MATCH_TABLE[Index]);";
402 OS << "\n}\n";
403 EndEmitFunction(OS);
405 BeginEmitFunction(OS, "StringRef", "getIncludePathForIndex(unsigned Index)",
407 OS << "{\n";
408 OS << "static const char *INCLUDE_PATH_TABLE[] = {\n";
411 OS << "\"" << It << "\",\n";
414 OS << "\n};";
415 OS << "\nreturn StringRef(INCLUDE_PATH_TABLE[Index]);";
416 OS << "\n}\n";
417 EndEmitFunction(OS);
425 raw_ostream &OS) {
426 OS.indent(Indent);
436 OS << "OPC_Scope, ";
440 OS << "/*" << format_decimal(CurrentIdx, IndexWidth) << "*/";
441 OS.indent(Indent) << "/*Scope*/ ";
443 OS.indent(Indent);
447 unsigned VBRSize = EmitVBRValue(ChildSize, OS);
449 OS << "/*->" << CurrentIdx + VBRSize + ChildSize << "*/";
451 OS << " // " << SM->getNumChildren() << " children in Scope";
453 OS << '\n';
456 CurrentIdx + VBRSize, OS);
464 OS << "/*" << format_decimal(CurrentIdx, IndexWidth) << "*/";
465 OS.indent(Indent) << "0, ";
467 OS << "/*End of Scope*/";
468 OS << '\n';
473 OS << "OPC_RecordNode,";
475 OS << " // #" << cast<RecordMatcher>(N)->getResultNo() << " = "
477 OS << '\n';
481 OS << "OPC_RecordChild" << cast<RecordChildMatcher>(N)->getChildNo() << ',';
483 OS << " // #" << cast<RecordChildMatcher>(N)->getResultNo() << " = "
485 OS << '\n';
489 OS << "OPC_RecordMemRef,\n";
493 OS << "OPC_CaptureGlueInput,\n";
499 OS << "OPC_MoveChild";
502 OS << ", ";
503 OS << MCM->getChildNo() << ",\n";
510 OS << "OPC_MoveSibling";
513 OS << ", ";
514 OS << MSM->getSiblingNo() << ",\n";
519 OS << "OPC_MoveParent,\n";
523 OS << "OPC_CheckSame, " << cast<CheckSameMatcher>(N)->getMatchNumber()
528 OS << "OPC_CheckChild" << cast<CheckChildSameMatcher>(N)->getChildNo()
536 OS << "OPC_CheckPatternPredicateTwoByte, TARGET_VAL(" << PredNo << "),";
538 OS << "OPC_CheckPatternPredicate" << PredNo << ',';
540 OS << "OPC_CheckPatternPredicate, " << PredNo << ',';
542 OS << " // " << Pred;
543 OS << '\n';
553 OS << "OPC_CheckPredicateWithOperands, " << NumOps << "/*#Ops*/, ";
555 OS << cast<CheckPredicateMatcher>(N)->getOperandNo(i) << ", ";
560 OS << "OPC_CheckPredicate" << PredNo << ", ";
562 OS << "OPC_CheckPredicate, ";
566 OS << PredNo << ',';
568 OS << " // " << Pred.getFnName();
569 OS << '\n';
574 OS << "OPC_CheckOpcode, TARGET_VAL("
584 OS << "OPC_SwitchOpcode ";
587 OS << "OPC_SwitchType ";
592 OS << "/*" << NumCases << " cases */";
593 OS << ", ";
611 OS << "/*" << format_decimal(CurrentIdx, IndexWidth) << "*/";
612 OS.indent(Indent);
614 OS << (isa<SwitchOpcodeMatcher>(N) ? "/*SwitchOpcode*/ "
619 CurrentIdx += EmitVBRValue(ChildSize, OS) + IdxSize;
621 OS << "TARGET_VAL(" << SOM->getCaseOpcode(i).getEnumName() << "),";
624 OS << "/*" << getEnumName(cast<SwitchTypeMatcher>(N)->getCaseType(i))
627 OS);
630 OS << "// ->" << CurrentIdx + ChildSize;
631 OS << '\n';
633 ChildSize = EmitMatcherList(Child, Indent + 1, CurrentIdx, OS);
641 OS << "/*" << format_decimal(CurrentIdx, IndexWidth) << "*/";
642 OS.indent(Indent) << "0,";
644 OS << (isa<SwitchOpcodeMatcher>(N) ? " // EndSwitchOpcode"
647 OS << '\n';
657 OS << "OPC_CheckTypeI" << MVT(VT).getSizeInBits() << ",\n";
660 OS << "OPC_CheckType, ";
662 OS << "/*" << getEnumName(VT) << "*/";
663 unsigned NumBytes = EmitVBRValue(VT, OS);
664 OS << "\n";
668 OS << "OPC_CheckTypeRes, " << cast<CheckTypeMatcher>(N)->getResNo() << ", ";
670 OS << "/*" << getEnumName(cast<CheckTypeMatcher>(N)->getType()) << "*/";
671 unsigned NumBytes = EmitVBRValue(cast<CheckTypeMatcher>(N)->getType(), OS);
672 OS << "\n";
681 OS << "OPC_CheckChild" << cast<CheckChildTypeMatcher>(N)->getChildNo()
685 OS << "OPC_CheckChild" << cast<CheckChildTypeMatcher>(N)->getChildNo()
688 OS << "/*" << getEnumName(VT) << "*/";
689 unsigned NumBytes = EmitVBRValue(VT, OS);
690 OS << "\n";
696 OS << "OPC_CheckInteger, ";
698 1 + EmitSignedVBRValue(cast<CheckIntegerMatcher>(N)->getValue(), OS);
699 OS << '\n';
703 OS << "OPC_CheckChild" << cast<CheckChildIntegerMatcher>(N)->getChildNo()
706 cast<CheckChildIntegerMatcher>(N)->getValue(), OS);
707 OS << '\n';
711 OS << "OPC_CheckCondCode, ISD::"
716 OS << "OPC_CheckChild2CondCode, ISD::"
721 OS << "OPC_CheckValueType, ";
723 OS << "/*" << getEnumName(cast<CheckValueTypeMatcher>(N)->getVT())
726 EmitVBRValue(cast<CheckValueTypeMatcher>(N)->getVT(), OS);
727 OS << "\n";
736 OS << "OPC_CheckComplexPat" << PatternNo << ", /*#*/"
739 OS << "OPC_CheckComplexPat, /*CP*/" << PatternNo << ", /*#*/"
743 OS << " // " << Pattern.getSelectFunc();
744 OS << ":$" << CCPM->getName();
746 OS << " #" << CCPM->getFirstResult() + i;
749 OS << " + chain result";
751 OS << '\n';
756 OS << "OPC_CheckAndImm, ";
758 1 + EmitVBRValue(cast<CheckAndImmMatcher>(N)->getValue(), OS);
759 OS << '\n';
764 OS << "OPC_CheckOrImm, ";
766 1 + EmitVBRValue(cast<CheckOrImmMatcher>(N)->getValue(), OS);
767 OS << '\n';
772 OS << "OPC_CheckFoldableChainNode,\n";
776 OS << "OPC_CheckImmAllOnesV,\n";
780 OS << "OPC_CheckImmAllZerosV,\n";
793 OS << "OPC_EmitInteger" << MVT(VT).getSizeInBits() << ", ";
796 OS << "OPC_EmitInteger, ";
798 OS << "/*" << getEnumName(VT) << "*/";
799 OpBytes = EmitVBRValue(VT, OS) + 1;
802 unsigned Bytes = OpBytes + EmitSignedVBRValue(Val, OS);
804 OS << " // " << Val << " #" << cast<EmitIntegerMatcher>(N)->getResultNo();
805 OS << '\n';
816 OS << "OPC_EmitStringInteger" << MVT(VT).getSizeInBits() << ", ";
819 OS << "OPC_EmitStringInteger, ";
821 OS << "/*" << getEnumName(VT) << "*/";
822 OpBytes = EmitVBRValue(VT, OS) + 1;
825 OS << Val << ',';
827 OS << " // #" << cast<EmitStringIntegerMatcher>(N)->getResultNo();
828 OS << '\n';
840 OS << "OPC_EmitRegister2, ";
842 OS << "/*" << getEnumName(VT) << "*/";
843 OpBytes = EmitVBRValue(VT, OS);
844 OS << "TARGET_VAL(" << getQualifiedName(Reg->TheDef) << "),\n";
851 OS << "OPC_EmitRegisterI" << MVT(VT).getSizeInBits() << ", ";
854 OS << "OPC_EmitRegister, ";
856 OS << "/*" << getEnumName(VT) << "*/";
857 OpBytes = EmitVBRValue(VT, OS) + 1;
861 OS << getQualifiedName(Reg->TheDef);
863 OS << "0 ";
865 OS << "/*zero_reg*/";
868 OS << ',';
870 OS << " // #" << Matcher->getResultNo();
871 OS << '\n';
878 OS << "OPC_EmitConvertToTarget";
880 OS << ", ";
881 OS << Slot << ',';
883 OS << " // #" << CTTM->getResultNo();
884 OS << '\n';
894 OS << "OPC_EmitMergeInputChains1_" << MN->getNode(0) << ",\n";
898 OS << "OPC_EmitMergeInputChains, " << MN->getNumNodes() << ", ";
900 OS << MN->getNode(i) << ", ";
901 OS << '\n';
911 OS << "OPC_EmitCopyToRegTwoByte, " << Slot << ", "
916 OS << "OPC_EmitCopyToReg" << Slot << ", "
920 OS << "OPC_EmitCopyToReg, " << Slot << ", "
928 OS << "OPC_EmitNodeXForm, " << getNodeXFormID(XF->getNodeXForm()) << ", "
931 OS << " // " << XF->getNodeXForm()->getName() << " #"
933 OS << '\n';
943 OS << "OPC_Coverage, ";
952 OS << "COVERAGE_IDX_VAL(" << Offset << "),\n";
953 OS.indent(FullIndexWidth + Indent);
958 OS << (IsEmitNode ? "OPC_EmitNode" : "OPC_MorphNodeTo");
962 OS << EN->getNumVTs();
966 OS << "None";
970 OS << "Chain";
975 OS << "GlueInput";
980 OS << "GlueOutput";
985 OS << ", TARGET_VAL(" << CGI.Namespace << "::" << CGI.TheDef->getName()
989 OS << ", 0";
991 OS << "|OPFL_Chain";
993 OS << "|OPFL_GlueInput";
995 OS << "|OPFL_GlueOutput";
997 OS << "|OPFL_MemRefs";
999 OS << "|OPFL_Variadic" << EN->getNumFixedArityOperands();
1001 OS << ",\n";
1003 OS.indent(FullIndexWidth + Indent + 4);
1005 OS << EN->getNumVTs();
1007 OS << "/*#VTs*/";
1008 OS << ", ";
1013 OS << "/*" << getEnumName(EN->getVT(i)) << "*/";
1014 NumTypeBytes += EmitVBRValue(EN->getVT(i), OS);
1017 OS << EN->getNumOperands();
1019 OS << "/*#Ops*/";
1020 OS << ", ";
1023 NumOperandBytes += EmitVBRValue(EN->getOperand(i), OS);
1029 OS << " // Results =";
1032 OS << " #" << First + i;
1035 OS << '\n';
1038 OS.indent(FullIndexWidth + Indent)
1042 OS.indent(FullIndexWidth + Indent)
1046 OS << '\n';
1056 OS << "OPC_Coverage, ";
1065 OS << "COVERAGE_IDX_VAL(" << Offset << "),\n";
1066 OS.indent(FullIndexWidth + Indent);
1068 OS << "OPC_CompleteMatch, " << CM->getNumResults() << ", ";
1071 NumResultBytes += EmitVBRValue(CM->getResult(i), OS);
1072 OS << '\n';
1074 OS.indent(FullIndexWidth + Indent)
1078 OS.indent(FullIndexWidth + Indent)
1081 OS << '\n';
1093 raw_ostream &OS) {
1097 OS << "/*" << format_decimal(CurrentIdx, IndexWidth) << "*/";
1098 unsigned MatcherSize = EmitMatcher(N, Indent, CurrentIdx, OS);
1110 const std::vector<TreePattern *> &Preds, StringRef Decl, raw_ostream &OS) {
1114 BeginEmitFunction(OS, "bool", Decl, true /*AddOverride*/);
1115 OS << "{\n";
1116 OS << " switch (PredNo) {\n";
1117 OS << " default: llvm_unreachable(\"Invalid predicate in table?\");\n";
1124 OS << " case " << i << ": {\n";
1126 OS << " // " << TreePredicateFn(SimilarPred).getFnName() << '\n';
1127 OS << PredFnCodeStr << "\n }\n";
1129 OS << " }\n";
1130 OS << "}\n";
1131 EndEmitFunction(OS);
1134 void MatcherTableEmitter::EmitPredicateFunctions(raw_ostream &OS) {
1137 BeginEmitFunction(OS, "bool",
1140 OS << "{\n";
1141 OS << " switch (PredNo) {\n";
1142 OS << " default: llvm_unreachable(\"Invalid predicate in table?\");\n";
1144 OS << " case " << i << ": return " << PatternPredicates[i] << ";\n";
1145 OS << " }\n";
1146 OS << "}\n";
1147 EndEmitFunction(OS);
1153 OS);
1158 OS);
1164 OS, "bool",
1169 OS << "{\n";
1170 OS << " unsigned NextRes = Result.size();\n";
1171 OS << " switch (PatternNo) {\n";
1172 OS << " default: llvm_unreachable(\"Invalid pattern # in table?\");\n";
1180 OS << " case " << i << ":\n";
1182 OS << " {\n";
1183 OS << " Result.resize(NextRes+" << NumOps << ");\n";
1185 OS << " bool Succeeded = " << P.getSelectFunc();
1187 OS << " return " << P.getSelectFunc();
1189 OS << "(";
1193 OS << "Root, ";
1198 OS << "Parent, ";
1200 OS << "N";
1202 OS << ", Result[NextRes+" << i << "].first";
1203 OS << ");\n";
1205 OS << " if (Succeeded)\n";
1206 OS << " dbgs() << \"\\nCOMPLEX_PATTERN: " << P.getSelectFunc()
1208 OS << " return Succeeded;\n";
1209 OS << " }\n";
1212 OS << " }\n";
1213 OS << "}\n";
1214 EndEmitFunction(OS);
1220 BeginEmitFunction(OS, "SDValue",
1223 OS << "{\n";
1224 OS << " switch (XFormNo) {\n";
1225 OS << " default: llvm_unreachable(\"Invalid xform # in table?\");\n";
1235 OS << " case " << i << ": { ";
1237 OS << "// " << NodeXForms[i]->getName();
1238 OS << '\n';
1243 OS << " SDNode *N = V.getNode();\n";
1245 OS << " " << ClassName << " *N = cast<" << ClassName
1247 OS << Code << "\n }\n";
1249 OS << " }\n";
1250 OS << "}\n";
1251 EndEmitFunction(OS);
1338 void MatcherTableEmitter::EmitHistogram(const Matcher *M, raw_ostream &OS) {
1342 OS << " // Opcode Histogram:\n";
1344 OS << " // #"
1348 OS << '\n';
1352 raw_ostream &OS) {
1353 OS << "#if defined(GET_DAGISEL_DECL) && defined(GET_DAGISEL_BODY)\n";
1354 OS << "#error GET_DAGISEL_DECL and GET_DAGISEL_BODY cannot be both defined, ";
1355 OS << "undef both for inline definitions\n";
1356 OS << "#endif\n\n";
1359 OS << "#ifdef GET_DAGISEL_BODY\n";
1360 OS << "#define LOCAL_DAGISEL_STRINGIZE(X) LOCAL_DAGISEL_STRINGIZE_(X)\n";
1361 OS << "#define LOCAL_DAGISEL_STRINGIZE_(X) #X\n";
1362 OS << "static_assert(sizeof(LOCAL_DAGISEL_STRINGIZE(GET_DAGISEL_BODY)) > 1,"
1364 OS << " \"GET_DAGISEL_BODY is empty: it should be defined with the class "
1366 OS << "#undef LOCAL_DAGISEL_STRINGIZE_\n";
1367 OS << "#undef LOCAL_DAGISEL_STRINGIZE\n";
1368 OS << "#endif\n\n";
1370 OS << "#if !defined(GET_DAGISEL_DECL) && !defined(GET_DAGISEL_BODY)\n";
1371 OS << "#define DAGISEL_INLINE 1\n";
1372 OS << "#else\n";
1373 OS << "#define DAGISEL_INLINE 0\n";
1374 OS << "#endif\n\n";
1376 OS << "#if !DAGISEL_INLINE\n";
1377 OS << "#define DAGISEL_CLASS_COLONCOLON GET_DAGISEL_BODY ::\n";
1378 OS << "#else\n";
1379 OS << "#define DAGISEL_CLASS_COLONCOLON\n";
1380 OS << "#endif\n\n";
1382 BeginEmitFunction(OS, "void", "SelectCode(SDNode *N)", false /*AddOverride*/);
1396 OS << "{\n";
1397 OS << " // Some target values are emitted as 2 bytes, TARGET_VAL handles\n";
1398 OS << " // this. Coverage indexes are emitted as 4 bytes,\n";
1399 OS << " // COVERAGE_IDX_VAL handles this.\n";
1400 OS << " #define TARGET_VAL(X) X & 255, unsigned(X) >> 8\n";
1401 OS << " #define COVERAGE_IDX_VAL(X) X & 255, (unsigned(X) >> 8) & 255, ";
1402 OS << "(unsigned(X) >> 16) & 255, (unsigned(X) >> 24) & 255\n";
1403 OS << " static const unsigned char MatcherTable[] = {\n";
1404 TotalSize = MatcherEmitter.EmitMatcherList(TheMatcher, 1, 0, OS);
1405 OS << " 0\n }; // Total Array size is " << (TotalSize + 1)
1408 MatcherEmitter.EmitHistogram(TheMatcher, OS);
1410 OS << " #undef COVERAGE_IDX_VAL\n";
1411 OS << " #undef TARGET_VAL\n";
1412 OS << " SelectCodeCommon(N, MatcherTable, sizeof(MatcherTable));\n";
1413 OS << "}\n";
1414 EndEmitFunction(OS);
1417 MatcherEmitter.EmitPredicateFunctions(OS);
1420 MatcherEmitter.EmitPatternMatchTable(OS);
1423 OS << "\n";
1424 OS << "#ifdef DAGISEL_INLINE\n";
1425 OS << "#undef DAGISEL_INLINE\n";
1426 OS << "#endif\n";
1427 OS << "#ifdef DAGISEL_CLASS_COLONCOLON\n";
1428 OS << "#undef DAGISEL_CLASS_COLONCOLON\n";
1429 OS << "#endif\n";
1430 OS << "#ifdef GET_DAGISEL_DECL\n";
1431 OS << "#undef GET_DAGISEL_DECL\n";
1432 OS << "#endif\n";
1433 OS << "#ifdef GET_DAGISEL_BODY\n";
1434 OS << "#undef GET_DAGISEL_BODY\n";
1435 OS << "#endif\n";