Lines Matching refs:OS

51   void run(raw_ostream &OS, bool Enums);
53 void EmitEnumInfo(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
54 void EmitArgKind(raw_ostream &OS);
55 void EmitIITInfo(raw_ostream &OS);
56 void EmitTargetInfo(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
58 raw_ostream &OS);
60 raw_ostream &OS);
61 void EmitGenerator(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
62 void EmitAttributes(const CodeGenIntrinsicTable &Ints, raw_ostream &OS);
64 raw_ostream &OS);
72 void IntrinsicEmitter::run(raw_ostream &OS, bool Enums) { in run() argument
73 emitSourceFileHeader("Intrinsic Function Source Fragment", OS); in run()
79 EmitEnumInfo(Ints, OS); in run()
82 EmitArgKind(OS); in run()
85 EmitIITInfo(OS); in run()
88 EmitTargetInfo(Ints, OS); in run()
91 EmitIntrinsicToNameTable(Ints, OS); in run()
94 EmitIntrinsicToOverloadTable(Ints, OS); in run()
97 EmitGenerator(Ints, OS); in run()
100 EmitAttributes(Ints, OS); in run()
103 EmitIntrinsicToBuiltinMap(Ints, true, OS); in run()
106 EmitIntrinsicToBuiltinMap(Ints, false, OS); in run()
111 raw_ostream &OS) { in EmitEnumInfo() argument
134 OS << "#ifdef GET_INTRINSIC_ENUM_VALUES\n"; in EmitEnumInfo()
137 OS << "#ifndef LLVM_IR_INTRINSIC_" << UpperPrefix << "_ENUMS_H\n"; in EmitEnumInfo()
138 OS << "#define LLVM_IR_INTRINSIC_" << UpperPrefix << "_ENUMS_H\n\n"; in EmitEnumInfo()
139 OS << "namespace llvm {\n"; in EmitEnumInfo()
140 OS << "namespace Intrinsic {\n"; in EmitEnumInfo()
141 OS << "enum " << UpperPrefix << "Intrinsics : unsigned {\n"; in EmitEnumInfo()
144 OS << "// Enum values for intrinsics\n"; in EmitEnumInfo()
146 OS << " " << Ints[i].EnumName; in EmitEnumInfo()
151 OS << " = " << (Set->Offset + 1); in EmitEnumInfo()
153 OS << ", "; in EmitEnumInfo()
155 OS.indent(40 - Ints[i].EnumName.size()); in EmitEnumInfo()
156 OS << " // " << Ints[i].Name << "\n"; in EmitEnumInfo()
161 OS << " num_intrinsics = " << (Ints.size() + 1) << "\n"; in EmitEnumInfo()
162 OS << "#endif\n\n"; in EmitEnumInfo()
164 OS << "}; // enum\n"; in EmitEnumInfo()
165 OS << "} // namespace Intrinsic\n"; in EmitEnumInfo()
166 OS << "} // namespace llvm\n\n"; in EmitEnumInfo()
167 OS << "#endif\n"; in EmitEnumInfo()
171 void IntrinsicEmitter::EmitArgKind(raw_ostream &OS) { in EmitArgKind() argument
174 OS << "// llvm::Intrinsic::IITDescriptor::ArgKind\n"; in EmitArgKind()
175 OS << "#ifdef GET_INTRINSIC_ARGKIND\n"; in EmitArgKind()
178 OS << " AK_" << RV.getName() << " = " << *RV.getValue() << ",\n"; in EmitArgKind()
180 OS << "#error \"ArgKind is not defined\"\n"; in EmitArgKind()
182 OS << "#endif\n\n"; in EmitArgKind()
185 void IntrinsicEmitter::EmitIITInfo(raw_ostream &OS) { in EmitIITInfo() argument
186 OS << "#ifdef GET_INTRINSIC_IITINFO\n"; in EmitIITInfo()
199 OS << " " << RecsByNumber[I] << " = " << I << ",\n"; in EmitIITInfo()
201 OS << "#error \"class IIT_Base is not defined\"\n"; in EmitIITInfo()
203 OS << "#endif\n\n"; in EmitIITInfo()
207 raw_ostream &OS) { in EmitTargetInfo() argument
208 OS << "// Target mapping\n"; in EmitTargetInfo()
209 OS << "#ifdef GET_INTRINSIC_TARGET_DATA\n"; in EmitTargetInfo()
210 OS << "struct IntrinsicTargetInfo {\n" in EmitTargetInfo()
215 OS << "static constexpr IntrinsicTargetInfo TargetInfos[] = {\n"; in EmitTargetInfo()
217 OS << " {llvm::StringLiteral(\"" << Target.Name << "\"), " << Target.Offset in EmitTargetInfo()
219 OS << "};\n"; in EmitTargetInfo()
220 OS << "#endif\n\n"; in EmitTargetInfo()
224 const CodeGenIntrinsicTable &Ints, raw_ostream &OS) { in EmitIntrinsicToNameTable() argument
225 OS << "// Intrinsic ID to name table\n"; in EmitIntrinsicToNameTable()
226 OS << "#ifdef GET_INTRINSIC_NAME_TABLE\n"; in EmitIntrinsicToNameTable()
227 OS << " // Note that entry #0 is the invalid intrinsic!\n"; in EmitIntrinsicToNameTable()
229 OS << " \"" << Ints[i].Name << "\",\n"; in EmitIntrinsicToNameTable()
230 OS << "#endif\n\n"; in EmitIntrinsicToNameTable()
234 const CodeGenIntrinsicTable &Ints, raw_ostream &OS) { in EmitIntrinsicToOverloadTable() argument
235 OS << "// Intrinsic ID to overload bitset\n"; in EmitIntrinsicToOverloadTable()
236 OS << "#ifdef GET_INTRINSIC_OVERLOAD_TABLE\n"; in EmitIntrinsicToOverloadTable()
237 OS << "static const uint8_t OTable[] = {\n"; in EmitIntrinsicToOverloadTable()
238 OS << " 0"; in EmitIntrinsicToOverloadTable()
242 OS << ",\n 0"; in EmitIntrinsicToOverloadTable()
244 OS << " | (1<<" << (i+1)%8 << ')'; in EmitIntrinsicToOverloadTable()
246 OS << "\n};\n\n"; in EmitIntrinsicToOverloadTable()
248 OS << "return (OTable[id/8] & (1 << (id%8))) != 0;\n"; in EmitIntrinsicToOverloadTable()
249 OS << "#endif\n\n"; in EmitIntrinsicToOverloadTable()
264 static void printIITEntry(raw_ostream &OS, unsigned char X) { in printIITEntry() argument
265 OS << (unsigned)X; in printIITEntry()
269 raw_ostream &OS) { in EmitGenerator() argument
315 OS << "// Global intrinsic function declaration type table.\n"; in EmitGenerator()
316 OS << "#ifdef GET_INTRINSIC_GENERATOR_GLOBAL\n"; in EmitGenerator()
318 OS << "static const unsigned IIT_Table[] = {\n "; in EmitGenerator()
322 OS << "\n "; in EmitGenerator()
326 OS << "0x" << Twine::utohexstr(FixedEncodings[i]) << ", "; in EmitGenerator()
336 OS << "(1U<<31) | " << LongEncodingTable.get(TypeSig) << ", "; in EmitGenerator()
339 OS << "0\n};\n\n"; in EmitGenerator()
342 OS << "static const unsigned char IIT_LongEncodingTable[] = {\n"; in EmitGenerator()
344 LongEncodingTable.emit(OS, printIITEntry); in EmitGenerator()
345 OS << " 255\n};\n\n"; in EmitGenerator()
347 OS << "#endif\n\n"; // End of GET_INTRINSIC_GENERATOR_GLOBAL in EmitGenerator()
421 raw_ostream &OS) { in EmitAttributes() argument
422 OS << "// Add parameter attributes that are not common to all intrinsics.\n"; in EmitAttributes()
423 OS << "#ifdef GET_INTRINSIC_ATTRIBUTES\n"; in EmitAttributes()
428 OS << "static AttributeSet getIntrinsicArgAttributeSet(" in EmitAttributes()
444 OS << " case " << ID << ":\n"; in EmitAttributes()
445 OS << " return AttributeSet::get(C, {\n"; in EmitAttributes()
449 OS << " Attribute::get(C, Attribute::NoCapture),\n"; in EmitAttributes()
452 OS << " Attribute::get(C, Attribute::NoAlias),\n"; in EmitAttributes()
455 OS << " Attribute::get(C, Attribute::NoUndef),\n"; in EmitAttributes()
458 OS << " Attribute::get(C, Attribute::NonNull),\n"; in EmitAttributes()
461 OS << " Attribute::get(C, Attribute::Returned),\n"; in EmitAttributes()
464 OS << " Attribute::get(C, Attribute::ReadOnly),\n"; in EmitAttributes()
467 OS << " Attribute::get(C, Attribute::WriteOnly),\n"; in EmitAttributes()
470 OS << " Attribute::get(C, Attribute::ReadNone),\n"; in EmitAttributes()
473 OS << " Attribute::get(C, Attribute::ImmArg),\n"; in EmitAttributes()
476 OS << " Attribute::get(C, Attribute::Alignment, " in EmitAttributes()
480 OS << " Attribute::get(C, Attribute::Dereferenceable, " in EmitAttributes()
485 OS << " });\n"; in EmitAttributes()
488 OS << " }\n"; in EmitAttributes()
489 OS << "}\n\n"; in EmitAttributes()
494 OS << "static AttributeSet getIntrinsicFnAttributeSet(" in EmitAttributes()
503 OS << " case " << ID << ":\n" in EmitAttributes()
506 OS << " Attribute::get(C, Attribute::NoUnwind),\n"; in EmitAttributes()
508 OS << " Attribute::get(C, Attribute::NoReturn),\n"; in EmitAttributes()
510 OS << " Attribute::get(C, Attribute::NoCallback),\n"; in EmitAttributes()
512 OS << " Attribute::get(C, Attribute::NoSync),\n"; in EmitAttributes()
514 OS << " Attribute::get(C, Attribute::NoFree),\n"; in EmitAttributes()
516 OS << " Attribute::get(C, Attribute::WillReturn),\n"; in EmitAttributes()
518 OS << " Attribute::get(C, Attribute::Cold),\n"; in EmitAttributes()
520 OS << " Attribute::get(C, Attribute::NoDuplicate),\n"; in EmitAttributes()
522 OS << " Attribute::get(C, Attribute::NoMerge),\n"; in EmitAttributes()
524 OS << " Attribute::get(C, Attribute::Convergent),\n"; in EmitAttributes()
526 OS << " Attribute::get(C, Attribute::Speculatable),\n"; in EmitAttributes()
528 OS << " Attribute::get(C, Attribute::StrictFP),\n"; in EmitAttributes()
535 OS << " Attribute::getWithMemoryEffects(C, " in EmitAttributes()
538 OS << " });\n"; in EmitAttributes()
540 OS << " }\n"; in EmitAttributes()
541 OS << "}\n\n"; in EmitAttributes()
542 OS << "AttributeList Intrinsic::getAttributes(LLVMContext &C, ID id) {\n"; in EmitAttributes()
562 OS << " static const uint16_t IntrinsicsToAttributesMap[] = {\n"; in EmitAttributes()
567 OS << " " << UniqAttributes[&intrinsic] << ", // " in EmitAttributes()
570 OS << " };\n\n"; in EmitAttributes()
572 OS << " std::pair<unsigned, AttributeSet> AS[" << maxArgAttrs + 1 << "];\n"; in EmitAttributes()
573 OS << " unsigned NumAttrs = 0;\n"; in EmitAttributes()
574 OS << " if (id != 0) {\n"; in EmitAttributes()
575 OS << " switch(IntrinsicsToAttributesMap[id - 1]) {\n"; in EmitAttributes()
576 OS << " default: llvm_unreachable(\"Invalid attribute number\");\n"; in EmitAttributes()
578 OS << " case " << UniqAttribute.second << ": {\n"; in EmitAttributes()
591 OS << " AS[" << numAttrs++ << "] = {" << AttrIdx in EmitAttributes()
604 OS << " AS[" << numAttrs++ << "] = {AttributeList::FunctionIndex, " in EmitAttributes()
609 OS << " NumAttrs = " << numAttrs << ";\n"; in EmitAttributes()
610 OS << " break;\n"; in EmitAttributes()
611 OS << " }\n"; in EmitAttributes()
613 OS << " return AttributeList();\n"; in EmitAttributes()
614 OS << " }\n"; in EmitAttributes()
618 OS << " }\n"; in EmitAttributes()
619 OS << " }\n"; in EmitAttributes()
620 OS << " return AttributeList::get(C, ArrayRef(AS, NumAttrs));\n"; in EmitAttributes()
621 OS << "}\n"; in EmitAttributes()
622 OS << "#endif // GET_INTRINSIC_ATTRIBUTES\n\n"; in EmitAttributes()
626 const CodeGenIntrinsicTable &Ints, bool IsClang, raw_ostream &OS) { in EmitIntrinsicToBuiltinMap() argument
648 OS << "// Get the LLVM intrinsic that corresponds to a builtin.\n"; in EmitIntrinsicToBuiltinMap()
649 OS << "// This is used by the C front-end. The builtin name is passed\n"; in EmitIntrinsicToBuiltinMap()
650 OS << "// in as BuiltinName, and a target prefix (e.g. 'ppc') is passed\n"; in EmitIntrinsicToBuiltinMap()
651 OS << "// in as TargetPrefix. The result is assigned to 'IntrinsicID'.\n"; in EmitIntrinsicToBuiltinMap()
652 OS << "#ifdef GET_LLVM_INTRINSIC_FOR_" << UpperCompilerName << "_BUILTIN\n"; in EmitIntrinsicToBuiltinMap()
654 OS << "Intrinsic::ID Intrinsic::getIntrinsicFor" << CompilerName in EmitIntrinsicToBuiltinMap()
659 OS << " return Intrinsic::not_intrinsic;\n"; in EmitIntrinsicToBuiltinMap()
660 OS << "}\n"; in EmitIntrinsicToBuiltinMap()
661 OS << "#endif\n\n"; in EmitIntrinsicToBuiltinMap()
665 OS << " static const char BuiltinNames[] = {\n"; in EmitIntrinsicToBuiltinMap()
666 Table.EmitCharArray(OS); in EmitIntrinsicToBuiltinMap()
667 OS << " };\n\n"; in EmitIntrinsicToBuiltinMap()
669 OS << " struct BuiltinEntry {\n"; in EmitIntrinsicToBuiltinMap()
670 OS << " Intrinsic::ID IntrinID;\n"; in EmitIntrinsicToBuiltinMap()
671 OS << " unsigned StrTabOffset;\n"; in EmitIntrinsicToBuiltinMap()
672 OS << " const char *getName() const {\n"; in EmitIntrinsicToBuiltinMap()
673 OS << " return &BuiltinNames[StrTabOffset];\n"; in EmitIntrinsicToBuiltinMap()
674 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
675 OS << " bool operator<(StringRef RHS) const {\n"; in EmitIntrinsicToBuiltinMap()
676 OS << " return strncmp(getName(), RHS.data(), RHS.size()) < 0;\n"; in EmitIntrinsicToBuiltinMap()
677 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
678 OS << " };\n"; in EmitIntrinsicToBuiltinMap()
680 OS << " StringRef TargetPrefix(TargetPrefixStr);\n\n"; in EmitIntrinsicToBuiltinMap()
684 OS << " "; in EmitIntrinsicToBuiltinMap()
686 OS << "if (TargetPrefix == \"" << I.first << "\") "; in EmitIntrinsicToBuiltinMap()
688 OS << "/* Target Independent Builtins */ "; in EmitIntrinsicToBuiltinMap()
689 OS << "{\n"; in EmitIntrinsicToBuiltinMap()
692 OS << " static const BuiltinEntry " << I.first << "Names[] = {\n"; in EmitIntrinsicToBuiltinMap()
694 OS << " {Intrinsic::" << P.second << ", " in EmitIntrinsicToBuiltinMap()
697 OS << " };\n"; in EmitIntrinsicToBuiltinMap()
698 OS << " auto I = std::lower_bound(std::begin(" << I.first << "Names),\n"; in EmitIntrinsicToBuiltinMap()
699 OS << " std::end(" << I.first << "Names),\n"; in EmitIntrinsicToBuiltinMap()
700 OS << " BuiltinNameStr);\n"; in EmitIntrinsicToBuiltinMap()
701 OS << " if (I != std::end(" << I.first << "Names) &&\n"; in EmitIntrinsicToBuiltinMap()
702 OS << " I->getName() == BuiltinNameStr)\n"; in EmitIntrinsicToBuiltinMap()
703 OS << " return I->IntrinID;\n"; in EmitIntrinsicToBuiltinMap()
704 OS << " }\n"; in EmitIntrinsicToBuiltinMap()
706 OS << " return "; in EmitIntrinsicToBuiltinMap()
707 OS << "Intrinsic::not_intrinsic;\n"; in EmitIntrinsicToBuiltinMap()
708 OS << "}\n"; in EmitIntrinsicToBuiltinMap()
709 OS << "#endif\n\n"; in EmitIntrinsicToBuiltinMap()
712 static void EmitIntrinsicEnums(RecordKeeper &RK, raw_ostream &OS) { in EmitIntrinsicEnums() argument
713 IntrinsicEmitter(RK).run(OS, /*Enums=*/true); in EmitIntrinsicEnums()
719 static void EmitIntrinsicImpl(RecordKeeper &RK, raw_ostream &OS) { in EmitIntrinsicImpl() argument
720 IntrinsicEmitter(RK).run(OS, /*Enums=*/false); in EmitIntrinsicImpl()