r193740 - [AArch64] Add some CPU targets for "generic", A-53 and A-57.
Eric Christopher
echristo at gmail.com
Wed Nov 6 08:33:32 PST 2013
Ping? Can you answer this?
On Nov 1, 2013 3:04 PM, "Eric Christopher" <echristo at gmail.com> 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 <amara.emerson at arm.com>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
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131106/7c9617f1/attachment.html>
More information about the cfe-commits
mailing list