xref: /llvm-project/mlir/lib/Dialect/AMDGPU/Utils/Chipset.cpp (revision 763bc9249cf0b7da421182e24716d9a569fb5184)
1b2f1d069SJakub Kuderski //===- Chipset.cpp - AMDGPU Chipset version struct parsing ----------------===//
2cc470374SKrzysztof Drewniak //
3cc470374SKrzysztof Drewniak // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4cc470374SKrzysztof Drewniak // See https://llvm.org/LICENSE.txt for license information.
5cc470374SKrzysztof Drewniak // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6cc470374SKrzysztof Drewniak //
7cc470374SKrzysztof Drewniak //===----------------------------------------------------------------------===//
8cc470374SKrzysztof Drewniak 
9cc470374SKrzysztof Drewniak #include "mlir/Dialect/AMDGPU/Utils/Chipset.h"
10cc470374SKrzysztof Drewniak #include "llvm/ADT/StringRef.h"
11cc470374SKrzysztof Drewniak 
12b2f1d069SJakub Kuderski namespace mlir::amdgpu {
13cc470374SKrzysztof Drewniak 
14cc470374SKrzysztof Drewniak FailureOr<Chipset> Chipset::parse(StringRef name) {
15b2f1d069SJakub Kuderski   if (!name.consume_front("gfx"))
16cc470374SKrzysztof Drewniak     return failure();
17b2f1d069SJakub Kuderski   if (name.size() < 3)
18b2f1d069SJakub Kuderski     return failure();
19b2f1d069SJakub Kuderski 
20cc470374SKrzysztof Drewniak   unsigned major = 0;
21cc470374SKrzysztof Drewniak   unsigned minor = 0;
22*763bc924SJakub Kuderski   unsigned stepping = 0;
23b2f1d069SJakub Kuderski 
24b2f1d069SJakub Kuderski   StringRef majorRef = name.drop_back(2);
25*763bc924SJakub Kuderski   StringRef minorRef = name.take_back(2).drop_back(1);
26*763bc924SJakub Kuderski   StringRef steppingRef = name.take_back(1);
27cc470374SKrzysztof Drewniak   if (majorRef.getAsInteger(10, major))
28cc470374SKrzysztof Drewniak     return failure();
29cc470374SKrzysztof Drewniak   if (minorRef.getAsInteger(16, minor))
30cc470374SKrzysztof Drewniak     return failure();
31*763bc924SJakub Kuderski   if (steppingRef.getAsInteger(16, stepping))
32*763bc924SJakub Kuderski     return failure();
33*763bc924SJakub Kuderski   return Chipset(major, minor, stepping);
34cc470374SKrzysztof Drewniak }
35b2f1d069SJakub Kuderski 
36b2f1d069SJakub Kuderski } // namespace mlir::amdgpu
37