On Thu, Nov 7, 2013 at 6:47 AM, Amara Emerson <[email protected]> wrote:
> 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. > > > It seems odd to saddle the ARM64 port with the mistakes of the previous ARM port. That there's going to be a cortex-a53 for arm64 and arm seems irrelevant since, for the general -arch or -target case, you'll be specifying the triple that you're compiling for so whether you're compiling for 64 or 32-bit will be clear on the command line. Unless you have a plan for cpu families ala the old ARM I really don't see a reason to have this and a lot of reasons not to. As far as -mtune, the ARM port was actually the only port in gcc that didn't use -mtune and it caused a lot of odd bugs and complaints. I don't see a reason to limit tuning for a particular processor while targeting the architecture of something else. Nigel: Can you elaborate here a bit more with the uses you see here? -eric > 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&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
