1*cab44c51SKrzysztof Drewniak //===- Chipset.cpp - AMDGPU Chipset version struct parsing -----------===//
2*cab44c51SKrzysztof Drewniak //
3*cab44c51SKrzysztof Drewniak // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*cab44c51SKrzysztof Drewniak // See https://llvm.org/LICENSE.txt for license information.
5*cab44c51SKrzysztof Drewniak // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*cab44c51SKrzysztof Drewniak //
7*cab44c51SKrzysztof Drewniak //===----------------------------------------------------------------------===//
8*cab44c51SKrzysztof Drewniak 
9*cab44c51SKrzysztof Drewniak #include "mlir/Conversion/AMDGPUToROCDL/Chipset.h"
10*cab44c51SKrzysztof Drewniak #include "mlir/Support/LLVM.h"
11*cab44c51SKrzysztof Drewniak #include "llvm/ADT/StringRef.h"
12*cab44c51SKrzysztof Drewniak 
13*cab44c51SKrzysztof Drewniak using namespace mlir;
14*cab44c51SKrzysztof Drewniak using namespace mlir::amdgpu;
15*cab44c51SKrzysztof Drewniak 
parse(StringRef name)16*cab44c51SKrzysztof Drewniak FailureOr<Chipset> Chipset::parse(StringRef name) {
17*cab44c51SKrzysztof Drewniak   if (!name.startswith("gfx"))
18*cab44c51SKrzysztof Drewniak     return failure();
19*cab44c51SKrzysztof Drewniak   unsigned major = 0;
20*cab44c51SKrzysztof Drewniak   unsigned minor = 0;
21*cab44c51SKrzysztof Drewniak   StringRef majorRef = name.drop_front(3).drop_back(2);
22*cab44c51SKrzysztof Drewniak   StringRef minorRef = name.take_back(2);
23*cab44c51SKrzysztof Drewniak   if (majorRef.getAsInteger(10, major))
24*cab44c51SKrzysztof Drewniak     return failure();
25*cab44c51SKrzysztof Drewniak   if (minorRef.getAsInteger(16, minor))
26*cab44c51SKrzysztof Drewniak     return failure();
27*cab44c51SKrzysztof Drewniak   return Chipset(major, minor);
28*cab44c51SKrzysztof Drewniak }
29