Index: include/llvm/Support/TargetParser.h =================================================================== --- include/llvm/Support/TargetParser.h +++ include/llvm/Support/TargetParser.h @@ -137,6 +137,7 @@ ArchKind parseArch(StringRef Arch); unsigned parseArchExt(StringRef ArchExt); ArchKind parseCPUArch(StringRef CPU); +void fillValidCPUArchList(SmallVectorImpl &Values); ISAKind parseArchISA(StringRef Arch); EndianKind parseArchEndian(StringRef Arch); ProfileKind parseArchProfile(StringRef Arch); @@ -205,6 +206,7 @@ AArch64::ArchKind parseArch(StringRef Arch); ArchExtKind parseArchExt(StringRef ArchExt); ArchKind parseCPUArch(StringRef CPU); +void fillValidCPUArchList(SmallVectorImpl &Values); ARM::ISAKind parseArchISA(StringRef Arch); ARM::EndianKind parseArchEndian(StringRef Arch); ARM::ProfileKind parseArchProfile(StringRef Arch); Index: lib/Support/TargetParser.cpp =================================================================== --- lib/Support/TargetParser.cpp +++ lib/Support/TargetParser.cpp @@ -689,6 +689,20 @@ return ARM::ArchKind::INVALID; } +void llvm::ARM::fillValidCPUArchList(SmallVectorImpl &Values) { + for (const CpuNames &Arch : CPUNames) { + if (Arch.ArchID != ARM::ArchKind::INVALID) + Values.emplace_back(Arch.NameCStr, Arch.NameLength); + } +} + +void llvm::AArch64::fillValidCPUArchList(SmallVectorImpl &Values) { + for (const CpuNames &Arch : AArch64CPUNames) { + if (Arch.ArchID != AArch64::ArchKind::INVALID) + Values.emplace_back(Arch.NameCStr, Arch.NameLength); + } +} + // ARM, Thumb, AArch64 ARM::ISAKind ARM::parseArchISA(StringRef Arch) { return StringSwitch(Arch)