[gcc(refs/vendors/ibm/heads/perf)] s390: Fix --with-arch=... --with-tune=... [PR26877]

Jiu Fu Guo guojiufu@gcc.gnu.org
Thu Mar 19 06:04:15 GMT 2020


https://gcc.gnu.org/g:01eb1bb0237a24fe50ed0631857f3dfc31782f54

commit 01eb1bb0237a24fe50ed0631857f3dfc31782f54
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Mar 3 10:44:24 2020 +0100

    s390: Fix --with-arch=... --with-tune=... [PR26877]
    
    In Fedora we configure GCC with --with-arch=zEC12 --with-tune=z13 right now
    and furthermore redhat-rpm-config adds to rpm packages -march=zEC12 -mtune=z13
    options (among others).  While looking at the git compilation, I've been
    surprised that -O2 actually behaves differently from -O2 -mtune=z13 in this
    configuration, and indeed, seems --with-tune= is completely ignored on s390
    if --with-arch= is specified.
    
    i386 had the same problem, but got that fixed in 2006, see PR26877.
    The thing is that for tune, we add -mtune=%(VALUE) only if neither -mtune=
    nor -march= is present, but as arch is processed first, it adds
    -march=%(VALUE) first and then -march= is always present and so -mtune= is
    never added.
    By reordering it in OPTION_DEFAULT_SPECS, we process tune first, add the
    default -mtune=%(VALUE) if -mtune= or -march= isn't seen, and then
    add -march=%(VALUE) if -march= isn't seen.  It is true that cc1 etc.
    will be then invoked with -mtune=z13 -march=zEC12, but like if the user
    specifies it in that order, it should still use z13 tuning and zEC12
    ISA set.
    
    2020-03-03  Jakub Jelinek  <jakub@redhat.com>
    
            PR target/26877
            * config/s390/s390.h (OPTION_DEFAULT_SPECS): Reorder.

Diff:
---
 gcc/ChangeLog          | 3 +++
 gcc/config/s390/s390.h | 8 +++++---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 124a06a960a..08ce80e25e4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
 2020-03-03  Jakub Jelinek  <jakub@redhat.com>
 
+	PR target/26877
+	* config/s390/s390.h (OPTION_DEFAULT_SPECS): Reorder.
+
 	PR rtl-optimization/94002
 	* explow.c (plus_constant): Punt if cst has VOIDmode and
 	get_pool_mode is different from mode.
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index dd3118ee4af..2e29dbe97e8 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -227,11 +227,13 @@ enum processor_flags
 #define TARGET_DEFAULT             0
 #endif
 
-/* Support for configure-time defaults.  */
+/* Support for configure-time defaults.
+   The order here is important so that -march doesn't squash the
+   tune values.  */
 #define OPTION_DEFAULT_SPECS					\
   { "mode", "%{!mesa:%{!mzarch:-m%(VALUE)}}" },			\
-  { "arch", "%{!march=*:-march=%(VALUE)}" },			\
-  { "tune", "%{!mtune=*:%{!march=*:-mtune=%(VALUE)}}" }
+  { "tune", "%{!mtune=*:%{!march=*:-mtune=%(VALUE)}}" },	\
+  { "arch", "%{!march=*:-march=%(VALUE)}" }
 
 #ifdef __s390__
 extern const char *s390_host_detect_local_cpu (int argc, const char **argv);


More information about the Gcc-cvs mailing list