Home | History | Annotate | Download | only in TableGen

Lines Matching refs:intrinsic

1 //===- IntrinsicEmitter.cpp - Generate intrinsic information --------------===//
10 // This tablegen backend emits information about intrinsic functions.
27 EmitSourceFileHeader("Intrinsic Function Source Fragment", OS);
39 // Emit the intrinsic ID -> name table.
42 // Emit the intrinsic ID -> overload table.
48 // Emit the intrinsic verifier.
51 // Emit the intrinsic declaration generator.
54 // Emit the intrinsic parameter attributes.
57 // Emit intrinsic alias analysis mod/ref behavior.
103 // Build a 'first character of function name' -> intrinsic # mapping.
113 // Emit the intrinsic matching stuff by first letter.
125 std::string Result = "return " + TargetPrefix + "Intrinsic::" +
152 OS << "// Intrinsic ID to name table\n";
154 OS << " // Note that entry #0 is the invalid intrinsic!\n";
163 OS << "// Intrinsic ID to overload table\n";
165 OS << " // Note that entry #0 is the invalid intrinsic!\n";
246 // Intrinsic::getDeclaration function. Consequently, we only want to
261 // treat it as an ordinary (not overloaded) intrinsic.
321 OS << " default: assert(0 && \"Invalid intrinsic!\");\n";
338 OS << " case Intrinsic::" << Ints[I->second[i]].EnumName << ":\t\t// "
414 OS << "// Code for generating Intrinsic function declarations.\n";
417 OS << " default: assert(0 && \"Invalid intrinsic!\");\n";
430 std::string IntrinsicStr = TargetPrefix + "Intrinsic::";
475 ModRefKind getModRefKind(const CodeGenIntrinsic &intrinsic) {
476 switch (intrinsic.ModRef) {
508 /// EmitAttributes - This emits the Intrinsic::getAttributes method.
515 << "Intrinsic::ID id) {\n";
517 OS << "AttrListPtr Intrinsic::getAttributes(ID id) {\n";
523 const CodeGenIntrinsic &intrinsic = Ints[i];
524 sortedIntrinsics[i] = &intrinsic;
526 std::max(maxArgAttrs, unsigned(intrinsic.ArgumentAttributes.size()));
542 const CodeGenIntrinsic &intrinsic = *sortedIntrinsics[i];
543 OS << " case " << TargetPrefix << "Intrinsic::"
544 << intrinsic.EnumName << ":\n";
548 if (i + 1 != e && !precedes(&intrinsic, sortedIntrinsics[i + 1]))
555 for (unsigned ai = 0, ae = intrinsic.ArgumentAttributes.size(); ai != ae;) {
556 unsigned argNo = intrinsic.ArgumentAttributes[ai].first;
566 switch (intrinsic.ArgumentAttributes[ai].second) {
574 } while (ai != ae && intrinsic.ArgumentAttributes[ai].first == argNo);
579 ModRefKind modRef = getModRefKind(intrinsic);
581 if (!intrinsic.canThrow || modRef) {
583 if (!intrinsic.canThrow) {
609 /// EmitModRefBehavior - Determine intrinsic alias analysis mod/ref behavior.
612 OS << "// Determine intrinsic alias analysis mod/ref behavior.\n";
619 OS << "case " << TargetPrefix << "Intrinsic::" << Ints[i].EnumName
644 OS << "// Get the GCC builtin that corresponds to an LLVM intrinsic.\n";
650 OS << " case Intrinsic::" << Ints[i].EnumName << ": BuiltinName = \""
669 "return " + TargetPrefix + "Intrinsic::" + I->second + ";";
689 throw "Intrinsic '" + Ints[i].TheDef->getName() +
694 OS << "// Get the LLVM intrinsic that corresponds to a GCC builtin.\n";
701 OS << "static " << TargetPrefix << "Intrinsic::ID "
705 OS << "Intrinsic::ID Intrinsic::getIntrinsicForGCCBuiltin(const char "
727 OS << "(" << TargetPrefix << "Intrinsic::ID)";
728 OS << "Intrinsic::not_intrinsic;\n";