const ArgList &Args,
std::vector<StringRef> &Features) {
StringRef ArchName;
- llvm::LoongArch::ArchKind ArchKind = llvm::LoongArch::ArchKind::AK_INVALID;
if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) {
- ArchKind = llvm::LoongArch::parseArch(A->getValue());
- if (ArchKind == llvm::LoongArch::ArchKind::AK_INVALID) {
+ if (!llvm::LoongArch::isValidArchName(A->getValue())) {
D.Diag(clang::diag::err_drv_invalid_arch_name) << A->getAsString(Args);
return;
}
#define LOONGARCH_FEATURE(NAME, KIND)
#endif
-LOONGARCH_FEATURE("invalid", FK_INVALID)
-LOONGARCH_FEATURE("none", FK_NONE)
LOONGARCH_FEATURE("+64bit", FK_64BIT)
LOONGARCH_FEATURE("+f", FK_FP32)
LOONGARCH_FEATURE("+d", FK_FP64)
#define LOONGARCH_ARCH(NAME, KIND, FEATURES)
#endif
-LOONGARCH_ARCH("invalid", AK_INVALID, FK_INVALID)
LOONGARCH_ARCH("loongarch64", AK_LOONGARCH64, FK_64BIT | FK_FP32 | FK_FP64 | FK_UAL)
LOONGARCH_ARCH("la464", AK_LA464, FK_64BIT | FK_FP32 | FK_FP64 | FK_LSX | FK_LASX | FK_UAL)
namespace LoongArch {
enum FeatureKind : uint32_t {
- FK_INVALID = 0,
- FK_NONE = 1,
-
// 64-bit ISA is available.
FK_64BIT = 1 << 1,
uint32_t Features;
};
-ArchKind parseArch(StringRef Arch);
+bool isValidArchName(StringRef Arch);
bool getArchFeatures(StringRef Arch, std::vector<StringRef> &Features);
} // namespace LoongArch
-//==-- LoongArch64TargetParser - Parser for LoongArch64 features --*- C++ -*-=//
+//===-- LoongArchTargetParser - Parser for LoongArch features --*- C++ -*-====//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
#include "llvm/TargetParser/LoongArchTargetParser.def"
};
-LoongArch::ArchKind LoongArch::parseArch(StringRef Arch) {
+bool LoongArch::isValidArchName(StringRef Arch) {
for (const auto A : AllArchs)
if (A.Name == Arch)
- return A.Kind;
-
- return LoongArch::ArchKind::AK_INVALID;
+ return true;
+ return false;
}
bool LoongArch::getArchFeatures(StringRef Arch,
for (const auto A : AllArchs) {
if (A.Name == Arch) {
for (const auto F : AllFeatures)
- if ((A.Features & F.Kind) == F.Kind && F.Kind != FK_INVALID)
+ if ((A.Features & F.Kind) == F.Kind)
Features.push_back(F.Name);
return true;
}