Lines Matching refs:OS

37   void run(raw_ostream &OS, bool Enums);
39 void EmitPrefix(raw_ostream &OS);
41 void EmitEnumInfo(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
42 void EmitTargetInfo(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
44 raw_ostream &OS);
46 raw_ostream &OS);
47 void EmitGenerator(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
48 void EmitAttributes(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
50 raw_ostream &OS);
51 void EmitSuffix(raw_ostream &OS);
59 void IntrinsicEmitter::run(raw_ostream &OS, bool Enums) { in run() argument
60 emitSourceFileHeader("Intrinsic Function Source Fragment", OS); in run()
67 EmitPrefix(OS); in run()
71 EmitEnumInfo(Ints, OS); in run()
74 EmitTargetInfo(Ints, OS); in run()
77 EmitIntrinsicToNameTable(Ints, OS); in run()
80 EmitIntrinsicToOverloadTable(Ints, OS); in run()
83 EmitGenerator(Ints, OS); in run()
86 EmitAttributes(Ints, OS); in run()
89 EmitIntrinsicToBuiltinMap(Ints, true, OS); in run()
92 EmitIntrinsicToBuiltinMap(Ints, false, OS); in run()
95 EmitSuffix(OS); in run()
98 void IntrinsicEmitter::EmitPrefix(raw_ostream &OS) { in EmitPrefix() argument
99 OS << "// VisualStudio defines setjmp as _setjmp\n" in EmitPrefix()
108 void IntrinsicEmitter::EmitSuffix(raw_ostream &OS) { in EmitSuffix() argument
109 OS << "#if defined(_MSC_VER) && defined(setjmp_undefined_for_msvc)\n" in EmitSuffix()
117 raw_ostream &OS) { in EmitEnumInfo() argument
118 OS << "// Enum values for Intrinsics.h\n"; in EmitEnumInfo()
119 OS << "#ifdef GET_INTRINSIC_ENUM_VALUES\n"; in EmitEnumInfo()
121 OS << " " << Ints[i].EnumName; in EmitEnumInfo()
122 OS << ((i != e-1) ? ", " : " "); in EmitEnumInfo()
124 OS << std::string(40-Ints[i].EnumName.size(), ' '); in EmitEnumInfo()
125 OS << " // " << Ints[i].Name << "\n"; in EmitEnumInfo()
127 OS << "#endif\n\n"; in EmitEnumInfo()
131 raw_ostream &OS) { in EmitTargetInfo() argument
132 OS << "// Target mapping\n"; in EmitTargetInfo()
133 OS << "#ifdef GET_INTRINSIC_TARGET_DATA\n"; in EmitTargetInfo()
134 OS << "struct IntrinsicTargetInfo {\n" in EmitTargetInfo()
139 OS << "static constexpr IntrinsicTargetInfo TargetInfos[] = {\n"; in EmitTargetInfo()
141 OS << " {llvm::StringLiteral(\"" << Target.Name << "\"), " << Target.Offset in EmitTargetInfo()
143 OS << "};\n"; in EmitTargetInfo()
144 OS << "#endif\n\n"; in EmitTargetInfo()
148 const CodeGenIntrinsicTable &Ints, raw_ostream &OS) { in EmitIntrinsicToNameTable() argument
149 OS << "// Intrinsic ID to name table\n"; in EmitIntrinsicToNameTable()
150 OS << "#ifdef GET_INTRINSIC_NAME_TABLE\n"; in EmitIntrinsicToNameTable()
151 OS << " // Note that entry #0 is the invalid intrinsic!\n"; in EmitIntrinsicToNameTable()
153 OS << " \"" << Ints[i].Name << "\",\n"; in EmitIntrinsicToNameTable()
154 OS << "#endif\n\n"; in EmitIntrinsicToNameTable()
158 const CodeGenIntrinsicTable &Ints, raw_ostream &OS) { in EmitIntrinsicToOverloadTable() argument
159 OS << "// Intrinsic ID to overload bitset\n"; in EmitIntrinsicToOverloadTable()
160 OS << "#ifdef GET_INTRINSIC_OVERLOAD_TABLE\n"; in EmitIntrinsicToOverloadTable()
161 OS << "static const uint8_t OTable[] = {\n"; in EmitIntrinsicToOverloadTable()
162 OS << " 0"; in EmitIntrinsicToOverloadTable()
166 OS << ",\n 0"; in EmitIntrinsicToOverloadTable()
168 OS << " | (1<<" << (i+1)%8 << ')'; in EmitIntrinsicToOverloadTable()
170 OS << "\n};\n\n"; in EmitIntrinsicToOverloadTable()
172 OS << "return (OTable[id/8] & (1 << (id%8))) != 0;\n"; in EmitIntrinsicToOverloadTable()
173 OS << "#endif\n\n"; in EmitIntrinsicToOverloadTable()
393 static void printIITEntry(raw_ostream &OS, unsigned char X) { in printIITEntry() argument
394 OS << (unsigned)X; in printIITEntry()
398 raw_ostream &OS) { in EmitGenerator() argument
444 OS << "// Global intrinsic function declaration type table.\n"; in EmitGenerator()
445 OS << "#ifdef GET_INTRINSIC_GENERATOR_GLOBAL\n"; in EmitGenerator()
447 OS << "static const unsigned IIT_Table[] = {\n "; in EmitGenerator()
451 OS << "\n "; in EmitGenerator()
455 OS << "0x" << Twine::utohexstr(FixedEncodings[i]) << ", "; in EmitGenerator()
465 OS << "(1U<<31) | " << LongEncodingTable.get(TypeSig) << ", "; in EmitGenerator()
468 OS << "0\n};\n\n"; in EmitGenerator()
471 OS << "static const unsigned char IIT_LongEncodingTable[] = {\n"; in EmitGenerator()
473 LongEncodingTable.emit(OS, printIITEntry); in EmitGenerator()
474 OS << " 255\n};\n\n"; in EmitGenerator()
476 OS << "#endif\n\n"; // End of GET_INTRINSIC_GENERATOR_GLOBAL in EmitGenerator()
518 raw_ostream &OS) { in EmitAttributes() argument
519 OS << "// Add parameter attributes that are not common to all intrinsics.\n"; in EmitAttributes()
520 OS << "#ifdef GET_INTRINSIC_ATTRIBUTES\n"; in EmitAttributes()
522 OS << "static AttributeList getAttributes(LLVMContext &C, " << TargetPrefix in EmitAttributes()
525 OS << "AttributeList Intrinsic::getAttributes(LLVMContext &C, ID id) {\n"; in EmitAttributes()
545 OS << " static const uint8_t IntrinsicsToAttributesMap[] = {\n"; in EmitAttributes()
550 OS << " " << UniqAttributes[&intrinsic] << ", // " in EmitAttributes()
553 OS << " };\n\n"; in EmitAttributes()
555 OS << " AttributeList AS[" << maxArgAttrs + 1 << "];\n"; in EmitAttributes()
556 OS << " unsigned NumAttrs = 0;\n"; in EmitAttributes()
557 OS << " if (id != 0) {\n"; in EmitAttributes()
558 OS << " switch(IntrinsicsToAttributesMap[id - "; in EmitAttributes()
560 OS << "Intrinsic::num_intrinsics"; in EmitAttributes()
562 OS << "1"; in EmitAttributes()
563 OS << "]) {\n"; in EmitAttributes()
564 OS << " default: llvm_unreachable(\"Invalid attribute number\");\n"; in EmitAttributes()
567 OS << " case " << I->second << ": {\n"; in EmitAttributes()
581 OS << " const Attribute::AttrKind AttrParam" << attrIdx << "[]= {"; in EmitAttributes()
588 OS << ","; in EmitAttributes()
589 OS << "Attribute::NoCapture"; in EmitAttributes()
594 OS << ","; in EmitAttributes()
595 OS << "Attribute::Returned"; in EmitAttributes()
600 OS << ","; in EmitAttributes()
601 OS << "Attribute::ReadOnly"; in EmitAttributes()
606 OS << ","; in EmitAttributes()
607 OS << "Attribute::WriteOnly"; in EmitAttributes()
612 OS << ","; in EmitAttributes()
613 OS << "Attribute::ReadNone"; in EmitAttributes()
620 OS << "};\n"; in EmitAttributes()
621 OS << " AS[" << numAttrs++ << "] = AttributeList::get(C, " in EmitAttributes()
630 OS << " const Attribute::AttrKind Atts[] = {"; in EmitAttributes()
633 OS << "Attribute::NoUnwind"; in EmitAttributes()
638 OS << ","; in EmitAttributes()
639 OS << "Attribute::NoReturn"; in EmitAttributes()
644 OS << ","; in EmitAttributes()
645 OS << "Attribute::Cold"; in EmitAttributes()
650 OS << ","; in EmitAttributes()
651 OS << "Attribute::NoDuplicate"; in EmitAttributes()
656 OS << ","; in EmitAttributes()
657 OS << "Attribute::Convergent"; in EmitAttributes()
662 OS << ","; in EmitAttributes()
663 OS << "Attribute::Speculatable"; in EmitAttributes()
670 OS << ","; in EmitAttributes()
671 OS << "Attribute::ReadNone"; in EmitAttributes()
675 OS << ","; in EmitAttributes()
676 OS << "Attribute::ReadOnly,"; in EmitAttributes()
677 OS << "Attribute::ArgMemOnly"; in EmitAttributes()
681 OS << ","; in EmitAttributes()
682 OS << "Attribute::ReadOnly"; in EmitAttributes()
686 OS << ","; in EmitAttributes()
687 OS << "Attribute::ReadOnly,"; in EmitAttributes()
688 OS << "Attribute::InaccessibleMemOnly"; in EmitAttributes()
692 OS << ","; in EmitAttributes()
693 OS << "Attribute::ReadOnly,"; in EmitAttributes()
694 OS << "Attribute::InaccessibleMemOrArgMemOnly"; in EmitAttributes()
698 OS << ","; in EmitAttributes()
699 OS << "Attribute::WriteOnly,"; in EmitAttributes()
700 OS << "Attribute::ArgMemOnly"; in EmitAttributes()
704 OS << ","; in EmitAttributes()
705 OS << "Attribute::WriteOnly"; in EmitAttributes()
709 OS << ","; in EmitAttributes()
710 OS << "Attribute::WriteOnly,"; in EmitAttributes()
711 OS << "Attribute::InaccessibleMemOnly"; in EmitAttributes()
715 OS << ","; in EmitAttributes()
716 OS << "Attribute::WriteOnly,"; in EmitAttributes()
717 OS << "Attribute::InaccessibleMemOrArgMemOnly"; in EmitAttributes()
721 OS << ","; in EmitAttributes()
722 OS << "Attribute::ArgMemOnly"; in EmitAttributes()
726 OS << ","; in EmitAttributes()
727 OS << "Attribute::InaccessibleMemOnly"; in EmitAttributes()
731 OS << ","; in EmitAttributes()
732 OS << "Attribute::InaccessibleMemOrArgMemOnly"; in EmitAttributes()
737 OS << "};\n"; in EmitAttributes()
738 OS << " AS[" << numAttrs++ << "] = AttributeList::get(C, " in EmitAttributes()
743 OS << " NumAttrs = " << numAttrs << ";\n"; in EmitAttributes()
744 OS << " break;\n"; in EmitAttributes()
745 OS << " }\n"; in EmitAttributes()
747 OS << " return AttributeList();\n"; in EmitAttributes()
748 OS << " }\n"; in EmitAttributes()
752 OS << " }\n"; in EmitAttributes()
753 OS << " }\n"; in EmitAttributes()
754 OS << " return AttributeList::get(C, makeArrayRef(AS, NumAttrs));\n"; in EmitAttributes()
755 OS << "}\n"; in EmitAttributes()
756 OS << "#endif // GET_INTRINSIC_ATTRIBUTES\n\n"; in EmitAttributes()
760 const CodeGenIntrinsicTable &Ints, bool IsGCC, raw_ostream &OS) { in EmitIntrinsicToBuiltinMap() argument
780 OS << "// Get the LLVM intrinsic that corresponds to a builtin.\n"; in EmitIntrinsicToBuiltinMap()
781 OS << "// This is used by the C front-end. The builtin name is passed\n"; in EmitIntrinsicToBuiltinMap()
782 OS << "// in as BuiltinName, and a target prefix (e.g. 'ppc') is passed\n"; in EmitIntrinsicToBuiltinMap()
783 OS << "// in as TargetPrefix. The result is assigned to 'IntrinsicID'.\n"; in EmitIntrinsicToBuiltinMap()
784 OS << "#ifdef GET_LLVM_INTRINSIC_FOR_" << CompilerName << "_BUILTIN\n"; in EmitIntrinsicToBuiltinMap()
787 OS << "static " << TargetPrefix << "Intrinsic::ID " in EmitIntrinsicToBuiltinMap()
791 OS << "Intrinsic::ID Intrinsic::getIntrinsicFor" << CompilerName in EmitIntrinsicToBuiltinMap()
797 OS << " return "; in EmitIntrinsicToBuiltinMap()
799 OS << "(" << TargetPrefix << "Intrinsic::ID)"; in EmitIntrinsicToBuiltinMap()
800 OS << "Intrinsic::not_intrinsic;\n"; in EmitIntrinsicToBuiltinMap()
801 OS << "}\n"; in EmitIntrinsicToBuiltinMap()
802 OS << "#endif\n\n"; in EmitIntrinsicToBuiltinMap()
806 OS << " static const char BuiltinNames[] = {\n"; in EmitIntrinsicToBuiltinMap()
807 Table.EmitCharArray(OS); in EmitIntrinsicToBuiltinMap()
808 OS << " };\n\n"; in EmitIntrinsicToBuiltinMap()
810 OS << " struct BuiltinEntry {\n"; in EmitIntrinsicToBuiltinMap()
811 OS << " Intrinsic::ID IntrinID;\n"; in EmitIntrinsicToBuiltinMap()
812 OS << " unsigned StrTabOffset;\n"; in EmitIntrinsicToBuiltinMap()
813 OS << " const char *getName() const {\n"; in EmitIntrinsicToBuiltinMap()
814 OS << " return &BuiltinNames[StrTabOffset];\n"; in EmitIntrinsicToBuiltinMap()
815 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
816 OS << " bool operator<(StringRef RHS) const {\n"; in EmitIntrinsicToBuiltinMap()
817 OS << " return strncmp(getName(), RHS.data(), RHS.size()) < 0;\n"; in EmitIntrinsicToBuiltinMap()
818 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
819 OS << " };\n"; in EmitIntrinsicToBuiltinMap()
821 OS << " StringRef TargetPrefix(TargetPrefixStr);\n\n"; in EmitIntrinsicToBuiltinMap()
825 OS << " "; in EmitIntrinsicToBuiltinMap()
827 OS << "if (TargetPrefix == \"" << I->first << "\") "; in EmitIntrinsicToBuiltinMap()
829 OS << "/* Target Independent Builtins */ "; in EmitIntrinsicToBuiltinMap()
830 OS << "{\n"; in EmitIntrinsicToBuiltinMap()
833 OS << " static const BuiltinEntry " << I->first << "Names[] = {\n"; in EmitIntrinsicToBuiltinMap()
835 OS << " {Intrinsic::" << P.second << ", " in EmitIntrinsicToBuiltinMap()
838 OS << " };\n"; in EmitIntrinsicToBuiltinMap()
839 OS << " auto I = std::lower_bound(std::begin(" << I->first << "Names),\n"; in EmitIntrinsicToBuiltinMap()
840 OS << " std::end(" << I->first << "Names),\n"; in EmitIntrinsicToBuiltinMap()
841 OS << " BuiltinNameStr);\n"; in EmitIntrinsicToBuiltinMap()
842 OS << " if (I != std::end(" << I->first << "Names) &&\n"; in EmitIntrinsicToBuiltinMap()
843 OS << " I->getName() == BuiltinNameStr)\n"; in EmitIntrinsicToBuiltinMap()
844 OS << " return I->IntrinID;\n"; in EmitIntrinsicToBuiltinMap()
845 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
847 OS << " return "; in EmitIntrinsicToBuiltinMap()
849 OS << "(" << TargetPrefix << "Intrinsic::ID)"; in EmitIntrinsicToBuiltinMap()
850 OS << "Intrinsic::not_intrinsic;\n"; in EmitIntrinsicToBuiltinMap()
851 OS << "}\n"; in EmitIntrinsicToBuiltinMap()
852 OS << "#endif\n\n"; in EmitIntrinsicToBuiltinMap()
855 void llvm::EmitIntrinsicEnums(RecordKeeper &RK, raw_ostream &OS, in EmitIntrinsicEnums() argument
857 IntrinsicEmitter(RK, TargetOnly).run(OS, /*Enums=*/true); in EmitIntrinsicEnums()
860 void llvm::EmitIntrinsicImpl(RecordKeeper &RK, raw_ostream &OS, in EmitIntrinsicImpl() argument
862 IntrinsicEmitter(RK, TargetOnly).run(OS, /*Enums=*/false); in EmitIntrinsicImpl()