<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:Consolas;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:10.5pt;font-family:Consolas'>Hi Eric,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:Consolas'>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.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:Consolas'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:Consolas'>Amara<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:Consolas'><o:p> </o:p></span></p><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Eric Christopher [mailto:echristo@gmail.com] <br><b>Sent:</b> 06 November 2013 16:34<br><b>To:</b> Amara Emerson<br><b>Cc:</b> cfe-commits@cs.uiuc.edu<br><b>Subject:</b> Re: r193740 - [AArch64] Add some CPU targets for "generic", A-53 and A-57.<o:p></o:p></span></p></div><p class=MsoNormal><o:p> </o:p></p><p>Ping? Can you answer this?<o:p></o:p></p><div><p class=MsoNormal>On Nov 1, 2013 3:04 PM, "Eric Christopher" <<a href="mailto:echristo@gmail.com">echristo@gmail.com</a>> wrote:<o:p></o:p></p><div><p class=MsoNormal>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?<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>-eric<o:p></o:p></p></div></div><div><p class=MsoNormal style='margin-bottom:12.0pt'><o:p> </o:p></p><div><p class=MsoNormal>On Thu, Oct 31, 2013 at 2:32 AM, Amara Emerson <<a href="mailto:amara.emerson@arm.com" target="_blank">amara.emerson@arm.com</a>> wrote:<o:p></o:p></p><p class=MsoNormal>Author: aemerson<br>Date: Thu Oct 31 04:32:33 2013<br>New Revision: 193740<br><br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=193740&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=193740&view=rev</a><br>Log:<br>[AArch64] Add some CPU targets for "generic", A-53 and A-57.<br><br>Enables the clang driver to begin targeting specific CPUs. Introduced a<br>"generic" CPU which will ensure that the optional FP feature is enabled<br>by default when it gets to LLVM, without needing any extra arguments.<br>Cortex-A53 and A-57 are also introduced with tests, although backend<br>handling of them does not yet exist.<br><br>Added:<br>    cfe/trunk/test/Driver/aarch64-cpus.c<br>    cfe/trunk/test/Driver/aarch64-mfpu.c<br>Modified:<br>    cfe/trunk/lib/Basic/Targets.cpp<br>    cfe/trunk/lib/Driver/Tools.cpp<br>    cfe/trunk/lib/Driver/Tools.h<br><br>Modified: cfe/trunk/lib/Basic/Targets.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=193740&r1=193739&r2=193740&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=193740&r1=193739&r2=193740&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/Basic/Targets.cpp (original)<br>+++ cfe/trunk/lib/Basic/Targets.cpp Thu Oct 31 04:32:33 2013<br>@@ -3472,6 +3472,13 @@ public:<br>     return Feature == "aarch64" || (Feature == "neon" && FPU == NeonMode);<br>   }<br><br>+  virtual bool setCPU(const std::string &Name) {<br>+    return llvm::StringSwitch<bool>(Name)<br>+             .Case("generic", true)<br>+             .Cases("cortex-a53", "cortex-a57", true)<br>+             .Default(false);<br>+  }<br>+<br>   virtual bool handleTargetFeatures(std::vector<std::string> &Features,<br>                                     DiagnosticsEngine &Diags) {<br>     FPU = FPUMode;<br><br>Modified: cfe/trunk/lib/Driver/Tools.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=193740&r1=193739&r2=193740&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=193740&r1=193739&r2=193740&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/Driver/Tools.cpp (original)<br>+++ cfe/trunk/lib/Driver/Tools.cpp Thu Oct 31 04:32:33 2013<br>@@ -539,6 +539,26 @@ static std::string getARMTargetCPU(const<br>     .Default("arm7tdmi");<br> }<br><br>+/// getAArch64TargetCPU - Get the (LLVM) name of the AArch64 cpu we are targeting.<br>+//<br>+// FIXME: tblgen this.<br>+static std::string getAArch64TargetCPU(const ArgList &Args,<br>+                                       const llvm::Triple &Triple) {<br>+  // FIXME: Warn on inconsistent use of -mcpu and -march.<br>+<br>+  // If we have -mcpu=, use that.<br>+  if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) {<br>+    StringRef MCPU = A->getValue();<br>+    // Handle -mcpu=native.<br>+    if (MCPU == "native")<br>+      return llvm::sys::getHostCPUName();<br>+    else<br>+      return MCPU;<br>+  }<br>+<br>+  return "generic";<br>+}<br>+<br> // FIXME: Move to target hook.<br> static bool isSignedCharDefault(const llvm::Triple &Triple) {<br>   switch (Triple.getArch()) {<br>@@ -1304,6 +1324,9 @@ static std::string getCPUName(const ArgL<br>   default:<br>     return "";<br><br>+  case llvm::Triple::aarch64:<br>+    return getAArch64TargetCPU(Args, T);<br>+<br>   case llvm::Triple::arm:<br>   case llvm::Triple::thumb:<br>     return getARMTargetCPU(Args, T);<br><br>Modified: cfe/trunk/lib/Driver/Tools.h<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=193740&r1=193739&r2=193740&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=193740&r1=193739&r2=193740&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/Driver/Tools.h (original)<br>+++ cfe/trunk/lib/Driver/Tools.h Thu Oct 31 04:32:33 2013<br>@@ -49,6 +49,8 @@ using llvm::opt::ArgStringList;<br>                                  const InputInfo &Output,<br>                                  const InputInfoList &Inputs) const;<br><br>+    void AddAArch64TargetArgs(const llvm::opt::ArgList &Args,<br>+                              llvm::opt::ArgStringList &CmdArgs) const;<br>     void AddARMTargetArgs(const llvm::opt::ArgList &Args,<br>                           llvm::opt::ArgStringList &CmdArgs,<br>                           bool KernelOrKext) const;<br><br>Added: cfe/trunk/test/Driver/aarch64-cpus.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-cpus.c?rev=193740&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-cpus.c?rev=193740&view=auto</a><br>==============================================================================<br>--- cfe/trunk/test/Driver/aarch64-cpus.c (added)<br>+++ cfe/trunk/test/Driver/aarch64-cpus.c Thu Oct 31 04:32:33 2013<br>@@ -0,0 +1,10 @@<br>+// Check target CPUs are correctly passed.<br>+<br>+// RUN: %clang -target aarch64 -### -c %s 2>&1 | FileCheck -check-prefix=GENERIC %s<br>+// GENERIC: "-cc1"{{.*}} "-triple" "aarch64" {{.*}} "-target-cpu" "generic"<br>+<br>+// RUN: %clang -target aarch64 -mcpu=cortex-a53 -### -c %s 2>&1 | FileCheck -check-prefix=CA53 %s<br>+// CA53: "-cc1"{{.*}} "-triple" "aarch64" {{.*}} "-target-cpu" "cortex-a53"<br>+<br>+// RUN: %clang -target aarch64 -mcpu=cortex-a57 -### -c %s 2>&1 | FileCheck -check-prefix=CA57 %s<br>+// CA57: "-cc1"{{.*}} "-triple" "aarch64" {{.*}} "-target-cpu" "cortex-a57"<br><br>Added: cfe/trunk/test/Driver/aarch64-mfpu.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-mfpu.c?rev=193740&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-mfpu.c?rev=193740&view=auto</a><br>==============================================================================<br>--- cfe/trunk/test/Driver/aarch64-mfpu.c (added)<br>+++ cfe/trunk/test/Driver/aarch64-mfpu.c Thu Oct 31 04:32:33 2013<br>@@ -0,0 +1,26 @@<br>+// Test that different values of -mfpu pick correct AArch64 FPU target-feature(s).<br>+<br>+// RUN: %clang -target aarch64-linux-eabi -mfpu=neon %s -### -o %t.o 2>&1 \<br>+// RUN:   | FileCheck --check-prefix=CHECK-NEON %s<br>+// CHECK-NEON: "-target-feature" "+neon"<br>+<br>+// RUN: %clang -target aarch64-linux-eabi -mfpu=fp-armv8 %s -### -o %t.o 2>&1 \<br>+// RUN:   | FileCheck --check-prefix=CHECK-FP-ARMV8 %s<br>+// CHECK-FP-ARMV8: "-target-feature" "+fp-armv8"<br>+<br>+// RUN: %clang -target aarch64-linux-eabi -mfpu=neon-fp-armv8 %s -### 2>&1 \<br>+// RUN:   | FileCheck --check-prefix=CHECK-NEON-FP-ARMV8 %s<br>+// CHECK-NEON-FP-ARMV8: "-target-feature" "+fp-armv8"<br>+// CHECK-NEON-FP-ARMV8: "-target-feature" "+neon"<br>+<br>+// RUN: %clang -target aarch64-linux-eabi -mfpu=crypto-neon-fp-armv8 %s -### 2>&1 \<br>+// RUN:   | FileCheck --check-prefix=CHECK-CRYPTO-NEON-FP-ARMV8 %s<br>+// CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+fp-armv8"<br>+// CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+neon"<br>+// CHECK-CRYPTO-NEON-FP-ARMV8: "-target-feature" "+crypto"<br>+<br>+// RUN: %clang -target aarch64-linux-eabi -mfpu=none %s -### 2>&1 \<br>+// RUN:   | FileCheck --check-prefix=CHECK-NO-FP %s<br>+// CHECK-NO-FP: "-target-feature" "-fp-armv8"<br>+// CHECK-NO-FP: "-target-feature" "-crypto"<br>+// CHECK-NO-FP: "-target-feature" "-neon"<br><br><br>_______________________________________________<br>cfe-commits mailing list<br><a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p></div></div></div></body></html>