Hi Eric,
Some of the main reasons (there may be more I'm overlooking) for using this scheme is consistency with the existing ARM backend for end users. From our perspective, -march should be restricted to actual architectures, and not one specific implementation. A pragmatic addition is that accepting -march=cortex-a53 would be ambiguous, as cortex-a53 will exist in both the ARM and AArch64 backends. Specifying the CPU name alone is not enough to determine the architecture we're compiling for. We've also never used -mtune, and to begin doing so would not bring us any significant benefits. Hope that answers your questions. Amara From: Eric Christopher [mailto:[email protected]] Sent: 06 November 2013 16:34 To: Amara Emerson Cc: [email protected] Subject: Re: r193740 - [AArch64] Add some CPU targets for "generic", A-53 and A-57. 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 <http://llvm.org/viewvc/llvm-project?rev=193740&view=rev> &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=1937 40 <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=193 740&r1=193739&r2=193740&view=diff> &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=19374 0 <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=1937 40&r1=193739&r2=193740&view=diff> &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 <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=193740 &r1=193739&r2=193740&view=diff> &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 <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-cpus.c?re v=193740&view=auto> &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 <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-mfpu.c?re v=193740&view=auto> &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
