From e622a32db78300821fc1327637ec6413febc2c66 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 15 Oct 2019 07:28:26 +0000 Subject: [PATCH] re PR middle-end/92046 (Command line options (that are per-functions) are affecting --params which are global.) 2019-10-15 Richard Biener PR middle-end/92046 * common.opt (fallow-store-data-races): New. * params.def (PARAM_ALLOW_STORE_DATA_RACES): Remove. * params.h (ALLOW_STORE_DATA_RACES): Likewise. * doc/invoke.texi (fallow-store-data-races): Document. (--param allow-store-data-races): Remove docs. * opts.c (default_options_table): Enable -fallow-store-data-races at -Ofast. (default_options_optimization): Do not enable --param allow-store-data-races at -Ofast. * tree-if-conv.c (ifcvt_memrefs_wont_trap): Use flag_store_data_races instead of PARAM_ALLOW_STORE_DATA_RACES. * tree-ssa-loop-im.c (execute_sm): Likewise. * c-c++-common/cxxbitfields-3.c: Adjust. * c-c++-common/cxxbitfields-6.c: Likewise. * c-c++-common/simulate-thread/bitfields-1.c: Likewise. * c-c++-common/simulate-thread/bitfields-2.c: Likewise. * c-c++-common/simulate-thread/bitfields-3.c: Likewise. * c-c++-common/simulate-thread/bitfields-4.c: Likewise. * g++.dg/simulate-thread/bitfields-2.C: Likewise. * g++.dg/simulate-thread/bitfields.C: Likewise. * gcc.dg/lto/pr52097_0.c: Likewise. * gcc.dg/simulate-thread/speculative-store-2.c: Likewise. * gcc.dg/simulate-thread/speculative-store-3.c: Likewise. * gcc.dg/simulate-thread/speculative-store-4.c: Likewise. * gcc.dg/simulate-thread/speculative-store.c: Likewise. * gcc.dg/tree-ssa/20050314-1.c: Likewise. From-SVN: r276985 --- gcc/ChangeLog | 16 ++++++++++++++++ gcc/common.opt | 4 ++++ gcc/doc/invoke.texi | 17 ++++++++++------- gcc/opts.c | 8 +------- gcc/params.def | 6 ------ gcc/params.h | 2 -- gcc/testsuite/ChangeLog | 18 ++++++++++++++++++ gcc/testsuite/c-c++-common/cxxbitfields-3.c | 2 +- gcc/testsuite/c-c++-common/cxxbitfields-6.c | 2 +- .../c-c++-common/simulate-thread/bitfields-1.c | 2 +- .../c-c++-common/simulate-thread/bitfields-2.c | 2 +- .../c-c++-common/simulate-thread/bitfields-3.c | 2 +- .../c-c++-common/simulate-thread/bitfields-4.c | 2 +- .../g++.dg/simulate-thread/bitfields-2.C | 2 +- .../g++.dg/simulate-thread/bitfields.C | 2 +- gcc/testsuite/gcc.dg/lto/pr52097_0.c | 2 +- .../simulate-thread/speculative-store-2.c | 2 +- .../simulate-thread/speculative-store-3.c | 2 +- .../simulate-thread/speculative-store-4.c | 2 +- .../gcc.dg/simulate-thread/speculative-store.c | 4 ++-- gcc/testsuite/gcc.dg/tree-ssa/20050314-1.c | 2 +- gcc/tree-if-conv.c | 4 ++-- gcc/tree-ssa-loop-im.c | 2 +- 23 files changed, 67 insertions(+), 40 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 91809ca9c071..299bcb1c8a5d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2019-10-15 Richard Biener + + PR middle-end/92046 + * common.opt (fallow-store-data-races): New. + * params.def (PARAM_ALLOW_STORE_DATA_RACES): Remove. + * params.h (ALLOW_STORE_DATA_RACES): Likewise. + * doc/invoke.texi (fallow-store-data-races): Document. + (--param allow-store-data-races): Remove docs. + * opts.c (default_options_table): Enable -fallow-store-data-races + at -Ofast. + (default_options_optimization): Do not enable --param + allow-store-data-races at -Ofast. + * tree-if-conv.c (ifcvt_memrefs_wont_trap): Use flag_store_data_races + instead of PARAM_ALLOW_STORE_DATA_RACES. + * tree-ssa-loop-im.c (execute_sm): Likewise. + 2019-10-15 Prathamesh Kulkarni PR tree-optimization/92085 diff --git a/gcc/common.opt b/gcc/common.opt index 124e8cf3ebe8..859c0f9141dd 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -993,6 +993,10 @@ Align the start of loops. falign-loops= Common RejectNegative Joined Var(str_align_loops) Optimization +fallow-store-data-races +Common Report Var(flag_store_data_races) Optimization +Allow the compiler to introduce new data races on stores. + fargument-alias Common Ignore Does nothing. Preserved for backward compatibility. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 085e8b0b2cac..47769262b8e7 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -406,6 +406,7 @@ Objective-C and Objective-C++ Dialects}. -falign-jumps[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol -falign-labels[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol -falign-loops[=@var{n}[:@var{m}:[@var{n2}[:@var{m2}]]]] @gol +-fallow-store-data-races @gol -fassociative-math -fauto-profile -fauto-profile[=@var{path}] @gol -fauto-inc-dec -fbranch-probabilities @gol -fcaller-saves @gol @@ -8463,9 +8464,9 @@ designed to reduce code size. Disregard strict standards compliance. @option{-Ofast} enables all @option{-O3} optimizations. It also enables optimizations that are not valid for all standard-compliant programs. -It turns on @option{-ffast-math} and the Fortran-specific -@option{-fstack-arrays}, unless @option{-fmax-stack-var-size} is -specified, and @option{-fno-protect-parens}. +It turns on @option{-ffast-math}, @option{-fallow-store-data-races} +and the Fortran-specific @option{-fstack-arrays}, unless +@option{-fmax-stack-var-size} is specified, and @option{-fno-protect-parens}. @item -Og @opindex Og @@ -10227,6 +10228,12 @@ The maximum allowed @var{n} option value is 65536. Enabled at levels @option{-O2}, @option{-O3}. +@item -fallow-store-data-races +@opindex fallow-store-data-races +Allow the compiler to introduce new data races on stores. + +Enabled at level @option{-Ofast}. + @item -funit-at-a-time @opindex funit-at-a-time This option is left for compatibility reasons. @option{-funit-at-a-time} @@ -12060,10 +12067,6 @@ The maximum number of conditional store pairs that can be sunk. Set to 0 if either vectorization (@option{-ftree-vectorize}) or if-conversion (@option{-ftree-loop-if-convert}) is disabled. -@item allow-store-data-races -Allow optimizers to introduce new data races on stores. -Set to 1 to allow, otherwise to 0. - @item case-values-threshold The smallest number of different values for which it is best to use a jump-table instead of a tree of conditional branches. If the value is diff --git a/gcc/opts.c b/gcc/opts.c index ff95853845e3..10b9f108f8d0 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -564,6 +564,7 @@ static const struct default_options default_options_table[] = /* -Ofast adds optimizations to -O3. */ { OPT_LEVELS_FAST, OPT_ffast_math, NULL, 1 }, + { OPT_LEVELS_FAST, OPT_fallow_store_data_races, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } }; @@ -671,13 +672,6 @@ default_options_optimization (struct gcc_options *opts, opt2 ? 100 : default_param_value (PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE), opts->x_param_values, opts_set->x_param_values); - /* At -Ofast, allow store motion to introduce potential race conditions. */ - maybe_set_param_value - (PARAM_ALLOW_STORE_DATA_RACES, - opts->x_optimize_fast ? 1 - : default_param_value (PARAM_ALLOW_STORE_DATA_RACES), - opts->x_param_values, opts_set->x_param_values); - if (opts->x_optimize_size) /* We want to crossjump as much as possible. */ maybe_set_param_value (PARAM_MIN_CROSSJUMP_INSNS, 1, diff --git a/gcc/params.def b/gcc/params.def index 4cb48d9ab5ba..e4b70bac22a4 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -1225,12 +1225,6 @@ DEFPARAM (PARAM_JUMP_TABLE_MAX_GROWTH_RATIO_FOR_SPEED, "optimizing for speed.", 800, 0, 0) -/* Data race flags for C++0x memory model compliance. */ -DEFPARAM (PARAM_ALLOW_STORE_DATA_RACES, - "allow-store-data-races", - "Allow new data races on stores to be introduced.", - 0, 0, 1) - /* Reassociation width to be used by tree reassoc optimization. */ DEFPARAM (PARAM_TREE_REASSOC_WIDTH, "tree-reassoc-width", diff --git a/gcc/params.h b/gcc/params.h index 26f1236aa654..1aaef6d6a00d 100644 --- a/gcc/params.h +++ b/gcc/params.h @@ -228,8 +228,6 @@ extern void init_param_values (int *params); PARAM_VALUE (PARAM_MAX_STORES_TO_SINK) #define ALLOW_LOAD_DATA_RACES \ PARAM_VALUE (PARAM_ALLOW_LOAD_DATA_RACES) -#define ALLOW_STORE_DATA_RACES \ - PARAM_VALUE (PARAM_ALLOW_STORE_DATA_RACES) #define ALLOW_PACKED_LOAD_DATA_RACES \ PARAM_VALUE (PARAM_ALLOW_PACKED_LOAD_DATA_RACES) #define ALLOW_PACKED_STORE_DATA_RACES \ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ae169070ed52..8ff78713652f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,21 @@ +2019-10-15 Richard Biener + + PR middle-end/92046 + * c-c++-common/cxxbitfields-3.c: Adjust. + * c-c++-common/cxxbitfields-6.c: Likewise. + * c-c++-common/simulate-thread/bitfields-1.c: Likewise. + * c-c++-common/simulate-thread/bitfields-2.c: Likewise. + * c-c++-common/simulate-thread/bitfields-3.c: Likewise. + * c-c++-common/simulate-thread/bitfields-4.c: Likewise. + * g++.dg/simulate-thread/bitfields-2.C: Likewise. + * g++.dg/simulate-thread/bitfields.C: Likewise. + * gcc.dg/lto/pr52097_0.c: Likewise. + * gcc.dg/simulate-thread/speculative-store-2.c: Likewise. + * gcc.dg/simulate-thread/speculative-store-3.c: Likewise. + * gcc.dg/simulate-thread/speculative-store-4.c: Likewise. + * gcc.dg/simulate-thread/speculative-store.c: Likewise. + * gcc.dg/tree-ssa/20050314-1.c: Likewise. + 2019-10-15 Prathamesh Kulkarni PR tree-optimization/92085 diff --git a/gcc/testsuite/c-c++-common/cxxbitfields-3.c b/gcc/testsuite/c-c++-common/cxxbitfields-3.c index fc423ea8b293..706bf8659ea9 100644 --- a/gcc/testsuite/c-c++-common/cxxbitfields-3.c +++ b/gcc/testsuite/c-c++-common/cxxbitfields-3.c @@ -1,5 +1,5 @@ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ -/* { dg-options "-O2 --param allow-store-data-races=0" } */ +/* { dg-options "-O2 -fno-allow-store-data-races" } */ /* Make sure we don't narrow down to a QI or HI to store into VAR.J, but instead use an SI. */ diff --git a/gcc/testsuite/c-c++-common/cxxbitfields-6.c b/gcc/testsuite/c-c++-common/cxxbitfields-6.c index bdd62941b4db..273117c0589d 100644 --- a/gcc/testsuite/c-c++-common/cxxbitfields-6.c +++ b/gcc/testsuite/c-c++-common/cxxbitfields-6.c @@ -1,6 +1,6 @@ /* PR middle-end/50141 */ /* { dg-do compile } */ -/* { dg-options "-O2 --param allow-store-data-races=0" } */ +/* { dg-options "-O2 -fno-allow-store-data-races" } */ struct S { diff --git a/gcc/testsuite/c-c++-common/simulate-thread/bitfields-1.c b/gcc/testsuite/c-c++-common/simulate-thread/bitfields-1.c index 9ca3a67f3c42..89d4d082ed86 100644 --- a/gcc/testsuite/c-c++-common/simulate-thread/bitfields-1.c +++ b/gcc/testsuite/c-c++-common/simulate-thread/bitfields-1.c @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-options "--param allow-store-data-races=0" } */ +/* { dg-options "-fno-allow-store-data-races" } */ /* { dg-final { simulate-thread } } */ #include diff --git a/gcc/testsuite/c-c++-common/simulate-thread/bitfields-2.c b/gcc/testsuite/c-c++-common/simulate-thread/bitfields-2.c index 0b29ffb68d4d..54f76b6da37c 100644 --- a/gcc/testsuite/c-c++-common/simulate-thread/bitfields-2.c +++ b/gcc/testsuite/c-c++-common/simulate-thread/bitfields-2.c @@ -1,5 +1,5 @@ /* { dg-do link { target { ! int16 } } } */ -/* { dg-options "--param allow-store-data-races=0" } */ +/* { dg-options "-fno-allow-store-data-races" } */ /* { dg-final { simulate-thread } } */ #include diff --git a/gcc/testsuite/c-c++-common/simulate-thread/bitfields-3.c b/gcc/testsuite/c-c++-common/simulate-thread/bitfields-3.c index 78f4d75c8ba7..5d2feed9f034 100644 --- a/gcc/testsuite/c-c++-common/simulate-thread/bitfields-3.c +++ b/gcc/testsuite/c-c++-common/simulate-thread/bitfields-3.c @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-options "--param allow-store-data-races=0" } */ +/* { dg-options "-fno-allow-store-data-races" } */ /* { dg-final { simulate-thread } } */ #include diff --git a/gcc/testsuite/c-c++-common/simulate-thread/bitfields-4.c b/gcc/testsuite/c-c++-common/simulate-thread/bitfields-4.c index cd6badf33295..84aad5e9e216 100644 --- a/gcc/testsuite/c-c++-common/simulate-thread/bitfields-4.c +++ b/gcc/testsuite/c-c++-common/simulate-thread/bitfields-4.c @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-options "--param allow-store-data-races=0" } */ +/* { dg-options "-fno-allow-store-data-races" } */ /* { dg-final { simulate-thread } } */ #include diff --git a/gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C b/gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C index be5d1eae5c42..e5a5ad5f1c3f 100644 --- a/gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C +++ b/gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-options "--param allow-store-data-races=0" } */ +/* { dg-options "-fno-allow-store-data-races" } */ /* { dg-final { simulate-thread } } */ /* Test that setting does not touch either or . diff --git a/gcc/testsuite/g++.dg/simulate-thread/bitfields.C b/gcc/testsuite/g++.dg/simulate-thread/bitfields.C index b829587276b2..9d1d0622c1d0 100644 --- a/gcc/testsuite/g++.dg/simulate-thread/bitfields.C +++ b/gcc/testsuite/g++.dg/simulate-thread/bitfields.C @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-options "--param allow-store-data-races=0" } */ +/* { dg-options "-fno-allow-store-data-races" } */ /* { dg-final { simulate-thread } } */ /* Test that setting does not touch either or . diff --git a/gcc/testsuite/gcc.dg/lto/pr52097_0.c b/gcc/testsuite/gcc.dg/lto/pr52097_0.c index 1b3fda3b9113..701a951c0b43 100644 --- a/gcc/testsuite/gcc.dg/lto/pr52097_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr52097_0.c @@ -1,5 +1,5 @@ /* { dg-lto-do link } */ -/* { dg-lto-options { { -O -flto -fexceptions -fnon-call-exceptions --param allow-store-data-races=0 } } } */ +/* { dg-lto-options { { -O -flto -fexceptions -fnon-call-exceptions -fno-allow-store-data-races } } } */ /* { dg-require-effective-target exceptions } */ typedef struct { unsigned int e0 : 16; } s1; diff --git a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c index d4d28f5ed607..e3e911808bf0 100644 --- a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c +++ b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-options "--param allow-store-data-races=0 -O2" } */ +/* { dg-options "-fno-allow-store-data-races -O2" } */ /* { dg-final { simulate-thread } } */ #include diff --git a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-3.c b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-3.c index 203c026048d4..69f6683901ac 100644 --- a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-3.c +++ b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-3.c @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-options "--param allow-store-data-races=0 -O2" } */ +/* { dg-options "-fno-allow-store-data-races -O2" } */ /* { dg-final { simulate-thread } } */ #include diff --git a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-4.c b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-4.c index 59f81b756be5..b3784467dcec 100644 --- a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-4.c +++ b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-4.c @@ -1,5 +1,5 @@ /* { dg-do link } */ -/* { dg-options "--param allow-store-data-races=0" } */ +/* { dg-options "-fno-allow-store-data-races" } */ /* { dg-final { simulate-thread } } */ #include diff --git a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c index ff9d71e08754..7afaabb150e2 100644 --- a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c +++ b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c @@ -1,12 +1,12 @@ /* { dg-do link } */ -/* { dg-options "--param allow-store-data-races=0" } */ +/* { dg-options "-fno-allow-store-data-races" } */ /* { dg-final { simulate-thread } } */ #include #include "simulate-thread.h" /* This file tests that speculative store movement out of a loop doesn't - happen. This is disallowed when --param allow-store-data-races is 0. */ + happen. This is disallowed when -fno-allow-store-data-races. */ int global = 100; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20050314-1.c b/gcc/testsuite/gcc.dg/tree-ssa/20050314-1.c index fd9895b70201..ffeffb4a01e3 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/20050314-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/20050314-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O1 -fdump-tree-lim2-details --param allow-store-data-races=1" } */ +/* { dg-options "-O1 -fdump-tree-lim2-details -fallow-store-data-races" } */ float a[100]; diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index 3c296ec30026..df9046a30147 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -914,10 +914,10 @@ ifcvt_memrefs_wont_trap (gimple *stmt, vec drs) to unconditionally. */ if (base_master_dr && DR_BASE_W_UNCONDITIONALLY (*base_master_dr)) - return PARAM_VALUE (PARAM_ALLOW_STORE_DATA_RACES); + return flag_store_data_races; /* or the base is known to be not readonly. */ else if (base_object_writable (DR_REF (a))) - return PARAM_VALUE (PARAM_ALLOW_STORE_DATA_RACES); + return flag_store_data_races; } return false; diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index c247d7433061..78664188c459 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -2100,7 +2100,7 @@ execute_sm (class loop *loop, vec exits, im_mem_ref *ref) for_each_index (&ref->mem.ref, force_move_till, &fmt_data); if (bb_in_transaction (loop_preheader_edge (loop)->src) - || (! PARAM_VALUE (PARAM_ALLOW_STORE_DATA_RACES) + || (! flag_store_data_races && ! ref_always_accessed_p (loop, ref, true))) multi_threaded_model_p = true; -- 2.43.5