//===- Chipset.h - AMDGPU Chipset version struct ----------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef MLIR_DIALECT_AMDGPU_UTILS_CHIPSET_H_ #define MLIR_DIALECT_AMDGPU_UTILS_CHIPSET_H_ #include "mlir/Support/LLVM.h" #include namespace mlir::amdgpu { /// Represents the amdgpu gfx chipset version, e.g., gfx90a, gfx942, gfx1103. /// Note that the leading digits form a decimal number, while the last two /// digits form a hexadecimal number. For example: /// gfx942 --> major = 9, minor = 0x4, stepping = 0x2 /// gfx90a --> major = 9, minor = 0x0, stepping = 0xa /// gfx1103 --> major = 11, minor = 0x0, stepping = 0x3 struct Chipset { unsigned majorVersion = 0; // The major version (decimal). unsigned minorVersion = 0; // The minor version (hexadecimal). unsigned steppingVersion = 0; // The stepping version (hexadecimal). constexpr Chipset() = default; constexpr Chipset(unsigned major, unsigned minor, unsigned stepping) : majorVersion(major), minorVersion(minor), steppingVersion(stepping) {}; /// Parses the chipset version string and returns the chipset on success, and /// failure otherwise. static FailureOr parse(StringRef name); std::tuple asTuple() const { return {majorVersion, minorVersion, steppingVersion}; } #define DEFINE_COMP_OPERATOR(OPERATOR) \ friend bool operator OPERATOR(const Chipset &lhs, const Chipset &rhs) { \ return lhs.asTuple() OPERATOR rhs.asTuple(); \ } DEFINE_COMP_OPERATOR(==) DEFINE_COMP_OPERATOR(!=) DEFINE_COMP_OPERATOR(<) DEFINE_COMP_OPERATOR(<=) DEFINE_COMP_OPERATOR(>) DEFINE_COMP_OPERATOR(>=) #undef DEFINE_COMP_OPERATOR }; inline bool hasOcpFp8(const Chipset &chipset) { return (chipset.majorVersion == 9 && chipset.minorVersion >= 5) || chipset.majorVersion >= 12; } } // namespace mlir::amdgpu #endif