Lines Matching refs:OS

40   void run(raw_ostream &OS, bool Enums);
42 void EmitEnumInfo(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
43 void EmitTargetInfo(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
45 raw_ostream &OS);
47 raw_ostream &OS);
48 void EmitGenerator(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
49 void EmitAttributes(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
51 raw_ostream &OS);
59 void IntrinsicEmitter::run(raw_ostream &OS, bool Enums) { in run() argument
60 emitSourceFileHeader("Intrinsic Function Source Fragment", OS); in run()
66 EmitEnumInfo(Ints, OS); in run()
69 EmitTargetInfo(Ints, OS); in run()
72 EmitIntrinsicToNameTable(Ints, OS); in run()
75 EmitIntrinsicToOverloadTable(Ints, OS); in run()
78 EmitGenerator(Ints, OS); in run()
81 EmitAttributes(Ints, OS); in run()
84 EmitIntrinsicToBuiltinMap(Ints, true, OS); in run()
87 EmitIntrinsicToBuiltinMap(Ints, false, OS); in run()
92 raw_ostream &OS) { in EmitEnumInfo() argument
116 OS << "#ifndef LLVM_IR_INTRINSIC_" << UpperPrefix << "_ENUMS_H\n"; in EmitEnumInfo()
117 OS << "#define LLVM_IR_INTRINSIC_" << UpperPrefix << "_ENUMS_H\n\n"; in EmitEnumInfo()
118 OS << "namespace llvm {\n"; in EmitEnumInfo()
119 OS << "namespace Intrinsic {\n"; in EmitEnumInfo()
120 OS << "enum " << UpperPrefix << "Intrinsics : unsigned {\n"; in EmitEnumInfo()
123 OS << "// Enum values for intrinsics\n"; in EmitEnumInfo()
125 OS << " " << Ints[i].EnumName; in EmitEnumInfo()
130 OS << " = " << (Set->Offset + 1); in EmitEnumInfo()
132 OS << ", "; in EmitEnumInfo()
134 OS.indent(40 - Ints[i].EnumName.size()); in EmitEnumInfo()
135 OS << " // " << Ints[i].Name << "\n"; in EmitEnumInfo()
140 OS << " num_intrinsics = " << (Ints.size() + 1) << "\n"; in EmitEnumInfo()
142 OS << "}; // enum\n"; in EmitEnumInfo()
143 OS << "} // namespace Intrinsic\n"; in EmitEnumInfo()
144 OS << "} // namespace llvm\n\n"; in EmitEnumInfo()
145 OS << "#endif\n"; in EmitEnumInfo()
150 raw_ostream &OS) { in EmitTargetInfo() argument
151 OS << "// Target mapping\n"; in EmitTargetInfo()
152 OS << "#ifdef GET_INTRINSIC_TARGET_DATA\n"; in EmitTargetInfo()
153 OS << "struct IntrinsicTargetInfo {\n" in EmitTargetInfo()
158 OS << "static constexpr IntrinsicTargetInfo TargetInfos[] = {\n"; in EmitTargetInfo()
160 OS << " {llvm::StringLiteral(\"" << Target.Name << "\"), " << Target.Offset in EmitTargetInfo()
162 OS << "};\n"; in EmitTargetInfo()
163 OS << "#endif\n\n"; in EmitTargetInfo()
167 const CodeGenIntrinsicTable &Ints, raw_ostream &OS) { in EmitIntrinsicToNameTable() argument
168 OS << "// Intrinsic ID to name table\n"; in EmitIntrinsicToNameTable()
169 OS << "#ifdef GET_INTRINSIC_NAME_TABLE\n"; in EmitIntrinsicToNameTable()
170 OS << " // Note that entry #0 is the invalid intrinsic!\n"; in EmitIntrinsicToNameTable()
172 OS << " \"" << Ints[i].Name << "\",\n"; in EmitIntrinsicToNameTable()
173 OS << "#endif\n\n"; in EmitIntrinsicToNameTable()
177 const CodeGenIntrinsicTable &Ints, raw_ostream &OS) { in EmitIntrinsicToOverloadTable() argument
178 OS << "// Intrinsic ID to overload bitset\n"; in EmitIntrinsicToOverloadTable()
179 OS << "#ifdef GET_INTRINSIC_OVERLOAD_TABLE\n"; in EmitIntrinsicToOverloadTable()
180 OS << "static const uint8_t OTable[] = {\n"; in EmitIntrinsicToOverloadTable()
181 OS << " 0"; in EmitIntrinsicToOverloadTable()
185 OS << ",\n 0"; in EmitIntrinsicToOverloadTable()
187 OS << " | (1<<" << (i+1)%8 << ')'; in EmitIntrinsicToOverloadTable()
189 OS << "\n};\n\n"; in EmitIntrinsicToOverloadTable()
191 OS << "return (OTable[id/8] & (1 << (id%8))) != 0;\n"; in EmitIntrinsicToOverloadTable()
192 OS << "#endif\n\n"; in EmitIntrinsicToOverloadTable()
491 static void printIITEntry(raw_ostream &OS, unsigned char X) { in printIITEntry() argument
492 OS << (unsigned)X; in printIITEntry()
496 raw_ostream &OS) { in EmitGenerator() argument
542 OS << "// Global intrinsic function declaration type table.\n"; in EmitGenerator()
543 OS << "#ifdef GET_INTRINSIC_GENERATOR_GLOBAL\n"; in EmitGenerator()
545 OS << "static const unsigned IIT_Table[] = {\n "; in EmitGenerator()
549 OS << "\n "; in EmitGenerator()
553 OS << "0x" << Twine::utohexstr(FixedEncodings[i]) << ", "; in EmitGenerator()
563 OS << "(1U<<31) | " << LongEncodingTable.get(TypeSig) << ", "; in EmitGenerator()
566 OS << "0\n};\n\n"; in EmitGenerator()
569 OS << "static const unsigned char IIT_LongEncodingTable[] = {\n"; in EmitGenerator()
571 LongEncodingTable.emit(OS, printIITEntry); in EmitGenerator()
572 OS << " 255\n};\n\n"; in EmitGenerator()
574 OS << "#endif\n\n"; // End of GET_INTRINSIC_GENERATOR_GLOBAL in EmitGenerator()
627 raw_ostream &OS) { in EmitAttributes() argument
628 OS << "// Add parameter attributes that are not common to all intrinsics.\n"; in EmitAttributes()
629 OS << "#ifdef GET_INTRINSIC_ATTRIBUTES\n"; in EmitAttributes()
630 OS << "AttributeList Intrinsic::getAttributes(LLVMContext &C, ID id) {\n"; in EmitAttributes()
650 OS << " static const uint16_t IntrinsicsToAttributesMap[] = {\n"; in EmitAttributes()
655 OS << " " << UniqAttributes[&intrinsic] << ", // " in EmitAttributes()
658 OS << " };\n\n"; in EmitAttributes()
660 OS << " AttributeList AS[" << maxArgAttrs + 1 << "];\n"; in EmitAttributes()
661 OS << " unsigned NumAttrs = 0;\n"; in EmitAttributes()
662 OS << " if (id != 0) {\n"; in EmitAttributes()
663 OS << " switch(IntrinsicsToAttributesMap[id - 1]) {\n"; in EmitAttributes()
664 OS << " default: llvm_unreachable(\"Invalid attribute number\");\n"; in EmitAttributes()
666 OS << " case " << UniqAttribute.second << ": {\n"; in EmitAttributes()
679 OS << " const Attribute::AttrKind AttrParam" << AttrIdx << "[]= {"; in EmitAttributes()
687 OS << LS << "Attribute::NoCapture"; in EmitAttributes()
690 OS << LS << "Attribute::NoAlias"; in EmitAttributes()
693 OS << LS << "Attribute::NoUndef"; in EmitAttributes()
696 OS << LS << "Attribute::Returned"; in EmitAttributes()
699 OS << LS << "Attribute::ReadOnly"; in EmitAttributes()
702 OS << LS << "Attribute::WriteOnly"; in EmitAttributes()
705 OS << LS << "Attribute::ReadNone"; in EmitAttributes()
708 OS << LS << "Attribute::ImmArg"; in EmitAttributes()
711 OS << LS << "Attribute::Alignment"; in EmitAttributes()
720 OS << "};\n"; in EmitAttributes()
724 OS << " const uint64_t AttrValParam" << AttrIdx << "[]= {"; in EmitAttributes()
727 OS << LSV << V; in EmitAttributes()
728 OS << "};\n"; in EmitAttributes()
731 OS << " AS[" << numAttrs++ << "] = AttributeList::get(C, " in EmitAttributes()
734 OS << ", AttrValParam" << AttrIdx; in EmitAttributes()
735 OS << ");\n"; in EmitAttributes()
746 OS << " const Attribute::AttrKind Atts[] = {"; in EmitAttributes()
749 OS << LS << "Attribute::NoUnwind"; in EmitAttributes()
751 OS << LS << "Attribute::NoReturn"; in EmitAttributes()
753 OS << LS << "Attribute::NoSync"; in EmitAttributes()
755 OS << LS << "Attribute::NoFree"; in EmitAttributes()
757 OS << LS << "Attribute::WillReturn"; in EmitAttributes()
759 OS << LS << "Attribute::Cold"; in EmitAttributes()
761 OS << LS << "Attribute::NoDuplicate"; in EmitAttributes()
763 OS << LS << "Attribute::NoMerge"; in EmitAttributes()
765 OS << LS << "Attribute::Convergent"; in EmitAttributes()
767 OS << LS << "Attribute::Speculatable"; in EmitAttributes()
773 OS << LS; in EmitAttributes()
774 OS << "Attribute::ReadNone"; in EmitAttributes()
777 OS << LS; in EmitAttributes()
778 OS << "Attribute::ReadOnly,"; in EmitAttributes()
779 OS << "Attribute::ArgMemOnly"; in EmitAttributes()
782 OS << LS; in EmitAttributes()
783 OS << "Attribute::ReadOnly"; in EmitAttributes()
786 OS << LS; in EmitAttributes()
787 OS << "Attribute::ReadOnly,"; in EmitAttributes()
788 OS << "Attribute::InaccessibleMemOnly"; in EmitAttributes()
791 OS << LS; in EmitAttributes()
792 OS << "Attribute::ReadOnly,"; in EmitAttributes()
793 OS << "Attribute::InaccessibleMemOrArgMemOnly"; in EmitAttributes()
796 OS << LS; in EmitAttributes()
797 OS << "Attribute::WriteOnly,"; in EmitAttributes()
798 OS << "Attribute::ArgMemOnly"; in EmitAttributes()
801 OS << LS; in EmitAttributes()
802 OS << "Attribute::WriteOnly"; in EmitAttributes()
805 OS << LS; in EmitAttributes()
806 OS << "Attribute::WriteOnly,"; in EmitAttributes()
807 OS << "Attribute::InaccessibleMemOnly"; in EmitAttributes()
810 OS << LS; in EmitAttributes()
811 OS << "Attribute::WriteOnly,"; in EmitAttributes()
812 OS << "Attribute::InaccessibleMemOrArgMemOnly"; in EmitAttributes()
815 OS << LS; in EmitAttributes()
816 OS << "Attribute::ArgMemOnly"; in EmitAttributes()
819 OS << LS; in EmitAttributes()
820 OS << "Attribute::InaccessibleMemOnly"; in EmitAttributes()
823 OS << LS; in EmitAttributes()
824 OS << "Attribute::InaccessibleMemOrArgMemOnly"; in EmitAttributes()
829 OS << "};\n"; in EmitAttributes()
830 OS << " AS[" << numAttrs++ << "] = AttributeList::get(C, " in EmitAttributes()
835 OS << " NumAttrs = " << numAttrs << ";\n"; in EmitAttributes()
836 OS << " break;\n"; in EmitAttributes()
837 OS << " }\n"; in EmitAttributes()
839 OS << " return AttributeList();\n"; in EmitAttributes()
840 OS << " }\n"; in EmitAttributes()
844 OS << " }\n"; in EmitAttributes()
845 OS << " }\n"; in EmitAttributes()
846 OS << " return AttributeList::get(C, makeArrayRef(AS, NumAttrs));\n"; in EmitAttributes()
847 OS << "}\n"; in EmitAttributes()
848 OS << "#endif // GET_INTRINSIC_ATTRIBUTES\n\n"; in EmitAttributes()
852 const CodeGenIntrinsicTable &Ints, bool IsGCC, raw_ostream &OS) { in EmitIntrinsicToBuiltinMap() argument
873 OS << "// Get the LLVM intrinsic that corresponds to a builtin.\n"; in EmitIntrinsicToBuiltinMap()
874 OS << "// This is used by the C front-end. The builtin name is passed\n"; in EmitIntrinsicToBuiltinMap()
875 OS << "// in as BuiltinName, and a target prefix (e.g. 'ppc') is passed\n"; in EmitIntrinsicToBuiltinMap()
876 OS << "// in as TargetPrefix. The result is assigned to 'IntrinsicID'.\n"; in EmitIntrinsicToBuiltinMap()
877 OS << "#ifdef GET_LLVM_INTRINSIC_FOR_" << CompilerName << "_BUILTIN\n"; in EmitIntrinsicToBuiltinMap()
879 OS << "Intrinsic::ID Intrinsic::getIntrinsicFor" << CompilerName in EmitIntrinsicToBuiltinMap()
884 OS << " return Intrinsic::not_intrinsic;\n"; in EmitIntrinsicToBuiltinMap()
885 OS << "}\n"; in EmitIntrinsicToBuiltinMap()
886 OS << "#endif\n\n"; in EmitIntrinsicToBuiltinMap()
890 OS << " static const char BuiltinNames[] = {\n"; in EmitIntrinsicToBuiltinMap()
891 Table.EmitCharArray(OS); in EmitIntrinsicToBuiltinMap()
892 OS << " };\n\n"; in EmitIntrinsicToBuiltinMap()
894 OS << " struct BuiltinEntry {\n"; in EmitIntrinsicToBuiltinMap()
895 OS << " Intrinsic::ID IntrinID;\n"; in EmitIntrinsicToBuiltinMap()
896 OS << " unsigned StrTabOffset;\n"; in EmitIntrinsicToBuiltinMap()
897 OS << " const char *getName() const {\n"; in EmitIntrinsicToBuiltinMap()
898 OS << " return &BuiltinNames[StrTabOffset];\n"; in EmitIntrinsicToBuiltinMap()
899 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
900 OS << " bool operator<(StringRef RHS) const {\n"; in EmitIntrinsicToBuiltinMap()
901 OS << " return strncmp(getName(), RHS.data(), RHS.size()) < 0;\n"; in EmitIntrinsicToBuiltinMap()
902 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
903 OS << " };\n"; in EmitIntrinsicToBuiltinMap()
905 OS << " StringRef TargetPrefix(TargetPrefixStr);\n\n"; in EmitIntrinsicToBuiltinMap()
909 OS << " "; in EmitIntrinsicToBuiltinMap()
911 OS << "if (TargetPrefix == \"" << I.first << "\") "; in EmitIntrinsicToBuiltinMap()
913 OS << "/* Target Independent Builtins */ "; in EmitIntrinsicToBuiltinMap()
914 OS << "{\n"; in EmitIntrinsicToBuiltinMap()
917 OS << " static const BuiltinEntry " << I.first << "Names[] = {\n"; in EmitIntrinsicToBuiltinMap()
919 OS << " {Intrinsic::" << P.second << ", " in EmitIntrinsicToBuiltinMap()
922 OS << " };\n"; in EmitIntrinsicToBuiltinMap()
923 OS << " auto I = std::lower_bound(std::begin(" << I.first << "Names),\n"; in EmitIntrinsicToBuiltinMap()
924 OS << " std::end(" << I.first << "Names),\n"; in EmitIntrinsicToBuiltinMap()
925 OS << " BuiltinNameStr);\n"; in EmitIntrinsicToBuiltinMap()
926 OS << " if (I != std::end(" << I.first << "Names) &&\n"; in EmitIntrinsicToBuiltinMap()
927 OS << " I->getName() == BuiltinNameStr)\n"; in EmitIntrinsicToBuiltinMap()
928 OS << " return I->IntrinID;\n"; in EmitIntrinsicToBuiltinMap()
929 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
931 OS << " return "; in EmitIntrinsicToBuiltinMap()
932 OS << "Intrinsic::not_intrinsic;\n"; in EmitIntrinsicToBuiltinMap()
933 OS << "}\n"; in EmitIntrinsicToBuiltinMap()
934 OS << "#endif\n\n"; in EmitIntrinsicToBuiltinMap()
937 void llvm::EmitIntrinsicEnums(RecordKeeper &RK, raw_ostream &OS) { in EmitIntrinsicEnums() argument
938 IntrinsicEmitter(RK).run(OS, /*Enums=*/true); in EmitIntrinsicEnums()
941 void llvm::EmitIntrinsicImpl(RecordKeeper &RK, raw_ostream &OS) { in EmitIntrinsicImpl() argument
942 IntrinsicEmitter(RK).run(OS, /*Enums=*/false); in EmitIntrinsicImpl()