Home | History | Annotate | Download | only in TableGen

Lines Matching defs: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.
100 // Build a 'first character of function name' -> intrinsic # mapping.
110 // Emit the intrinsic matching stuff by first letter.
122 std::string Result = "return " + TargetPrefix + "Intrinsic::" +
149 OS << "// Intrinsic ID to name table\n";
151 OS << " // Note that entry #0 is the invalid intrinsic!\n";
160 OS << "// Intrinsic ID to overload bitset\n";
165 // Add one to the index so we emit a null bit for the invalid #0 intrinsic.
172 // OTable contains a true bit at the position if the intrinsic is overloaded.
248 // Intrinsic::getDeclaration function. Consequently, we only want to
263 // treat it as an ordinary (not overloaded) intrinsic.
323 OS << " default: llvm_unreachable(\"Invalid intrinsic!\");\n";
340 OS << " case Intrinsic::" << Ints[I->second[i]].EnumName << ":\t\t// "
416 OS << "// Code for generating Intrinsic function declarations.\n";
419 OS << " default: llvm_unreachable(\"Invalid intrinsic!\");\n";
432 std::string IntrinsicStr = TargetPrefix + "Intrinsic::";
477 ModRefKind getModRefKind(const CodeGenIntrinsic &intrinsic) {
478 switch (intrinsic.ModRef) {
509 /// EmitAttributes - This emits the Intrinsic::getAttributes method.
516 << "Intrinsic::ID id) {\n";
518 OS << "AttrListPtr Intrinsic::getAttributes(ID id) {\n";
527 const CodeGenIntrinsic &intrinsic = Ints[i];
529 std::max(maxArgAttrs, unsigned(intrinsic.ArgumentAttributes.size()));
530 unsigned &N = UniqAttributes[&intrinsic];
542 const CodeGenIntrinsic &intrinsic = Ints[i];
544 OS << " " << UniqAttributes[&intrinsic] << ", // "
545 << intrinsic.Name << "\n";
554 OS << "Intrinsic::num_intrinsics";
563 const CodeGenIntrinsic &intrinsic = *(I->first);
569 for (unsigned ai = 0, ae = intrinsic.ArgumentAttributes.size(); ai != ae;) {
570 unsigned argNo = intrinsic.ArgumentAttributes[ai].first;
580 switch (intrinsic.ArgumentAttributes[ai].second) {
588 } while (ai != ae && intrinsic.ArgumentAttributes[ai].first == argNo);
593 ModRefKind modRef = getModRefKind(intrinsic);
595 if (!intrinsic.canThrow || modRef) {
597 if (!intrinsic.canThrow) {
624 /// EmitModRefBehavior - Determine intrinsic alias analysis mod/ref behavior.
627 OS << "// Determine intrinsic alias analysis mod/ref behavior.\n"
629 << "assert(iid <= Intrinsic::" << Ints.back().EnumName << " && "
630 << "\"Unknown intrinsic.\");\n\n";
670 "return " + TargetPrefix + "Intrinsic::" + I->second + ";";
690 throw "Intrinsic '" + Ints[i].TheDef->getName() +
695 OS << "// Get the LLVM intrinsic that corresponds to a GCC builtin.\n";
702 OS << "static " << TargetPrefix << "Intrinsic::ID "
706 OS << "Intrinsic::ID Intrinsic::getIntrinsicForGCCBuiltin(const char "
728 OS << "(" << TargetPrefix << "Intrinsic::ID)";
729 OS << "Intrinsic::not_intrinsic;\n";