1 //===-- LoongArchTargetParser - Parser for LoongArch features --*- 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 // 9 // This file implements a target parser to recognise LoongArch hardware features 10 // such as CPU/ARCH and extension names. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/TargetParser/LoongArchTargetParser.h" 15 16 using namespace llvm; 17 using namespace llvm::LoongArch; 18 19 const FeatureInfo AllFeatures[] = { 20 #define LOONGARCH_FEATURE(NAME, KIND) {NAME, KIND}, 21 #include "llvm/TargetParser/LoongArchTargetParser.def" 22 }; 23 24 const ArchInfo AllArchs[] = { 25 #define LOONGARCH_ARCH(NAME, KIND, FEATURES) \ 26 {NAME, LoongArch::ArchKind::KIND, FEATURES}, 27 #include "llvm/TargetParser/LoongArchTargetParser.def" 28 }; 29 30 bool LoongArch::isValidArchName(StringRef Arch) { 31 for (const auto A : AllArchs) 32 if (A.Name == Arch) 33 return true; 34 return false; 35 } 36 37 bool LoongArch::getArchFeatures(StringRef Arch, 38 std::vector<StringRef> &Features) { 39 for (const auto A : AllArchs) { 40 if (A.Name == Arch) { 41 for (const auto F : AllFeatures) 42 if ((A.Features & F.Kind) == F.Kind) 43 Features.push_back(F.Name); 44 return true; 45 } 46 } 47 return false; 48 } 49 50 bool LoongArch::isValidCPUName(StringRef Name) { return isValidArchName(Name); } 51 52 void LoongArch::fillValidCPUList(SmallVectorImpl<StringRef> &Values) { 53 for (const auto A : AllArchs) 54 Values.emplace_back(A.Name); 55 } 56 57 StringRef LoongArch::getDefaultArch(bool Is64Bit) { 58 // TODO: use a real 32-bit arch name. 59 return Is64Bit ? "loongarch64" : ""; 60 } 61