forked from OSchip/llvm-project
Make march/target-cpu print a note with the list of valid values for ARM
When rejecting a march= or target-cpu command line parameter, the message is quite lacking. This patch adds a note that prints all possible values for the current target, if the target supports it. This adds support for the ARM/AArch64 targets (more to come!). Differential Revision: https://reviews.llvm.org/D42978 llvm-svn: 324673
This commit is contained in:
parent
b38799c105
commit
3ec1743d0d
|
@ -188,6 +188,7 @@ def note_invalid_subexpr_in_const_expr : Note<
|
|||
def err_target_unknown_triple : Error<
|
||||
"unknown target triple '%0', please use -triple or -arch">;
|
||||
def err_target_unknown_cpu : Error<"unknown target CPU '%0'">;
|
||||
def note_valid_options : Note<"valid target CPU values are: %0">;
|
||||
def err_target_unsupported_cpu_for_micromips : Error<
|
||||
"micromips is not supported for target CPU '%0'">;
|
||||
def err_target_unknown_abi : Error<"unknown target ABI '%0'">;
|
||||
|
|
|
@ -867,6 +867,9 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
/// Fill a SmallVectorImpl with the valid values to setCPU.
|
||||
virtual void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const {}
|
||||
|
||||
/// brief Determine whether this TargetInfo supports the given CPU name.
|
||||
virtual bool isValidCPUName(StringRef Name) const {
|
||||
return true;
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "Targets/X86.h"
|
||||
#include "Targets/XCore.h"
|
||||
#include "clang/Basic/Diagnostic.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
|
||||
using namespace clang;
|
||||
|
@ -607,6 +608,10 @@ TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags,
|
|||
// Set the target CPU if specified.
|
||||
if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {
|
||||
Diags.Report(diag::err_target_unknown_cpu) << Opts->CPU;
|
||||
SmallVector<StringRef, 32> ValidList;
|
||||
Target->fillValidCPUList(ValidList);
|
||||
if (!ValidList.empty())
|
||||
Diags.Report(diag::note_valid_options) << llvm::join(ValidList, ", ");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
|
|
@ -101,6 +101,11 @@ bool AArch64TargetInfo::setCPU(const std::string &Name) {
|
|||
return isValidCPUName(Name);
|
||||
}
|
||||
|
||||
void AArch64TargetInfo::fillValidCPUList(
|
||||
SmallVectorImpl<StringRef> &Values) const {
|
||||
llvm::AArch64::fillValidCPUArchList(Values);
|
||||
}
|
||||
|
||||
void AArch64TargetInfo::getTargetDefinesARMV81A(const LangOptions &Opts,
|
||||
MacroBuilder &Builder) const {
|
||||
Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
|
||||
|
|
|
@ -46,6 +46,7 @@ public:
|
|||
bool setABI(const std::string &Name) override;
|
||||
|
||||
bool isValidCPUName(StringRef Name) const override;
|
||||
void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override;
|
||||
bool setCPU(const std::string &Name) override;
|
||||
|
||||
bool useFP16ConversionIntrinsics() const override {
|
||||
|
|
|
@ -478,6 +478,10 @@ bool ARMTargetInfo::isValidCPUName(StringRef Name) const {
|
|||
llvm::ARM::parseCPUArch(Name) != llvm::ARM::ArchKind::INVALID;
|
||||
}
|
||||
|
||||
void ARMTargetInfo::fillValidCPUList(SmallVectorImpl<StringRef> &Values) const {
|
||||
llvm::ARM::fillValidCPUArchList(Values);
|
||||
}
|
||||
|
||||
bool ARMTargetInfo::setCPU(const std::string &Name) {
|
||||
if (Name != "generic")
|
||||
setArchInfo(llvm::ARM::parseCPUArch(Name));
|
||||
|
|
|
@ -122,6 +122,8 @@ public:
|
|||
bool hasFeature(StringRef Feature) const override;
|
||||
|
||||
bool isValidCPUName(StringRef Name) const override;
|
||||
void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override;
|
||||
|
||||
bool setCPU(const std::string &Name) override;
|
||||
|
||||
bool setFPMath(StringRef Name) override;
|
||||
|
|
Loading…
Reference in New Issue