diff options
| author | Amara Emerson <amara.emerson@arm.com> | 2013-10-31 09:32:33 +0000 | 
|---|---|---|
| committer | Amara Emerson <amara.emerson@arm.com> | 2013-10-31 09:32:33 +0000 | 
| commit | 703da2ea9883a534467a2e04a07c85243e08bf5d (patch) | |
| tree | bcd1181775019b77650485de0ccce7bff9cff3cd /clang/lib | |
| parent | f80f95fcc7e85c6129ac239721cb5a8b1ca82652 (diff) | |
| download | bcm5719-llvm-703da2ea9883a534467a2e04a07c85243e08bf5d.tar.gz bcm5719-llvm-703da2ea9883a534467a2e04a07c85243e08bf5d.zip | |
[AArch64] Add some CPU targets for "generic", A-53 and A-57.
Enables the clang driver to begin targeting specific CPUs. Introduced a
"generic" CPU which will ensure that the optional FP feature is enabled
by default when it gets to LLVM, without needing any extra arguments.
Cortex-A53 and A-57 are also introduced with tests, although backend
handling of them does not yet exist.
llvm-svn: 193740
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Basic/Targets.cpp | 7 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 23 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.h | 2 | 
3 files changed, 32 insertions, 0 deletions
| diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index a7e99647154..29efa2c74ea 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -3472,6 +3472,13 @@ public:      return Feature == "aarch64" || (Feature == "neon" && FPU == NeonMode);    } +  virtual bool setCPU(const std::string &Name) { +    return llvm::StringSwitch<bool>(Name) +             .Case("generic", true) +             .Cases("cortex-a53", "cortex-a57", true) +             .Default(false); +  } +    virtual bool handleTargetFeatures(std::vector<std::string> &Features,                                      DiagnosticsEngine &Diags) {      FPU = FPUMode; diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 680f89a75ca..646fb613638 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -539,6 +539,26 @@ static std::string getARMTargetCPU(const ArgList &Args,      .Default("arm7tdmi");  } +/// getAArch64TargetCPU - Get the (LLVM) name of the AArch64 cpu we are targeting. +// +// FIXME: tblgen this. +static std::string getAArch64TargetCPU(const ArgList &Args, +                                       const llvm::Triple &Triple) { +  // FIXME: Warn on inconsistent use of -mcpu and -march. + +  // If we have -mcpu=, use that. +  if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) { +    StringRef MCPU = A->getValue(); +    // Handle -mcpu=native. +    if (MCPU == "native") +      return llvm::sys::getHostCPUName(); +    else +      return MCPU; +  } + +  return "generic"; +} +  // FIXME: Move to target hook.  static bool isSignedCharDefault(const llvm::Triple &Triple) {    switch (Triple.getArch()) { @@ -1304,6 +1324,9 @@ static std::string getCPUName(const ArgList &Args, const llvm::Triple &T) {    default:      return ""; +  case llvm::Triple::aarch64: +    return getAArch64TargetCPU(Args, T); +    case llvm::Triple::arm:    case llvm::Triple::thumb:      return getARMTargetCPU(Args, T); diff --git a/clang/lib/Driver/Tools.h b/clang/lib/Driver/Tools.h index 4a0626d1846..d5b2848c9b0 100644 --- a/clang/lib/Driver/Tools.h +++ b/clang/lib/Driver/Tools.h @@ -49,6 +49,8 @@ using llvm::opt::ArgStringList;                                   const InputInfo &Output,                                   const InputInfoList &Inputs) const; +    void AddAArch64TargetArgs(const llvm::opt::ArgList &Args, +                              llvm::opt::ArgStringList &CmdArgs) const;      void AddARMTargetArgs(const llvm::opt::ArgList &Args,                            llvm::opt::ArgStringList &CmdArgs,                            bool KernelOrKext) const; | 

