On Tue, Oct 29, 2019 at 1:33 PM Wilco Dijkstra <wilco.dijks...@arm.com> wrote:
>
> v2: Tweak testsuite options to avoid failures
>
> GCC currently defaults to -fcommon.  As discussed in the PR, this is an 
> ancient
> C feature which is not conforming with the latest C standards.  On many 
> targets
> this means global variable accesses have a codesize and performance penalty.
> This applies to C code only, C++ code is not affected by -fcommon.  It is 
> about
> time to change the default.
>
> Bootstrap OK, passes testsuite on AArch64. OK for commit?

Please don't add -fcommon in lto.exp.

> ChangeLog
> 2019-10-29  Wilco Dijkstra  <wdijk...@arm.com>
>
>         PR85678
>         * common.opt (fcommon): Change init to 1.
>
> doc/
>         * invoke.texi (-fcommon): Update documentation.
>
> testsuite/
>
>         * gcc.dg/alias-15.c: Add -fcommon.
>         * gcc.dg/fdata-sections-1.c: Likewise.
>         * gcc.dg/ipa/pr77653.c: Likewise.
>         * gcc.dg/lto/20090729_0.c: Likewise.
>         * gcc.dg/lto/20111207-1_0.c: Likewise.
>         * gcc.dg/lto/c-compatible-types-1_0.c: Likewise.
>         * gcc.dg/lto/pr55525_0.c: Likewise.
>         * gcc.target/aarch64/sve/peel_ind_1.c: Allow ANCHOR0.
>         * gcc.target/aarch64/sve/peel_ind_2.c: Likewise
>         * gcc.target/aarch64/sve/peel_ind_3.c: Likewise
>         * lib/lto.exp (lto_init): Add -fcommon.
> ---
>
> diff --git a/gcc/common.opt b/gcc/common.opt
> index 
> f74b10aafc223e4961915b009c092f4876eddba4..798b6aeff3536e21c95752b5dd085f8ffef04643
>  100644
> --- a/gcc/common.opt
> +++ b/gcc/common.opt
> @@ -1131,7 +1131,7 @@ Common Report Var(flag_combine_stack_adjustments) 
> Optimization
>  Looks for opportunities to reduce stack adjustments and stack references.
>
>  fcommon
> -Common Report Var(flag_no_common,0)
> +Common Report Var(flag_no_common,0) Init(1)
>  Put uninitialized globals in the common section.
>
>  fcompare-debug
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index 
> 92fb316a368a4a36218fac6de2744c7ab6446ef5..18cfd07d4bbb4b866808db0701faf88bddbd9a94
>  100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -568,7 +568,7 @@ Objective-C and Objective-C++ Dialects}.
>  -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables @gol
>  -fasynchronous-unwind-tables @gol
>  -fno-gnu-unique @gol
> --finhibit-size-directive  -fno-common  -fno-ident @gol
> +-finhibit-size-directive  -fcommon  -fno-ident @gol
>  -fpcc-struct-return  -fpic  -fPIC  -fpie  -fPIE  -fno-plt @gol
>  -fno-jump-tables @gol
>  -frecord-gcc-switches @gol
> @@ -14049,35 +14049,27 @@ useful for building programs to run under WINE@.
>  code that is not binary compatible with code generated without that switch.
>  Use it to conform to a non-default application binary interface.
>
> -@item -fno-common
> -@opindex fno-common
> +@item -fcommon
>  @opindex fcommon
> +@opindex fno-common
>  @cindex tentative definitions
> -In C code, this option controls the placement of global variables
> -defined without an initializer, known as @dfn{tentative definitions}
> -in the C standard.  Tentative definitions are distinct from declarations
> +In C code, this option controls the placement of global variables
> +defined without an initializer, known as @dfn{tentative definitions}
> +in the C standard.  Tentative definitions are distinct from declarations
>  of a variable with the @code{extern} keyword, which do not allocate storage.
>
> -Unix C compilers have traditionally allocated storage for
> -uninitialized global variables in a common block.  This allows the
> -linker to resolve all tentative definitions of the same variable
> +The default is @option{-fno-common}, which specifies that the compiler places
> +uninitialized global variables in the BSS section of the object file.
> +This inhibits the merging of tentative definitions by the linker so you get a
> +multiple-definition error if the same variable is accidentally defined in 
> more
> +than one compilation unit.
> +
> +The @option{-fcommon} places uninitialized global variables in a common 
> block.
> +This allows the linker to resolve all tentative definitions of the same 
> variable
>  in different compilation units to the same object, or to a non-tentative
> -definition.
> -This is the behavior specified by @option{-fcommon}, and is the default for
> -GCC on most targets.
> -On the other hand, this behavior is not required by ISO
> -C, and on some targets may carry a speed or code size penalty on
> -variable references.
> -
> -The @option{-fno-common} option specifies that the compiler should instead
> -place uninitialized global variables in the BSS section of the object file.
> -This inhibits the merging of tentative definitions by the linker so
> -you get a multiple-definition error if the same
> -variable is defined in more than one compilation unit.
> -Compiling with @option{-fno-common} is useful on targets for which
> -it provides better performance, or if you wish to verify that the
> -program will work on other systems that always treat uninitialized
> -variable definitions this way.
> +definition.  This behavior does not conform to ISO C, is inconsistent with 
> C++,
> +and on many targets implies a speed and code size penalty on global variable
> +references.  It is mainly useful to enable legacy code to link without 
> errors.
>
>  @item -fno-ident
>  @opindex fno-ident
> diff --git a/gcc/testsuite/gcc.dg/alias-15.c b/gcc/testsuite/gcc.dg/alias-15.c
> index 
> 0a8e69b61eceef95e61f16d7874b5a4204e0594f..304ad1fbaeb7fe68ef26efd31c2ee545db6a0ffc
>  100644
> --- a/gcc/testsuite/gcc.dg/alias-15.c
> +++ b/gcc/testsuite/gcc.dg/alias-15.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-additional-options  "-O2 -fdump-ipa-cgraph" } */
> +/* { dg-additional-options  "-O2 -fcommon -fdump-ipa-cgraph" } */
>
>  /* RTL-level CSE shouldn't introduce LCO (for the string) into varpool */
>  char *p;
> diff --git a/gcc/testsuite/gcc.dg/fdata-sections-1.c 
> b/gcc/testsuite/gcc.dg/fdata-sections-1.c
> index 
> e8a6639f32e38fdb539232288c92000f000ca79e..de5ddfc0179a588ce1bdb3d5f39a14438823c071
>  100644
> --- a/gcc/testsuite/gcc.dg/fdata-sections-1.c
> +++ b/gcc/testsuite/gcc.dg/fdata-sections-1.c
> @@ -2,7 +2,7 @@
>  /* Origin: Jonathan Larmour <jifl-bugzi...@jifvik.org> */
>
>  /* { dg-do compile { target *-*-linux* *-*-gnu* *-*-uclinux* } } */
> -/* { dg-options "-fdata-sections" } */
> +/* { dg-options "-fcommon -fdata-sections" } */
>
>  int x;
>
> diff --git a/gcc/testsuite/gcc.dg/ipa/pr77653.c 
> b/gcc/testsuite/gcc.dg/ipa/pr77653.c
> index 
> f0b2b224091583bcf51d8d7444033c2042de3b7b..2fddb7eab548690a7a9d2edb3172c2b17ff9ea63
>  100644
> --- a/gcc/testsuite/gcc.dg/ipa/pr77653.c
> +++ b/gcc/testsuite/gcc.dg/ipa/pr77653.c
> @@ -1,5 +1,5 @@
>  /* { dg-require-alias "" } */
> -/* { dg-options "-O2 -fdump-ipa-icf-details"  } */
> +/* { dg-options "-O2 -fcommon -fdump-ipa-icf-details"  } */
>
>  int a, b, c, d, e, h, i, j, k, l;
>  const int f;
> diff --git a/gcc/testsuite/gcc.dg/lto/20090729_0.c 
> b/gcc/testsuite/gcc.dg/lto/20090729_0.c
> index 
> 05ae74f872e28c417a8032688b3c75cd38eb6f6f..13fe62b5923b7c868373d8ca269730aa588d4992
>  100644
> --- a/gcc/testsuite/gcc.dg/lto/20090729_0.c
> +++ b/gcc/testsuite/gcc.dg/lto/20090729_0.c
> @@ -1,4 +1,4 @@
> -/* { dg-lto-options "-w" } */
> +/* { dg-lto-options { {-fcommon -w} {-fcommon} } } */
>
>  double i;
>  int j;
> diff --git a/gcc/testsuite/gcc.dg/lto/20111207-1_0.c 
> b/gcc/testsuite/gcc.dg/lto/20111207-1_0.c
> index 
> 486264066f6fcab4a248fd6293af2b6cae65caf5..5f11264af17a5a50c6d27e6eb8667bbdfce131f1
>  100644
> --- a/gcc/testsuite/gcc.dg/lto/20111207-1_0.c
> +++ b/gcc/testsuite/gcc.dg/lto/20111207-1_0.c
> @@ -1,4 +1,4 @@
>  /* { dg-lto-do run } */
> -/* { dg-lto-options { { -flto } } } */
> +/* { dg-lto-options { { -flto -fcommon } {-fcommon} {-fcommon} {-fcommon} } 
> } */
>  /* { dg-require-linker-plugin "" } */
>  /* { dg-extra-ld-options "-fuse-linker-plugin" } */
> diff --git a/gcc/testsuite/gcc.dg/lto/c-compatible-types-1_0.c 
> b/gcc/testsuite/gcc.dg/lto/c-compatible-types-1_0.c
> index 
> 376da00599d04a738b8b5d6c6d3625d915cae83b..45b03735a6befd47b5b24cab5c62ecc8792aed4c
>  100644
> --- a/gcc/testsuite/gcc.dg/lto/c-compatible-types-1_0.c
> +++ b/gcc/testsuite/gcc.dg/lto/c-compatible-types-1_0.c
> @@ -1,5 +1,5 @@
>  /* { dg-lto-do run } */
> -/* { dg-lto-options "-O3" } */
> +/* { dg-lto-options { {-O3 -fcommon} {-fcommon} } } */
>
>  /* By C standard Each enumerated type shall be compatible with char, a  
> signed
>     integer, type, or an unsigned integer type. The choice of type is
> diff --git a/gcc/testsuite/gcc.dg/lto/pr55525_0.c 
> b/gcc/testsuite/gcc.dg/lto/pr55525_0.c
> index 
> 7faaf806a75836be4eb9a3ede7559dd4d4151185..d8d16d11d32d3918bc47f4b41c7e7dabe255fd39
>  100644
> --- a/gcc/testsuite/gcc.dg/lto/pr55525_0.c
> +++ b/gcc/testsuite/gcc.dg/lto/pr55525_0.c
> @@ -1,5 +1,5 @@
>  /* { dg-lto-do link } */
> -/* { dg-lto-options { { -flto -w } } } */
> +/* { dg-lto-options { { -fcommon -flto -w } } } */
>
>  char s[sizeof (char *)];
>  int main(void)
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_1.c 
> b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_1.c
> index 
> 156d04ae5ca222ddea3e12a3b785050c6113a548..e9afc2047e49e4382fd2cc5b150de51be89e2e3d
>  100644
> --- a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_1.c
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_1.c
> @@ -21,7 +21,7 @@ foo (void)
>  }
>
>  /* We should operate on aligned vectors.  */
> -/* { dg-final { scan-assembler {\t(adrp|adr)\tx[0-9]+, x\n} } } */
> +/* { dg-final { scan-assembler {\t(adrp|adr)\tx[0-9]+, (x|\.LANCHOR0)\n} } } 
> */
>  /* We should use an induction that starts at -5, with only the last
>     7 elements of the first iteration being active.  */
>  /* { dg-final { scan-assembler {\tindex\tz[0-9]+\.s, #-5, #5\n} } } */
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2.c 
> b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2.c
> index 
> e792cdf2cad297e7044fdecd576343c9ac212078..6bd7fc73fb03d339b17c62d1ad818c9bdb351e1b
>  100644
> --- a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2.c
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_2.c
> @@ -17,7 +17,7 @@ foo (void)
>  }
>
>  /* We should operate on aligned vectors.  */
> -/* { dg-final { scan-assembler {\t(adrp|adr)\tx[0-9]+, x\n} } } */
> +/* { dg-final { scan-assembler {\t(adrp|adr)\tx[0-9]+, (x|\.LANCHOR0)\n} } } 
> */
>  /* We should unroll the loop three times.  */
>  /* { dg-final { scan-assembler-times "\tst1w\t" 3 } } */
>  /* { dg-final { scan-assembler {\tptrue\t(p[0-9]+)\.s, 
> vl7\n.*\teor\tp[0-7]\.b, (p[0-7])/z, (\1\.b, \2\.b|\2\.b, \1\.b)\n} } } */
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_3.c 
> b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_3.c
> index 
> 441589eef600df0d1b264780774a9bdc4deb975e..3adddf3f4049a73bae99ab3468f83c535ef55170
>  100644
> --- a/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_3.c
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/peel_ind_3.c
> @@ -17,5 +17,5 @@ foo (int start)
>  }
>
>  /* We should operate on aligned vectors.  */
> -/* { dg-final { scan-assembler {\t(adrp|adr)\tx[0-9]+, x\n} } } */
> +/* { dg-final { scan-assembler {\t(adrp|adr)\tx[0-9]+, (x|\.LANCHOR0)\n} } } 
> */
>  /* { dg-final { scan-assembler {\tubfx\t} } } */
> diff --git a/gcc/testsuite/lib/lto.exp b/gcc/testsuite/lib/lto.exp
> index 
> 25c934731df0bb94f2e61561142f75438c4294fa..e931f946ad2537a53a45e1855513fb4d1682351c
>  100644
> --- a/gcc/testsuite/lib/lto.exp
> +++ b/gcc/testsuite/lib/lto.exp
> @@ -191,21 +191,21 @@ proc lto_init { args } {
>      if ![info exists LTO_OPTIONS] {
>          if [check_linker_plugin_available] {
>           set LTO_OPTIONS [list \
> -             {-O0 -flto -flto-partition=none -fuse-linker-plugin} \
> -             {-O2 -flto -flto-partition=none -fuse-linker-plugin 
> -fno-fat-lto-objects } \
> -             {-O0 -flto -flto-partition=1to1 -fno-use-linker-plugin } \
> -             {-O2 -flto -flto-partition=1to1 -fno-use-linker-plugin } \
> -             {-O0 -flto -fuse-linker-plugin -fno-fat-lto-objects }     \
> -             {-O2 -flto -fuse-linker-plugin}   \
> +             {-O0 -flto -fcommon -flto-partition=none -fuse-linker-plugin} \
> +             {-O2 -flto -fcommon -flto-partition=none -fuse-linker-plugin 
> -fno-fat-lto-objects } \
> +             {-O0 -flto -fcommon -flto-partition=1to1 -fno-use-linker-plugin 
> } \
> +             {-O2 -flto -fcommon -flto-partition=1to1 -fno-use-linker-plugin 
> } \
> +             {-O0 -flto -fcommon -fuse-linker-plugin -fno-fat-lto-objects }  
>   \
> +             {-O2 -flto -fcommon -fuse-linker-plugin}  \
>           ]
>         } else {
>           set LTO_OPTIONS [list \
> -             {-O0 -flto -flto-partition=none } \
> -             {-O2 -flto -flto-partition=none } \
> -             {-O0 -flto -flto-partition=1to1 } \
> -             {-O2 -flto -flto-partition=1to1 } \
> -             {-O0 -flto }      \
> -             {-O2 -flto}               \
> +             {-O0 -flto -fcommon -flto-partition=none } \
> +             {-O2 -flto -fcommon -flto-partition=none } \
> +             {-O0 -flto -fcommon -flto-partition=1to1 } \
> +             {-O2 -flto -fcommon -flto-partition=1to1 } \
> +             {-O0 -flto -fcommon}      \
> +             {-O2 -flto -fcommon}              \
>           ]
>         }
>      }

Reply via email to