public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Matthew Malcomson <matmal01@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc(refs/vendors/ARM/heads/morello)] aarch64: Ignore -mfake-capability for Morello and +c64
Date: Thu,  5 May 2022 12:05:15 +0000 (GMT)	[thread overview]
Message-ID: <20220505120515.2F9B93856253@sourceware.org> (raw)

https://gcc.gnu.org/g:3f926ec0b770180940af9ab769bbf4067663b8a0

commit 3f926ec0b770180940af9ab769bbf4067663b8a0
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Thu Apr 7 13:25:20 2022 +0100

    aarch64: Ignore -mfake-capability for Morello and +c64
    
    We have three options that affect the choice of aarch64_cap:
    -march, -mabi and -mfake-capability.  This raises the question
    of what should happen if -mfake-capability is used with an
    -march/-mabi combo that selects “real” capabilities.  The obvious
    choices are:
    
    (1) report an error
    (2) use fake capabilities
    (3) use real capabilities
    
    (1) seems unnecessarily fussy given that -mfake-capability is just
    a development option.
    
    (2) is difficult to do.  We don't allow the combination of
    -march=morello and AARCH64_CAPABILITY_NONE, so we currently generate
    “real” capability code if and only if the target either is Morello or
    includes +c64.  (2) would require us to break that link.
    
    (3) therefore seems like the most useful option.  It means that
    morello.exp tests can use -mabi=purecap even if the harness has
    added -mfake-capability to the command line.  Doing this fixes
    the various builtin_* testsuite failures with -mfake-capability.
    
    Also, we still had an error message:
    
      must use %<-march=morello%> or the %<+c64%> extension
      when selecting the Morello %<-mabi=purecap%> ABI option
    
    even though the first possibility isn't allowed any more.
    If we handle the “purecap requires +c64” rule before the switch,
    we can force +c64 on after reporting the message, which should
    give better error recovery.
    
    The patch also runs morello_test.c with the prevailing test flags
    if those flags already select capabilities.  The test is a generic
    CADI one so should work in all capability modes.  (A later patch
    fixes it for hybrid.)

Diff:
---
 gcc/config/aarch64/aarch64.c                       | 53 ++++++++++++----------
 .../gcc.dg/rtl/aarch64/morello/morello_test.c      |  2 +-
 2 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 6853d9004bd..3f48a315824 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -15105,6 +15105,20 @@ aarch64_override_options_internal (struct gcc_options *opts)
   aarch64_tune_params = *(selected_tune->tune);
   aarch64_architecture_version = selected_arch->architecture_version;
 
+  /* We need the extension to be defined so that it gets passed down to the
+     assembler.  The assembler uses the architecture and extension to decide
+     what state the processor should be in (which also defines some parts of
+     the ABI like whether symbol values should have their lowest bit set).
+     If we want to generate purecap code we will need the processor to be in
+     the C64 state.  */
+  if (opts->x_aarch64_abi == AARCH64_ABI_MORELLO_PURECAP
+      && !AARCH64_ISA_C64)
+    {
+      error ("%<-mabi=purecap%> requires the %<+c64%> extension");
+      aarch64_isa_flags |= AARCH64_FL_C64;
+    }
+
+  aarch64_cap = AARCH64_CAPABILITY_NONE;
   if (AARCH64_ISA_C64 || selected_arch->arch == AARCH64_ARCH_MORELLO)
     {
       switch (opts->x_aarch64_abi)
@@ -15113,6 +15127,7 @@ aarch64_override_options_internal (struct gcc_options *opts)
 	    error ("cannot use %<-mabi=ilp32%> with the Morello architecture");
 	    break;
 	  case AARCH64_ABI_MORELLO_PURECAP:
+	    gcc_assert (AARCH64_ISA_C64);
 	    aarch64_cap = AARCH64_CAPABILITY_PURE;
 	    break;
 	  case AARCH64_ABI_LP64:
@@ -15124,30 +15139,18 @@ aarch64_override_options_internal (struct gcc_options *opts)
     }
   else
     {
-      if (opts->x_aarch64_abi == AARCH64_ABI_MORELLO_PURECAP)
-	error ("must use %<-march=morello%> or the %<+c64%> extension "
-	       "when selecting the Morello %<-mabi=purecap%> ABI option");
-      else
-	aarch64_cap = AARCH64_CAPABILITY_NONE;
+      gcc_assert (opts->x_aarch64_abi == AARCH64_ABI_ILP32
+		  || opts->x_aarch64_abi == AARCH64_ABI_LP64);
+      if (aarch64_using_fake_capability)
+	{
+	  if (opts->x_aarch64_abi == AARCH64_ABI_ILP32)
+	    error ("cannot use %<-mfake-capability%> and %<-mabi=ilp32%>"
+		   " together");
+	  else
+	    aarch64_cap = AARCH64_CAPABILITY_FAKE;
+	}
     }
 
-  /*  We need the extension to be defined so that it gets passed down to the
-      assembler.  The assembler uses the architecture and extension to decide
-      what state the processor should be in (which also defines some parts of
-      the ABI like whether symbol values should have their lowest bit set).
-      If we want to generate purecap code we will need the processor to be in
-      the C64 state.  */
-  if (aarch64_cap == AARCH64_CAPABILITY_PURE
-      && ! AARCH64_ISA_C64)
-    error ("%<-mabi=purecap%> requires the %<+c64%> extension");
-
-  if (aarch64_using_fake_capability)
-    aarch64_cap = AARCH64_CAPABILITY_FAKE;
-
-  if (aarch64_using_fake_capability
-      && opts->x_aarch64_abi == AARCH64_ABI_ILP32)
-    error ("Can not use fake_capability and %<-mabi=ilp32%> together");
-
   if (TARGET_CAPABILITY_ANY && opts->x_flag_sanitize)
     /* At the moment we're disabling this.
      * Sanitizers are a feature that are non-essential, can not be required by
@@ -15158,11 +15161,11 @@ aarch64_override_options_internal (struct gcc_options *opts)
      * come back to it later.  */
     error ("MORELLO TODO Disabling sanitizers on Morello for now");
   if (opts->x_flag_openmp && TARGET_CAPABILITY_ANY)
-	  error ("MORELLO TODO OpenMP has not been implemented for Morello");
+    error ("MORELLO TODO OpenMP has not been implemented for Morello");
   if (opts->x_flag_openacc && TARGET_CAPABILITY_ANY)
-	  error ("MORELLO TODO OpenACC has not been implemented for Morello");
+    error ("MORELLO TODO OpenACC has not been implemented for Morello");
   if (!flag_inline_atomics && TARGET_CAPABILITY_ANY)
-	  error ("MORELLO TODO -fno-inline-atomics has not been implemented for Morello");
+    error ("MORELLO TODO -fno-inline-atomics has not been implemented for Morello");
   if (flag_fake_hybrid >= flag_fake_hybrid_init)
     srand (get_random_seed (false));
 
diff --git a/gcc/testsuite/gcc.dg/rtl/aarch64/morello/morello_test.c b/gcc/testsuite/gcc.dg/rtl/aarch64/morello/morello_test.c
index 3b32d559285..4876e0cfc9a 100644
--- a/gcc/testsuite/gcc.dg/rtl/aarch64/morello/morello_test.c
+++ b/gcc/testsuite/gcc.dg/rtl/aarch64/morello/morello_test.c
@@ -1,5 +1,5 @@
 /* { dg-do compile { target aarch64-*-* } } */
-/* { dg-options "-march=morello -mfake-capability" } */
+/* { dg-options "-mfake-capability" { target { ! aarch64_capability_any } } } */
 
 int __RTL (startwith ("final")) f1 ()
 {


                 reply	other threads:[~2022-05-05 12:05 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220505120515.2F9B93856253@sourceware.org \
    --to=matmal01@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).