diff options
Diffstat (limited to 'clang/lib/Basic/Targets')
| -rw-r--r-- | clang/lib/Basic/Targets/X86.cpp | 15 | ||||
| -rw-r--r-- | clang/lib/Basic/Targets/X86.h | 2 | 
2 files changed, 15 insertions, 2 deletions
| diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp index 484a83a494e..5f9f6bb2f05 100644 --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -15,6 +15,7 @@  #include "clang/Basic/Builtins.h"  #include "clang/Basic/Diagnostic.h"  #include "clang/Basic/TargetBuiltins.h" +#include "llvm/ADT/StringExtras.h"  #include "llvm/ADT/StringRef.h"  #include "llvm/ADT/StringSwitch.h"  #include "llvm/Support/TargetParser.h" @@ -1648,8 +1649,6 @@ std::string X86TargetInfo::convertConstraint(const char *&Constraint) const {  bool X86TargetInfo::checkCPUKind(CPUKind Kind) const {    // Perform any per-CPU checks necessary to determine if this CPU is    // acceptable. -  // FIXME: This results in terrible diagnostics. Clang just says the CPU is -  // invalid without explaining *why*.    switch (Kind) {    case CK_Generic:      // No processor selected! @@ -1662,6 +1661,18 @@ bool X86TargetInfo::checkCPUKind(CPUKind Kind) const {    llvm_unreachable("Unhandled CPU kind");  } +void X86TargetInfo::fillValidCPUList(SmallVectorImpl<StringRef> &Values) const { +#define PROC(ENUM, STRING, IS64BIT)                                            \ +  if (IS64BIT || getTriple().getArch() == llvm::Triple::x86)                   \ +    Values.emplace_back(STRING); +  // Go through CPUKind checking to ensure that the alias is de-aliased and  +  // 64 bit-ness is checked. +#define PROC_ALIAS(ENUM, ALIAS)                                                \ +  if (checkCPUKind(getCPUKind(ALIAS)))                                         \ +    Values.emplace_back(ALIAS); +#include "clang/Basic/X86Target.def" +} +  X86TargetInfo::CPUKind X86TargetInfo::getCPUKind(StringRef CPU) const {    return llvm::StringSwitch<CPUKind>(CPU)  #define PROC(ENUM, STRING, IS64BIT) .Case(STRING, CK_##ENUM) diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h index be831ba7e6f..b46778f3da8 100644 --- a/clang/lib/Basic/Targets/X86.h +++ b/clang/lib/Basic/Targets/X86.h @@ -264,6 +264,8 @@ public:      return checkCPUKind(getCPUKind(Name));    } +  void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override; +    bool setCPU(const std::string &Name) override {      return checkCPUKind(CPU = getCPUKind(Name));    } | 

