MCPcopy Create free account
hub / github.com/NVIDIA/cuda-tile / generateVersionValidation

Function generateVersionValidation

tools/cuda-tile-tblgen/BytecodeGen.cpp:827–872  ·  view source on GitHub ↗

Generate version validation function from SupportedVersion records.

Source from the content-addressed store, hash-verified

825
826/// Generate version validation function from SupportedVersion records.
827static void generateVersionValidation(const RecordKeeper &records,
828 raw_ostream &os) {
829 emitSourceFileHeader("Generated Version Validation", os);
830 auto versionRecords = records.getAllDerivedDefinitions("SupportedVersion");
831 // Group versions by major version.
832 std::map<uint8_t, std::vector<uint8_t>> versionMap;
833
834 for (const Record *record : versionRecords) {
835 unsigned major = record->getValueAsInt("majorVersion");
836 unsigned minor = record->getValueAsInt("minorVersion");
837 versionMap[uint8_t(major)].push_back(uint8_t(minor));
838 }
839
840 os << "// Auto-generated version validation from SupportedVersion records\n";
841
842 for (const auto &[major, minors] : versionMap) {
843 bool isTestingVersion = (major == 250);
844
845 if (isTestingVersion) {
846 os << "#ifdef TILE_IR_INCLUDE_TESTS\n";
847 os << " // Testing versions - only available when TILE_IR_INCLUDE_TESTS "
848 "is defined.\n";
849 }
850
851 os << " if (verMajor == " << static_cast<int>(major) << ") {\n";
852
853 auto minIt = std::min_element(minors.begin(), minors.end());
854 auto maxIt = std::max_element(minors.begin(), minors.end());
855
856 if (*minIt == *maxIt)
857 os << " if (verMinor == " << static_cast<int>(*minIt) << ")\n";
858 else if (*minIt == 0)
859 os << " if (verMinor <= " << static_cast<int>(*maxIt) << ")\n";
860 else
861 os << " if (verMinor >= " << static_cast<int>(*minIt)
862 << " && verMinor <= " << static_cast<int>(*maxIt) << ")\n";
863
864 os << " return BytecodeVersion(verMajor, verMinor, verTag);\n";
865 os << " }\n";
866
867 if (isTestingVersion)
868 os << "#endif // TILE_IR_INCLUDE_TESTS\n";
869 }
870
871 os << " return std::nullopt;\n";
872}
873
874/// Generate getSupportedVersions() function from SupportedVersion records.
875static void generateSupportedVersionsList(const RecordKeeper &records,

Callers 1

generateOpcodesFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected