aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2019-10-15 07:28:26 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2019-10-15 07:28:26 +0000
commit32f12996d3d4e07a1d88a2f0f40a224a55996599 (patch)
treefd98ddc8ba44f1a15b3252553cd393c44d7ab2d4
parente8c76343d18ac20c01f17776c5f94d1476949007 (diff)
2019-10-15 Richard Biener <rguenther@suse.de>
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@276985 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog16
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/doc/invoke.texi17
-rw-r--r--gcc/opts.c8
-rw-r--r--gcc/params.def6
-rw-r--r--gcc/params.h2
-rw-r--r--gcc/testsuite/ChangeLog18
-rw-r--r--gcc/testsuite/c-c++-common/cxxbitfields-3.c2
-rw-r--r--gcc/testsuite/c-c++-common/cxxbitfields-6.c2
-rw-r--r--gcc/testsuite/c-c++-common/simulate-thread/bitfields-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/simulate-thread/bitfields-2.c2
-rw-r--r--gcc/testsuite/c-c++-common/simulate-thread/bitfields-3.c2
-rw-r--r--gcc/testsuite/c-c++-common/simulate-thread/bitfields-4.c2
-rw-r--r--gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C2
-rw-r--r--gcc/testsuite/g++.dg/simulate-thread/bitfields.C2
-rw-r--r--gcc/testsuite/gcc.dg/lto/pr52097_0.c2
-rw-r--r--gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/simulate-thread/speculative-store-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/simulate-thread/speculative-store-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/20050314-1.c2
-rw-r--r--gcc/tree-if-conv.c4
-rw-r--r--gcc/tree-ssa-loop-im.c2
23 files changed, 67 insertions, 40 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 91809ca9c07..299bcb1c8a5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,19 @@
+2019-10-15 Richard Biener <rguenther@suse.de>
+
+ 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 <prathamesh.kulkarni@linaro.org>
PR tree-optimization/92085
diff --git a/gcc/common.opt b/gcc/common.opt
index 124e8cf3ebe..859c0f9141d 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 085e8b0b2ca..47769262b8e 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 ff95853845e..10b9f108f8d 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 4cb48d9ab5b..e4b70bac22a 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 26f1236aa65..1aaef6d6a00 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 ae169070ed5..8ff78713652 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,21 @@
+2019-10-15 Richard Biener <rguenther@suse.de>
+
+ 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 <prathamesh.kulkarni@linaro.org>
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 fc423ea8b29..706bf8659ea 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 bdd62941b4d..273117c0589 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 9ca3a67f3c4..89d4d082ed8 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 <stdio.h>
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 0b29ffb68d4..54f76b6da37 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 <stdio.h>
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 78f4d75c8ba..5d2feed9f03 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 <stdio.h>
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 cd6badf3329..84aad5e9e21 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 <stdio.h>
diff --git a/gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C b/gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C
index be5d1eae5c4..e5a5ad5f1c3 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 <var.a> does not touch either <var.b> or <var.c>.
diff --git a/gcc/testsuite/g++.dg/simulate-thread/bitfields.C b/gcc/testsuite/g++.dg/simulate-thread/bitfields.C
index b829587276b..9d1d0622c1d 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 <var.a> does not touch either <var.b> or <var.c>.
diff --git a/gcc/testsuite/gcc.dg/lto/pr52097_0.c b/gcc/testsuite/gcc.dg/lto/pr52097_0.c
index 1b3fda3b911..701a951c0b4 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 d4d28f5ed60..e3e911808bf 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 <stdio.h>
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 203c026048d..69f6683901a 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 <stdio.h>
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 59f81b756be..b3784467dce 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 <stdio.h>
diff --git a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store.c
index ff9d71e0875..7afaabb150e 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 <stdio.h>
#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 fd9895b7020..ffeffb4a01e 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 3c296ec3002..df9046a3014 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -914,10 +914,10 @@ ifcvt_memrefs_wont_trap (gimple *stmt, vec<data_reference_p> 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 c247d743306..78664188c45 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<edge> 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;