PR85678: Change default to -fno-common
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. gcc/ PR85678 * common.opt (fcommon): Change init to 1. * invoke.texi (-fcommon): Update documentation. testsuite/ * g++.dg/lto/odr-6_1.c: Add -fcommon. * gcc.dg/alias-15.c: Likewise. * 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.dg/lto/pr88077_0.c: Use long to avoid alignment warning. * gcc.dg/lto/pr88077_1.c: Add -fcommon. * 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. * gcc.target/i386/volatile-bitfields-2.c: Allow movl or movq. From-SVN: r278509
This commit is contained in:
parent
83115e9eb8
commit
6271dd984d
18 changed files with 57 additions and 38 deletions
|
@ -1,3 +1,9 @@
|
|||
2019-11-20 Wilco Dijkstra <wdijkstr@arm.com>
|
||||
|
||||
PR85678
|
||||
* common.opt (fcommon): Change init to 1.
|
||||
* doc/invoke.texi (-fcommon): Update documentation.
|
||||
|
||||
2019-11-20 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* fibonacci_heap.h (fibonacci_heap<K,V>::consolidate): Turn auto_vec
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -569,7 +569,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
|
||||
|
@ -14112,35 +14112,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
|
||||
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 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{-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.
|
||||
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 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
|
||||
|
|
|
@ -1,3 +1,21 @@
|
|||
2019-11-20 Wilco Dijkstra <wdijkstr@arm.com>
|
||||
|
||||
PR85678
|
||||
* g++.dg/lto/odr-6_1.c: Add -fcommon.
|
||||
* gcc.dg/alias-15.c: Likewise.
|
||||
* 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.dg/lto/pr88077_0.c: Use long to avoid alignment warning.
|
||||
* gcc.dg/lto/pr88077_1.c: Add -fcommon.
|
||||
* 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.
|
||||
* gcc.target/i386/volatile-bitfields-2.c: Allow movl or movq.
|
||||
|
||||
2019-11-20 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* gcc.dg/vect/bb-slp-42.c: Adjust.
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* { dg-options {-fcommon} } */
|
||||
struct {} admbaserest_; // { dg-lto-message "type of " 2 }
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
/* Origin: Jonathan Larmour <jifl-bugzilla@jifvik.org> */
|
||||
|
||||
/* { dg-do compile { target *-*-linux* *-*-gnu* *-*-uclinux* } } */
|
||||
/* { dg-options "-fdata-sections" } */
|
||||
/* { dg-options "-fcommon -fdata-sections" } */
|
||||
|
||||
int x;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* { dg-lto-options "-w" } */
|
||||
/* { dg-lto-options { {-fcommon -w} {-fcommon} } } */
|
||||
|
||||
double i;
|
||||
int j;
|
||||
|
|
|
@ -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" } */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
/* { dg-lto-do link } */
|
||||
|
||||
int HeaderStr;
|
||||
long HeaderStr;
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
/* { dg-options {-fcommon} } */
|
||||
|
||||
char HeaderStr[1];
|
||||
|
||||
int main()
|
||||
|
|
|
@ -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} } } */
|
||||
|
|
|
@ -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} } } */
|
||||
|
|
|
@ -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} } } */
|
||||
|
|
|
@ -14,4 +14,4 @@ int foo ()
|
|||
return bits.b;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "movl.*bits" } } */
|
||||
/* { dg-final { scan-assembler "mov(q|l).*bits" } } */
|
||||
|
|
Loading…
Add table
Reference in a new issue