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