Lines Matching refs:OS

39   void run(raw_ostream &OS, bool Enums);
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);
58 void IntrinsicEmitter::run(raw_ostream &OS, bool Enums) { in run() argument
59 emitSourceFileHeader("Intrinsic Function Source Fragment", OS); in run()
65 EmitEnumInfo(Ints, OS); in run()
68 EmitTargetInfo(Ints, OS); in run()
71 EmitIntrinsicToNameTable(Ints, OS); in run()
74 EmitIntrinsicToOverloadTable(Ints, OS); in run()
77 EmitGenerator(Ints, OS); in run()
80 EmitAttributes(Ints, OS); in run()
83 EmitIntrinsicToBuiltinMap(Ints, true, OS); in run()
86 EmitIntrinsicToBuiltinMap(Ints, false, OS); in run()
91 raw_ostream &OS) { in EmitEnumInfo() argument
115 OS << "#ifndef LLVM_IR_INTRINSIC_" << UpperPrefix << "_ENUMS_H\n"; in EmitEnumInfo()
116 OS << "#define LLVM_IR_INTRINSIC_" << UpperPrefix << "_ENUMS_H\n\n"; in EmitEnumInfo()
117 OS << "namespace llvm {\n"; in EmitEnumInfo()
118 OS << "namespace Intrinsic {\n"; in EmitEnumInfo()
119 OS << "enum " << UpperPrefix << "Intrinsics : unsigned {\n"; in EmitEnumInfo()
122 OS << "// Enum values for intrinsics\n"; in EmitEnumInfo()
124 OS << " " << Ints[i].EnumName; in EmitEnumInfo()
129 OS << " = " << (Set->Offset + 1); in EmitEnumInfo()
131 OS << ", "; in EmitEnumInfo()
133 OS.indent(40 - Ints[i].EnumName.size()); in EmitEnumInfo()
134 OS << " // " << Ints[i].Name << "\n"; in EmitEnumInfo()
139 OS << " num_intrinsics = " << (Ints.size() + 1) << "\n"; in EmitEnumInfo()
141 OS << "}; // enum\n"; in EmitEnumInfo()
142 OS << "} // namespace Intrinsic\n"; in EmitEnumInfo()
143 OS << "} // namespace llvm\n\n"; in EmitEnumInfo()
144 OS << "#endif\n"; in EmitEnumInfo()
149 raw_ostream &OS) { in EmitTargetInfo() argument
150 OS << "// Target mapping\n"; in EmitTargetInfo()
151 OS << "#ifdef GET_INTRINSIC_TARGET_DATA\n"; in EmitTargetInfo()
152 OS << "struct IntrinsicTargetInfo {\n" in EmitTargetInfo()
157 OS << "static constexpr IntrinsicTargetInfo TargetInfos[] = {\n"; in EmitTargetInfo()
159 OS << " {llvm::StringLiteral(\"" << Target.Name << "\"), " << Target.Offset in EmitTargetInfo()
161 OS << "};\n"; in EmitTargetInfo()
162 OS << "#endif\n\n"; in EmitTargetInfo()
166 const CodeGenIntrinsicTable &Ints, raw_ostream &OS) { in EmitIntrinsicToNameTable() argument
167 OS << "// Intrinsic ID to name table\n"; in EmitIntrinsicToNameTable()
168 OS << "#ifdef GET_INTRINSIC_NAME_TABLE\n"; in EmitIntrinsicToNameTable()
169 OS << " // Note that entry #0 is the invalid intrinsic!\n"; in EmitIntrinsicToNameTable()
171 OS << " \"" << Ints[i].Name << "\",\n"; in EmitIntrinsicToNameTable()
172 OS << "#endif\n\n"; in EmitIntrinsicToNameTable()
176 const CodeGenIntrinsicTable &Ints, raw_ostream &OS) { in EmitIntrinsicToOverloadTable() argument
177 OS << "// Intrinsic ID to overload bitset\n"; in EmitIntrinsicToOverloadTable()
178 OS << "#ifdef GET_INTRINSIC_OVERLOAD_TABLE\n"; in EmitIntrinsicToOverloadTable()
179 OS << "static const uint8_t OTable[] = {\n"; in EmitIntrinsicToOverloadTable()
180 OS << " 0"; in EmitIntrinsicToOverloadTable()
184 OS << ",\n 0"; in EmitIntrinsicToOverloadTable()
186 OS << " | (1<<" << (i+1)%8 << ')'; in EmitIntrinsicToOverloadTable()
188 OS << "\n};\n\n"; in EmitIntrinsicToOverloadTable()
190 OS << "return (OTable[id/8] & (1 << (id%8))) != 0;\n"; in EmitIntrinsicToOverloadTable()
191 OS << "#endif\n\n"; in EmitIntrinsicToOverloadTable()
517 static void printIITEntry(raw_ostream &OS, unsigned char X) { in printIITEntry() argument
518 OS << (unsigned)X; in printIITEntry()
522 raw_ostream &OS) { in EmitGenerator() argument
568 OS << "// Global intrinsic function declaration type table.\n"; in EmitGenerator()
569 OS << "#ifdef GET_INTRINSIC_GENERATOR_GLOBAL\n"; in EmitGenerator()
571 OS << "static const unsigned IIT_Table[] = {\n "; in EmitGenerator()
575 OS << "\n "; in EmitGenerator()
579 OS << "0x" << Twine::utohexstr(FixedEncodings[i]) << ", "; in EmitGenerator()
589 OS << "(1U<<31) | " << LongEncodingTable.get(TypeSig) << ", "; in EmitGenerator()
592 OS << "0\n};\n\n"; in EmitGenerator()
595 OS << "static const unsigned char IIT_LongEncodingTable[] = {\n"; in EmitGenerator()
597 LongEncodingTable.emit(OS, printIITEntry); in EmitGenerator()
598 OS << " 255\n};\n\n"; in EmitGenerator()
600 OS << "#endif\n\n"; // End of GET_INTRINSIC_GENERATOR_GLOBAL in EmitGenerator()
656 raw_ostream &OS) { in EmitAttributes() argument
657 OS << "// Add parameter attributes that are not common to all intrinsics.\n"; in EmitAttributes()
658 OS << "#ifdef GET_INTRINSIC_ATTRIBUTES\n"; in EmitAttributes()
659 OS << "AttributeList Intrinsic::getAttributes(LLVMContext &C, ID id) {\n"; in EmitAttributes()
679 OS << " static const uint16_t IntrinsicsToAttributesMap[] = {\n"; in EmitAttributes()
684 OS << " " << UniqAttributes[&intrinsic] << ", // " in EmitAttributes()
687 OS << " };\n\n"; in EmitAttributes()
689 OS << " AttributeList AS[" << maxArgAttrs + 1 << "];\n"; in EmitAttributes()
690 OS << " unsigned NumAttrs = 0;\n"; in EmitAttributes()
691 OS << " if (id != 0) {\n"; in EmitAttributes()
692 OS << " switch(IntrinsicsToAttributesMap[id - 1]) {\n"; in EmitAttributes()
693 OS << " default: llvm_unreachable(\"Invalid attribute number\");\n"; in EmitAttributes()
695 OS << " case " << UniqAttribute.second << ": {\n"; in EmitAttributes()
708 OS << " const Attribute::AttrKind AttrParam" << AttrIdx << "[]= {"; in EmitAttributes()
716 OS << LS << "Attribute::NoCapture"; in EmitAttributes()
719 OS << LS << "Attribute::NoAlias"; in EmitAttributes()
722 OS << LS << "Attribute::NoUndef"; in EmitAttributes()
725 OS << LS << "Attribute::Returned"; in EmitAttributes()
728 OS << LS << "Attribute::ReadOnly"; in EmitAttributes()
731 OS << LS << "Attribute::WriteOnly"; in EmitAttributes()
734 OS << LS << "Attribute::ReadNone"; in EmitAttributes()
737 OS << LS << "Attribute::ImmArg"; in EmitAttributes()
740 OS << LS << "Attribute::Alignment"; in EmitAttributes()
749 OS << "};\n"; in EmitAttributes()
753 OS << " const uint64_t AttrValParam" << AttrIdx << "[]= {"; in EmitAttributes()
756 OS << LSV << V; in EmitAttributes()
757 OS << "};\n"; in EmitAttributes()
760 OS << " AS[" << numAttrs++ << "] = AttributeList::get(C, " in EmitAttributes()
763 OS << ", AttrValParam" << AttrIdx; in EmitAttributes()
764 OS << ");\n"; in EmitAttributes()
775 OS << " const Attribute::AttrKind Atts[] = {"; in EmitAttributes()
778 OS << LS << "Attribute::NoUnwind"; in EmitAttributes()
780 OS << LS << "Attribute::NoReturn"; in EmitAttributes()
782 OS << LS << "Attribute::NoCallback"; in EmitAttributes()
784 OS << LS << "Attribute::NoSync"; in EmitAttributes()
786 OS << LS << "Attribute::NoFree"; in EmitAttributes()
788 OS << LS << "Attribute::WillReturn"; in EmitAttributes()
790 OS << LS << "Attribute::Cold"; in EmitAttributes()
792 OS << LS << "Attribute::NoDuplicate"; in EmitAttributes()
794 OS << LS << "Attribute::NoMerge"; in EmitAttributes()
796 OS << LS << "Attribute::Convergent"; in EmitAttributes()
798 OS << LS << "Attribute::Speculatable"; in EmitAttributes()
804 OS << LS; in EmitAttributes()
805 OS << "Attribute::ReadNone"; in EmitAttributes()
808 OS << LS; in EmitAttributes()
809 OS << "Attribute::ReadOnly,"; in EmitAttributes()
810 OS << "Attribute::ArgMemOnly"; in EmitAttributes()
813 OS << LS; in EmitAttributes()
814 OS << "Attribute::ReadOnly"; in EmitAttributes()
817 OS << LS; in EmitAttributes()
818 OS << "Attribute::ReadOnly,"; in EmitAttributes()
819 OS << "Attribute::InaccessibleMemOnly"; in EmitAttributes()
822 OS << LS; in EmitAttributes()
823 OS << "Attribute::ReadOnly,"; in EmitAttributes()
824 OS << "Attribute::InaccessibleMemOrArgMemOnly"; in EmitAttributes()
827 OS << LS; in EmitAttributes()
828 OS << "Attribute::WriteOnly,"; in EmitAttributes()
829 OS << "Attribute::ArgMemOnly"; in EmitAttributes()
832 OS << LS; in EmitAttributes()
833 OS << "Attribute::WriteOnly"; in EmitAttributes()
836 OS << LS; in EmitAttributes()
837 OS << "Attribute::WriteOnly,"; in EmitAttributes()
838 OS << "Attribute::InaccessibleMemOnly"; in EmitAttributes()
841 OS << LS; in EmitAttributes()
842 OS << "Attribute::WriteOnly,"; in EmitAttributes()
843 OS << "Attribute::InaccessibleMemOrArgMemOnly"; in EmitAttributes()
846 OS << LS; in EmitAttributes()
847 OS << "Attribute::ArgMemOnly"; in EmitAttributes()
850 OS << LS; in EmitAttributes()
851 OS << "Attribute::InaccessibleMemOnly"; in EmitAttributes()
854 OS << LS; in EmitAttributes()
855 OS << "Attribute::InaccessibleMemOrArgMemOnly"; in EmitAttributes()
860 OS << "};\n"; in EmitAttributes()
861 OS << " AS[" << numAttrs++ << "] = AttributeList::get(C, " in EmitAttributes()
866 OS << " NumAttrs = " << numAttrs << ";\n"; in EmitAttributes()
867 OS << " break;\n"; in EmitAttributes()
868 OS << " }\n"; in EmitAttributes()
870 OS << " return AttributeList();\n"; in EmitAttributes()
871 OS << " }\n"; in EmitAttributes()
875 OS << " }\n"; in EmitAttributes()
876 OS << " }\n"; in EmitAttributes()
877 OS << " return AttributeList::get(C, makeArrayRef(AS, NumAttrs));\n"; in EmitAttributes()
878 OS << "}\n"; in EmitAttributes()
879 OS << "#endif // GET_INTRINSIC_ATTRIBUTES\n\n"; in EmitAttributes()
883 const CodeGenIntrinsicTable &Ints, bool IsClang, raw_ostream &OS) { in EmitIntrinsicToBuiltinMap() argument
905 OS << "// Get the LLVM intrinsic that corresponds to a builtin.\n"; in EmitIntrinsicToBuiltinMap()
906 OS << "// This is used by the C front-end. The builtin name is passed\n"; in EmitIntrinsicToBuiltinMap()
907 OS << "// in as BuiltinName, and a target prefix (e.g. 'ppc') is passed\n"; in EmitIntrinsicToBuiltinMap()
908 OS << "// in as TargetPrefix. The result is assigned to 'IntrinsicID'.\n"; in EmitIntrinsicToBuiltinMap()
909 OS << "#ifdef GET_LLVM_INTRINSIC_FOR_" << UpperCompilerName << "_BUILTIN\n"; in EmitIntrinsicToBuiltinMap()
911 OS << "Intrinsic::ID Intrinsic::getIntrinsicFor" << CompilerName in EmitIntrinsicToBuiltinMap()
916 OS << " return Intrinsic::not_intrinsic;\n"; in EmitIntrinsicToBuiltinMap()
917 OS << "}\n"; in EmitIntrinsicToBuiltinMap()
918 OS << "#endif\n\n"; in EmitIntrinsicToBuiltinMap()
922 OS << " static const char BuiltinNames[] = {\n"; in EmitIntrinsicToBuiltinMap()
923 Table.EmitCharArray(OS); in EmitIntrinsicToBuiltinMap()
924 OS << " };\n\n"; in EmitIntrinsicToBuiltinMap()
926 OS << " struct BuiltinEntry {\n"; in EmitIntrinsicToBuiltinMap()
927 OS << " Intrinsic::ID IntrinID;\n"; in EmitIntrinsicToBuiltinMap()
928 OS << " unsigned StrTabOffset;\n"; in EmitIntrinsicToBuiltinMap()
929 OS << " const char *getName() const {\n"; in EmitIntrinsicToBuiltinMap()
930 OS << " return &BuiltinNames[StrTabOffset];\n"; in EmitIntrinsicToBuiltinMap()
931 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
932 OS << " bool operator<(StringRef RHS) const {\n"; in EmitIntrinsicToBuiltinMap()
933 OS << " return strncmp(getName(), RHS.data(), RHS.size()) < 0;\n"; in EmitIntrinsicToBuiltinMap()
934 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
935 OS << " };\n"; in EmitIntrinsicToBuiltinMap()
937 OS << " StringRef TargetPrefix(TargetPrefixStr);\n\n"; in EmitIntrinsicToBuiltinMap()
941 OS << " "; in EmitIntrinsicToBuiltinMap()
943 OS << "if (TargetPrefix == \"" << I.first << "\") "; in EmitIntrinsicToBuiltinMap()
945 OS << "/* Target Independent Builtins */ "; in EmitIntrinsicToBuiltinMap()
946 OS << "{\n"; in EmitIntrinsicToBuiltinMap()
949 OS << " static const BuiltinEntry " << I.first << "Names[] = {\n"; in EmitIntrinsicToBuiltinMap()
951 OS << " {Intrinsic::" << P.second << ", " in EmitIntrinsicToBuiltinMap()
954 OS << " };\n"; in EmitIntrinsicToBuiltinMap()
955 OS << " auto I = std::lower_bound(std::begin(" << I.first << "Names),\n"; in EmitIntrinsicToBuiltinMap()
956 OS << " std::end(" << I.first << "Names),\n"; in EmitIntrinsicToBuiltinMap()
957 OS << " BuiltinNameStr);\n"; in EmitIntrinsicToBuiltinMap()
958 OS << " if (I != std::end(" << I.first << "Names) &&\n"; in EmitIntrinsicToBuiltinMap()
959 OS << " I->getName() == BuiltinNameStr)\n"; in EmitIntrinsicToBuiltinMap()
960 OS << " return I->IntrinID;\n"; in EmitIntrinsicToBuiltinMap()
961 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
963 OS << " return "; in EmitIntrinsicToBuiltinMap()
964 OS << "Intrinsic::not_intrinsic;\n"; in EmitIntrinsicToBuiltinMap()
965 OS << "}\n"; in EmitIntrinsicToBuiltinMap()
966 OS << "#endif\n\n"; in EmitIntrinsicToBuiltinMap()
969 void llvm::EmitIntrinsicEnums(RecordKeeper &RK, raw_ostream &OS) { in EmitIntrinsicEnums() argument
970 IntrinsicEmitter(RK).run(OS, /*Enums=*/true); in EmitIntrinsicEnums()
973 void llvm::EmitIntrinsicImpl(RecordKeeper &RK, raw_ostream &OS) { in EmitIntrinsicImpl() argument
974 IntrinsicEmitter(RK).run(OS, /*Enums=*/false); in EmitIntrinsicImpl()