Ping? Can you answer this? On Nov 1, 2013 3:04 PM, "Eric Christopher" <[email protected]> wrote:
> Out of curiosity this seems to be enshrining for AArch64 the -march/-mcpu > stuff from the old 32-bit arm gcc port. Why is this necessary? Why not just > -march=cortex-a53 to generate code for a particular architecture and > -mtune=cortex-a53 to tune, but not use any cpu specific instructions for a > particular architecture? Can you explain what your thoughts are here? > > -eric > > > On Thu, Oct 31, 2013 at 2:32 AM, Amara Emerson <[email protected]>wrote: > >> Author: aemerson >> Date: Thu Oct 31 04:32:33 2013 >> New Revision: 193740 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=193740&view=rev >> Log: >> [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. >> >> Added: >> cfe/trunk/test/Driver/aarch64-cpus.c >> cfe/trunk/test/Driver/aarch64-mfpu.c >> Modified: >> cfe/trunk/lib/Basic/Targets.cpp >> cfe/trunk/lib/Driver/Tools.cpp >> cfe/trunk/lib/Driver/Tools.h >> >> Modified: cfe/trunk/lib/Basic/Targets.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=193740&r1=193739&r2=193740&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Basic/Targets.cpp (original) >> +++ cfe/trunk/lib/Basic/Targets.cpp Thu Oct 31 04:32:33 2013 >> @@ -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; >> >> Modified: cfe/trunk/lib/Driver/Tools.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=193740&r1=193739&r2=193740&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/Tools.cpp (original) >> +++ cfe/trunk/lib/Driver/Tools.cpp Thu Oct 31 04:32:33 2013 >> @@ -539,6 +539,26 @@ static std::string getARMTargetCPU(const >> .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 ArgL >> default: >> return ""; >> >> + case llvm::Triple::aarch64: >> + return getAArch64TargetCPU(Args, T); >> + >> case llvm::Triple::arm: >> case llvm::Triple::thumb: >> return getARMTargetCPU(Args, T); >> >> Modified: cfe/trunk/lib/Driver/Tools.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=193740&r1=193739&r2=193740&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/Tools.h (original) >> +++ cfe/trunk/lib/Driver/Tools.h Thu Oct 31 04:32:33 2013 >> @@ -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; >> >> Added: cfe/trunk/test/Driver/aarch64-cpus.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-cpus.c?rev=193740&view=auto >> >> ============================================================================== >> --- cfe/trunk/test/Driver/aarch64-cpus.c (added) >> +++ cfe/trunk/test/Driver/aarch64-cpus.c Thu Oct 31 04:32:33 2013 >> @@ -0,0 +1,10 @@ >> +// Check target CPUs are correctly passed. >> + >> +// RUN: %clang -target aarch64 -### -c %s 2>&1 | FileCheck >> -check-prefix=GENERIC %s >> +// GENERIC: "-cc1"{{.*}} "-triple" "aarch64" {{.*}} "-target-cpu" >> "generic" >> + >> +// RUN: %clang -target aarch64 -mcpu=cortex-a53 -### -c %s 2>&1 | >> FileCheck -check-prefix=CA53 %s >> +// CA53: "-cc1"{{.*}} "-triple" "aarch64" {{.*}} "-target-cpu" >> "cortex-a53" >> + >> +// RUN: %clang -target aarch64 -mcpu=cortex-a57 -### -c %s 2>&1 | >> FileCheck -check-prefix=CA57 %s >> +// CA57: "-cc1"{{.*}} "-triple" "aarch64" {{.*}} "-target-cpu" >> "cortex-a57" >> >> Added: cfe/trunk/test/Driver/aarch64-mfpu.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-mfpu.c?rev=193740&view=auto >> >> ============================================================================== >> --- cfe/trunk/test/Driver/aarch64-mfpu.c (added) >> +++ cfe/trunk/test/Driver/aarch64-mfpu.c Thu Oct 31 04:32:33 2013 >> @@ -0,0 +1,26 @@ >> +// Test that different values of -mfpu pick correct AArch64 FPU >> target-feature(s). >> + >> +// RUN: %clang -target aarch64-linux-eabi -mfpu=neon %s -### -o %t.o >> 2>&1 \ >> +// RUN: | FileCheck --check-prefix=CHECK-NEON %s >> +// CHECK-NEON: "-target-feature" "+neon" >> + >> +// RUN: %clang -target aarch64-linux-eabi -mfpu=fp-armv8 %s -### -o %t.o >> 2>&1 \ >> +// RUN: | FileCheck --check-prefix=CHECK-FP-ARMV8 %s >> +// CHECK-FP-ARMV8: "-target-feature" "+fp-armv8" >> + >> +// RUN: %clang -target aarch64-linux-eabi -mfpu=neon-fp-armv8 %s -### >> 2>&1 \ >> +// RUN: | FileCheck --check-prefix=CHECK-NEON-FP-ARMV8 %s >> +// CHECK-NEON-FP-ARMV8: "-target-feature" "+fp-armv8" >> +// CHECK-NEON-FP-ARMV8: "-target-feature" "+neon" >> + >> +// RUN: %clang -target aarch64-linux-eabi -mfpu=crypto-neon-fp-armv8 %s >> -### 2>&1 \ >> +// RUN: | FileCheck --check-prefix=CHECK-CRYPTO-NEON-FP-ARMV8 %s >> +// CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+fp-armv8" >> +// CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+neon" >> +// CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+crypto" >> + >> +// RUN: %clang -target aarch64-linux-eabi -mfpu=none %s -### 2>&1 \ >> +// RUN: | FileCheck --check-prefix=CHECK-NO-FP %s >> +// CHECK-NO-FP: "-target-feature" "-fp-armv8" >> +// CHECK-NO-FP: "-target-feature" "-crypto" >> +// CHECK-NO-FP: "-target-feature" "-neon" >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
