xref: /llvm-project/mlir/include/mlir/Dialect/AMDGPU/Utils/Chipset.h (revision 763bc9249cf0b7da421182e24716d9a569fb5184)
1 //===- Chipset.h - AMDGPU Chipset version struct ----------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 #ifndef MLIR_DIALECT_AMDGPU_UTILS_CHIPSET_H_
9 #define MLIR_DIALECT_AMDGPU_UTILS_CHIPSET_H_
10 
11 #include "mlir/Support/LLVM.h"
12 #include <tuple>
13 
14 namespace mlir::amdgpu {
15 
16 /// Represents the amdgpu gfx chipset version, e.g., gfx90a, gfx942, gfx1103.
17 /// Note that the leading digits form a decimal number, while the last two
18 /// digits for a hexadecimal number. For example:
19 ///   gfx942  --> major = 9, minor = 0x4, stepping = 0x2
20 ///   gfx90a  --> major = 9, minor = 0x0, stepping = 0xa
21 ///   gfx1103 --> major = 10, minor = 0x0, stepping = 0x3
22 struct Chipset {
23   unsigned majorVersion = 0;    // The major version (decimal).
24   unsigned minorVersion = 0;    // The minor version (hexadecimal).
25   unsigned steppingVersion = 0; // The stepping version (hexadecimal).
26 
27   constexpr Chipset() = default;
28   constexpr Chipset(unsigned major, unsigned minor, unsigned stepping)
29       : majorVersion(major), minorVersion(minor), steppingVersion(stepping) {};
30 
31   /// Parses the chipset version string and returns the chipset on success, and
32   /// failure otherwise.
33   static FailureOr<Chipset> parse(StringRef name);
34 
35   std::tuple<unsigned, unsigned, unsigned> asTuple() const {
36     return {majorVersion, minorVersion, steppingVersion};
37   }
38 
39 #define DEFINE_COMP_OPERATOR(OPERATOR)                                         \
40   friend bool operator OPERATOR(const Chipset &lhs, const Chipset &rhs) {      \
41     return lhs.asTuple() OPERATOR rhs.asTuple();                               \
42   }
43   DEFINE_COMP_OPERATOR(==)
44   DEFINE_COMP_OPERATOR(!=)
45   DEFINE_COMP_OPERATOR(<)
46   DEFINE_COMP_OPERATOR(<=)
47   DEFINE_COMP_OPERATOR(>)
48   DEFINE_COMP_OPERATOR(>=)
49 #undef DEFINE_COMP_OPERATOR
50 };
51 
52 } // namespace mlir::amdgpu
53 
54 #endif
55