diff mbox

Change default for --param allow-...-data-races to off

Message ID 20140624201933.GB32150@virgil.suse
State New
Headers show

Commit Message

Martin Jambor June 24, 2014, 8:19 p.m. UTC
On Mon, Jun 23, 2014 at 03:35:01PM +0200, Bernd Edlinger wrote:
> Hi Martin,
> 
> >>
> >> Well actually, I am not sure if we ever wanted to have a race condition here.
> >> Have you seen any impact of --param allow-store-data-races on any benchmark?
> >
> > It's trivially to write one. The only pass that checks the param is
> > tree loop invariant motion and it does that when it applies store-motion.
> > Register pressure increase is increased by a factor of two.
> >
> > So I'd agree that we might want to disable this again for -Ofast.
> >
> > As nothing tests for the PACKED variants nor for the LOAD variant
> > I'd rather remove those. Claiming we don't create races for those
> > when you disable it via the param is simply not true.
> >
> > Thanks,
> > Richard.
> >
> 
> OK, please go ahead with your patch.

Perhaps not unsurprisingly, the patch is very similar.  Bootstrapped
and tested on x86_64-linux.  OK for trunk?

Thanks,

Martin


2014-06-24  Martin Jambor  <mjambor@suse.cz>

	* params.def (PARAM_ALLOW_LOAD_DATA_RACES)
	(PARAM_ALLOW_PACKED_LOAD_DATA_RACES)
	(PARAM_ALLOW_PACKED_STORE_DATA_RACES): Removed.
	(PARAM_ALLOW_STORE_DATA_RACES): Set default to zero.
	* opts.c (default_options_optimization): Set
	PARAM_ALLOW_STORE_DATA_RACES to one at -Ofast.
	* doc/invoke.texi (allow-load-data-races)
	(allow-packed-load-data-races, allow-packed-store-data-races):
	Removed.
	(allow-store-data-races): Document the new default.

testsuite/
	* g++.dg/simulate-thread/bitfields-2.C: Remove allow-load-data-races
	parameter.
	* g++.dg/simulate-thread/bitfields.C: Likewise.
	* gcc.dg/simulate-thread/strict-align-global.c: Remove
	allow-packed-store-data-races parameter.
	* gcc.dg/simulate-thread/subfields.c: Likewise.
	* gcc.dg/tree-ssa/20050314-1.c: Set parameter allow-store-data-races
	to one.

Comments

Richard Biener June 25, 2014, 8:14 a.m. UTC | #1
On Tue, Jun 24, 2014 at 10:19 PM, Martin Jambor <mjambor@suse.cz> wrote:
> On Mon, Jun 23, 2014 at 03:35:01PM +0200, Bernd Edlinger wrote:
>> Hi Martin,
>>
>> >>
>> >> Well actually, I am not sure if we ever wanted to have a race condition here.
>> >> Have you seen any impact of --param allow-store-data-races on any benchmark?
>> >
>> > It's trivially to write one. The only pass that checks the param is
>> > tree loop invariant motion and it does that when it applies store-motion.
>> > Register pressure increase is increased by a factor of two.
>> >
>> > So I'd agree that we might want to disable this again for -Ofast.
>> >
>> > As nothing tests for the PACKED variants nor for the LOAD variant
>> > I'd rather remove those. Claiming we don't create races for those
>> > when you disable it via the param is simply not true.
>> >
>> > Thanks,
>> > Richard.
>> >
>>
>> OK, please go ahead with your patch.
>
> Perhaps not unsurprisingly, the patch is very similar.  Bootstrapped
> and tested on x86_64-linux.  OK for trunk?

Ok - please give the C++/atomics folks a chance to comment.

This change of default behavior should also be documented in
gcc-4.10/changes.html.

Thanks,
Richard.

> Thanks,
>
> Martin
>
>
> 2014-06-24  Martin Jambor  <mjambor@suse.cz>
>
>         * params.def (PARAM_ALLOW_LOAD_DATA_RACES)
>         (PARAM_ALLOW_PACKED_LOAD_DATA_RACES)
>         (PARAM_ALLOW_PACKED_STORE_DATA_RACES): Removed.
>         (PARAM_ALLOW_STORE_DATA_RACES): Set default to zero.
>         * opts.c (default_options_optimization): Set
>         PARAM_ALLOW_STORE_DATA_RACES to one at -Ofast.
>         * doc/invoke.texi (allow-load-data-races)
>         (allow-packed-load-data-races, allow-packed-store-data-races):
>         Removed.
>         (allow-store-data-races): Document the new default.
>
> testsuite/
>         * g++.dg/simulate-thread/bitfields-2.C: Remove allow-load-data-races
>         parameter.
>         * g++.dg/simulate-thread/bitfields.C: Likewise.
>         * gcc.dg/simulate-thread/strict-align-global.c: Remove
>         allow-packed-store-data-races parameter.
>         * gcc.dg/simulate-thread/subfields.c: Likewise.
>         * gcc.dg/tree-ssa/20050314-1.c: Set parameter allow-store-data-races
>         to one.
>
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index 0d4bd00..027b6fb 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -10176,25 +10176,10 @@ The maximum number of conditional stores paires that can be sunk.  Set to 0
>  if either vectorization (@option{-ftree-vectorize}) or if-conversion
>  (@option{-ftree-loop-if-convert}) is disabled.  The default is 2.
>
> -@item allow-load-data-races
> -Allow optimizers to introduce new data races on loads.
> -Set to 1 to allow, otherwise to 0.  This option is enabled by default
> -unless implicitly set by the @option{-fmemory-model=} option.
> -
>  @item allow-store-data-races
>  Allow optimizers to introduce new data races on stores.
>  Set to 1 to allow, otherwise to 0.  This option is enabled by default
> -unless implicitly set by the @option{-fmemory-model=} option.
> -
> -@item allow-packed-load-data-races
> -Allow optimizers to introduce new data races on packed data loads.
> -Set to 1 to allow, otherwise to 0.  This option is enabled by default
> -unless implicitly set by the @option{-fmemory-model=} option.
> -
> -@item allow-packed-store-data-races
> -Allow optimizers to introduce new data races on packed data stores.
> -Set to 1 to allow, otherwise to 0.  This option is enabled by default
> -unless implicitly set by the @option{-fmemory-model=} option.
> +at optimization level @option{-Ofast}.
>
>  @item case-values-threshold
>  The smallest number of different values for which it is best to use a
> diff --git a/gcc/opts.c b/gcc/opts.c
> index 3ab06c6..19203dc 100644
> --- a/gcc/opts.c
> +++ b/gcc/opts.c
> @@ -620,6 +620,13 @@ default_options_optimization (struct gcc_options *opts,
>       opt2 ? default_param_value (PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP) : 1000,
>       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 28ef79a..aa1e88d 100644
> --- a/gcc/params.def
> +++ b/gcc/params.def
> @@ -1002,25 +1002,10 @@ DEFPARAM (PARAM_CASE_VALUES_THRESHOLD,
>            0, 0, 0)
>
>  /* Data race flags for C++0x memory model compliance.  */
> -DEFPARAM (PARAM_ALLOW_LOAD_DATA_RACES,
> -         "allow-load-data-races",
> -         "Allow new data races on loads to be introduced",
> -         1, 0, 1)
> -
>  DEFPARAM (PARAM_ALLOW_STORE_DATA_RACES,
>           "allow-store-data-races",
>           "Allow new data races on stores to be introduced",
> -         1, 0, 1)
> -
> -DEFPARAM (PARAM_ALLOW_PACKED_LOAD_DATA_RACES,
> -         "allow-packed-load-data-races",
> -         "Allow new data races on packed data loads to be introduced",
> -         1, 0, 1)
> -
> -DEFPARAM (PARAM_ALLOW_PACKED_STORE_DATA_RACES,
> -         "allow-packed-store-data-races",
> -         "Allow new data races on packed data stores to be introduced",
> -         1, 0, 1)
> +         0, 0, 1)
>
>  /* Reassociation width to be used by tree reassoc optimization.  */
>  DEFPARAM (PARAM_TREE_REASSOC_WIDTH,
> diff --git a/gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C b/gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C
> index 077514a..be5d1ea 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-load-data-races=0 --param allow-store-data-races=0" } */
> +/* { dg-options "--param allow-store-data-races=0" } */
>  /* { 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 3acf21f..b829587 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-load-data-races=0 --param allow-store-data-races=0" } */
> +/* { dg-options "--param allow-store-data-races=0" } */
>  /* { 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/simulate-thread/strict-align-global.c b/gcc/testsuite/gcc.dg/simulate-thread/strict-align-global.c
> index fdcd7f4..f8b88ad 100644
> --- a/gcc/testsuite/gcc.dg/simulate-thread/strict-align-global.c
> +++ b/gcc/testsuite/gcc.dg/simulate-thread/strict-align-global.c
> @@ -1,5 +1,4 @@
>  /* { dg-do link } */
> -/* { dg-options "--param allow-packed-store-data-races=0" } */
>  /* { dg-final { simulate-thread } } */
>
>  #include <stdio.h>
> diff --git a/gcc/testsuite/gcc.dg/simulate-thread/subfields.c b/gcc/testsuite/gcc.dg/simulate-thread/subfields.c
> index 2d93117..70e38a1 100644
> --- a/gcc/testsuite/gcc.dg/simulate-thread/subfields.c
> +++ b/gcc/testsuite/gcc.dg/simulate-thread/subfields.c
> @@ -1,5 +1,4 @@
>  /* { dg-do link } */
> -/* { dg-options "--param allow-packed-store-data-races=0" } */
>  /* { dg-final { simulate-thread } } */
>
>  #include <stdio.h>
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20050314-1.c b/gcc/testsuite/gcc.dg/tree-ssa/20050314-1.c
> index 1082973..8f07781 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-lim1-details" } */
> +/* { dg-options "-O1 -fdump-tree-lim1-details --param allow-store-data-races=1" } */
>
>  float a[100];
>
Jakub Jelinek June 25, 2014, 8:54 a.m. UTC | #2
On Wed, Jun 25, 2014 at 10:14:17AM +0200, Richard Biener wrote:
> > Perhaps not unsurprisingly, the patch is very similar.  Bootstrapped
> > and tested on x86_64-linux.  OK for trunk?
> 
> Ok - please give the C++/atomics folks a chance to comment.
> 
> This change of default behavior should also be documented in
> gcc-4.10/changes.html.

Do we want to allow the store data races by default with -Ofast even in strict
conformance modes (-std=c++11, -std=c++14, -std=c11)?

	Jakub
Richard Biener June 25, 2014, 8:56 a.m. UTC | #3
On Wed, Jun 25, 2014 at 10:54 AM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Wed, Jun 25, 2014 at 10:14:17AM +0200, Richard Biener wrote:
>> > Perhaps not unsurprisingly, the patch is very similar.  Bootstrapped
>> > and tested on x86_64-linux.  OK for trunk?
>>
>> Ok - please give the C++/atomics folks a chance to comment.
>>
>> This change of default behavior should also be documented in
>> gcc-4.10/changes.html.
>
> Do we want to allow the store data races by default with -Ofast even in strict
> conformance modes (-std=c++11, -std=c++14, -std=c11)?

I think so.  -Ofast means -Ofast (same issue with fp contraction and other
stuff -ffast-math enables that is not valid in strict conformance mode).

Richard.
Marc Glisse June 25, 2014, 9:48 a.m. UTC | #4
On Wed, 25 Jun 2014, Richard Biener wrote:

> On Wed, Jun 25, 2014 at 10:54 AM, Jakub Jelinek <jakub@redhat.com> wrote:
>> On Wed, Jun 25, 2014 at 10:14:17AM +0200, Richard Biener wrote:
>>>> Perhaps not unsurprisingly, the patch is very similar.  Bootstrapped
>>>> and tested on x86_64-linux.  OK for trunk?
>>>
>>> Ok - please give the C++/atomics folks a chance to comment.
>>>
>>> This change of default behavior should also be documented in
>>> gcc-4.10/changes.html.
>>
>> Do we want to allow the store data races by default with -Ofast even in strict
>> conformance modes (-std=c++11, -std=c++14, -std=c11)?
>
> I think so.  -Ofast means -Ofast (same issue with fp contraction and other
> stuff -ffast-math enables that is not valid in strict conformance mode).

One thing I am missing is a -single-thread option that would allow races, 
remove atomics and thread locals, etc, without breaking conformance as 
long as no second thread is created. I hope that not too many libraries 
use threads internally in a way that would break this.
Jeff Law June 25, 2014, 9:14 p.m. UTC | #5
On 06/24/14 14:19, Martin Jambor wrote:
> On Mon, Jun 23, 2014 at 03:35:01PM +0200, Bernd Edlinger wrote:
>> Hi Martin,
>>
>>>>
>>>> Well actually, I am not sure if we ever wanted to have a race condition here.
>>>> Have you seen any impact of --param allow-store-data-races on any benchmark?
>>>
>>> It's trivially to write one. The only pass that checks the param is
>>> tree loop invariant motion and it does that when it applies store-motion.
>>> Register pressure increase is increased by a factor of two.
>>>
>>> So I'd agree that we might want to disable this again for -Ofast.
>>>
>>> As nothing tests for the PACKED variants nor for the LOAD variant
>>> I'd rather remove those. Claiming we don't create races for those
>>> when you disable it via the param is simply not true.
>>>
>>> Thanks,
>>> Richard.
>>>
>>
>> OK, please go ahead with your patch.
>
> Perhaps not unsurprisingly, the patch is very similar.  Bootstrapped
> and tested on x86_64-linux.  OK for trunk?
>
> Thanks,
>
> Martin
>
>
> 2014-06-24  Martin Jambor  <mjambor@suse.cz>
>
> 	* params.def (PARAM_ALLOW_LOAD_DATA_RACES)
> 	(PARAM_ALLOW_PACKED_LOAD_DATA_RACES)
> 	(PARAM_ALLOW_PACKED_STORE_DATA_RACES): Removed.
> 	(PARAM_ALLOW_STORE_DATA_RACES): Set default to zero.
> 	* opts.c (default_options_optimization): Set
> 	PARAM_ALLOW_STORE_DATA_RACES to one at -Ofast.
> 	* doc/invoke.texi (allow-load-data-races)
> 	(allow-packed-load-data-races, allow-packed-store-data-races):
> 	Removed.
> 	(allow-store-data-races): Document the new default.
>
> testsuite/
> 	* g++.dg/simulate-thread/bitfields-2.C: Remove allow-load-data-races
> 	parameter.
> 	* g++.dg/simulate-thread/bitfields.C: Likewise.
> 	* gcc.dg/simulate-thread/strict-align-global.c: Remove
> 	allow-packed-store-data-races parameter.
> 	* gcc.dg/simulate-thread/subfields.c: Likewise.
> 	* gcc.dg/tree-ssa/20050314-1.c: Set parameter allow-store-data-races
> 	to one.
Don't we want to deprecate, not remove the dead options?


Jeff
Martin Jambor June 25, 2014, 10:03 p.m. UTC | #6
Hi,

On Wed, Jun 25, 2014 at 03:14:31PM -0600, Jeff Law wrote:
> On 06/24/14 14:19, Martin Jambor wrote:
> >On Mon, Jun 23, 2014 at 03:35:01PM +0200, Bernd Edlinger wrote:
> >>Hi Martin,
> >>
> >>>>
> >>>>Well actually, I am not sure if we ever wanted to have a race condition here.
> >>>>Have you seen any impact of --param allow-store-data-races on any benchmark?
> >>>
> >>>It's trivially to write one. The only pass that checks the param is
> >>>tree loop invariant motion and it does that when it applies store-motion.
> >>>Register pressure increase is increased by a factor of two.
> >>>
> >>>So I'd agree that we might want to disable this again for -Ofast.
> >>>
> >>>As nothing tests for the PACKED variants nor for the LOAD variant
> >>>I'd rather remove those. Claiming we don't create races for those
> >>>when you disable it via the param is simply not true.
> >>>
> >>>Thanks,
> >>>Richard.
> >>>
> >>
> >>OK, please go ahead with your patch.
> >
> >Perhaps not unsurprisingly, the patch is very similar.  Bootstrapped
> >and tested on x86_64-linux.  OK for trunk?
> >
> >Thanks,
> >
> >Martin
> >
> >
> >2014-06-24  Martin Jambor  <mjambor@suse.cz>
> >
> >	* params.def (PARAM_ALLOW_LOAD_DATA_RACES)
> >	(PARAM_ALLOW_PACKED_LOAD_DATA_RACES)
> >	(PARAM_ALLOW_PACKED_STORE_DATA_RACES): Removed.
> >	(PARAM_ALLOW_STORE_DATA_RACES): Set default to zero.
> >	* opts.c (default_options_optimization): Set
> >	PARAM_ALLOW_STORE_DATA_RACES to one at -Ofast.
> >	* doc/invoke.texi (allow-load-data-races)
> >	(allow-packed-load-data-races, allow-packed-store-data-races):
> >	Removed.
> >	(allow-store-data-races): Document the new default.
> >
> >testsuite/
> >	* g++.dg/simulate-thread/bitfields-2.C: Remove allow-load-data-races
> >	parameter.
> >	* g++.dg/simulate-thread/bitfields.C: Likewise.
> >	* gcc.dg/simulate-thread/strict-align-global.c: Remove
> >	allow-packed-store-data-races parameter.
> >	* gcc.dg/simulate-thread/subfields.c: Likewise.
> >	* gcc.dg/tree-ssa/20050314-1.c: Set parameter allow-store-data-races
> >	to one.
> Don't we want to deprecate, not remove the dead options?
> 

Is there a mechanism for deprecating parameters (I could not quickly
find any) or do you mean to leave them there and only document them as
deprecated?

I am not really concerned how we deal with the unused parameters,
removing or any form of deprecating is fine with me.

Thanks,

Martin
Richard Biener June 26, 2014, 6:43 a.m. UTC | #7
On June 26, 2014 12:03:21 AM CEST, Martin Jambor <mjambor@suse.cz> wrote:
>Hi,
>
>On Wed, Jun 25, 2014 at 03:14:31PM -0600, Jeff Law wrote:
>> On 06/24/14 14:19, Martin Jambor wrote:
>> >On Mon, Jun 23, 2014 at 03:35:01PM +0200, Bernd Edlinger wrote:
>> >>Hi Martin,
>> >>
>> >>>>
>> >>>>Well actually, I am not sure if we ever wanted to have a race
>condition here.
>> >>>>Have you seen any impact of --param allow-store-data-races on any
>benchmark?
>> >>>
>> >>>It's trivially to write one. The only pass that checks the param
>is
>> >>>tree loop invariant motion and it does that when it applies
>store-motion.
>> >>>Register pressure increase is increased by a factor of two.
>> >>>
>> >>>So I'd agree that we might want to disable this again for -Ofast.
>> >>>
>> >>>As nothing tests for the PACKED variants nor for the LOAD variant
>> >>>I'd rather remove those. Claiming we don't create races for those
>> >>>when you disable it via the param is simply not true.
>> >>>
>> >>>Thanks,
>> >>>Richard.
>> >>>
>> >>
>> >>OK, please go ahead with your patch.
>> >
>> >Perhaps not unsurprisingly, the patch is very similar.  Bootstrapped
>> >and tested on x86_64-linux.  OK for trunk?
>> >
>> >Thanks,
>> >
>> >Martin
>> >
>> >
>> >2014-06-24  Martin Jambor  <mjambor@suse.cz>
>> >
>> >	* params.def (PARAM_ALLOW_LOAD_DATA_RACES)
>> >	(PARAM_ALLOW_PACKED_LOAD_DATA_RACES)
>> >	(PARAM_ALLOW_PACKED_STORE_DATA_RACES): Removed.
>> >	(PARAM_ALLOW_STORE_DATA_RACES): Set default to zero.
>> >	* opts.c (default_options_optimization): Set
>> >	PARAM_ALLOW_STORE_DATA_RACES to one at -Ofast.
>> >	* doc/invoke.texi (allow-load-data-races)
>> >	(allow-packed-load-data-races, allow-packed-store-data-races):
>> >	Removed.
>> >	(allow-store-data-races): Document the new default.
>> >
>> >testsuite/
>> >	* g++.dg/simulate-thread/bitfields-2.C: Remove
>allow-load-data-races
>> >	parameter.
>> >	* g++.dg/simulate-thread/bitfields.C: Likewise.
>> >	* gcc.dg/simulate-thread/strict-align-global.c: Remove
>> >	allow-packed-store-data-races parameter.
>> >	* gcc.dg/simulate-thread/subfields.c: Likewise.
>> >	* gcc.dg/tree-ssa/20050314-1.c: Set parameter
>allow-store-data-races
>> >	to one.
>> Don't we want to deprecate, not remove the dead options?
>> 
>
>Is there a mechanism for deprecating parameters (I could not quickly
>find any) or do you mean to leave them there and only document them as
>deprecated?
>
>I am not really concerned how we deal with the unused parameters,
>removing or any form of deprecating is fine with me.

--params are not a stable interface, so we can just remove those.  Of course this would be the opportunity to introduce a real option for this task and leave the param as an implementation detail.

Richard.

>Thanks,
>
>Martin
Bernd Edlinger June 26, 2014, 7:53 a.m. UTC | #8
Hi,

On Thu, 26 Jun 2014 08:43:46, Richard Biener wrote:
>
> On June 26, 2014 12:03:21 AM CEST, Martin Jambor <mjambor@suse.cz> wrote:
>>Hi,
>>
>>On Wed, Jun 25, 2014 at 03:14:31PM -0600, Jeff Law wrote:
>>> On 06/24/14 14:19, Martin Jambor wrote:
>>>>On Mon, Jun 23, 2014 at 03:35:01PM +0200, Bernd Edlinger wrote:
>>>>>Hi Martin,
>>>>>
>>>>>>>
>>>>>>>Well actually, I am not sure if we ever wanted to have a race
>>condition here.
>>>>>>>Have you seen any impact of --param allow-store-data-races on any
>>benchmark?
>>>>>>
>>>>>>It's trivially to write one. The only pass that checks the param
>>is
>>>>>>tree loop invariant motion and it does that when it applies
>>store-motion.
>>>>>>Register pressure increase is increased by a factor of two.
>>>>>>
>>>>>>So I'd agree that we might want to disable this again for -Ofast.
>>>>>>
>>>>>>As nothing tests for the PACKED variants nor for the LOAD variant
>>>>>>I'd rather remove those. Claiming we don't create races for those
>>>>>>when you disable it via the param is simply not true.
>>>>>>
>>>>>>Thanks,
>>>>>>Richard.
>>>>>>
>>>>>
>>>>>OK, please go ahead with your patch.
>>>>
>>>>Perhaps not unsurprisingly, the patch is very similar. Bootstrapped
>>>>and tested on x86_64-linux. OK for trunk?
>>>>
>>>>Thanks,
>>>>
>>>>Martin
>>>>
>>>>
>>>>2014-06-24 Martin Jambor <mjambor@suse.cz>
>>>>
>>>> * params.def (PARAM_ALLOW_LOAD_DATA_RACES)
>>>> (PARAM_ALLOW_PACKED_LOAD_DATA_RACES)
>>>> (PARAM_ALLOW_PACKED_STORE_DATA_RACES): Removed.
>>>> (PARAM_ALLOW_STORE_DATA_RACES): Set default to zero.
>>>> * opts.c (default_options_optimization): Set
>>>> PARAM_ALLOW_STORE_DATA_RACES to one at -Ofast.
>>>> * doc/invoke.texi (allow-load-data-races)
>>>> (allow-packed-load-data-races, allow-packed-store-data-races):
>>>> Removed.
>>>> (allow-store-data-races): Document the new default.
>>>>
>>>>testsuite/
>>>> * g++.dg/simulate-thread/bitfields-2.C: Remove
>>allow-load-data-races
>>>> parameter.
>>>> * g++.dg/simulate-thread/bitfields.C: Likewise.
>>>> * gcc.dg/simulate-thread/strict-align-global.c: Remove
>>>> allow-packed-store-data-races parameter.
>>>> * gcc.dg/simulate-thread/subfields.c: Likewise.
>>>> * gcc.dg/tree-ssa/20050314-1.c: Set parameter
>>allow-store-data-races
>>>> to one.
>>> Don't we want to deprecate, not remove the dead options?
>>>
>>
>>Is there a mechanism for deprecating parameters (I could not quickly
>>find any) or do you mean to leave them there and only document them as
>>deprecated?
>>
>>I am not really concerned how we deal with the unused parameters,
>>removing or any form of deprecating is fine with me.
>
> --params are not a stable interface, so we can just remove those. Of course this would be the opportunity to introduce a real option for this task and leave the param as an implementation detail.
>

well, of course, given the fact that the --param allow-store-data-races=0 is actually used now
by linux kernel makefiles we should keep this parameter.

I'd agree with Richard about the other parameters.

Note however that they are not really a secret any more:

See https://gcc.gnu.org/wiki/Atomic/GCCMM/ExecutiveSummary
where these --params are documented, should this page be adjusted too when
we remove them?


Bernd.

> Richard.
>
>>Thanks,
>>
>>Martin
>
>
diff mbox

Patch

diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 0d4bd00..027b6fb 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -10176,25 +10176,10 @@  The maximum number of conditional stores paires that can be sunk.  Set to 0
 if either vectorization (@option{-ftree-vectorize}) or if-conversion
 (@option{-ftree-loop-if-convert}) is disabled.  The default is 2.
 
-@item allow-load-data-races
-Allow optimizers to introduce new data races on loads.
-Set to 1 to allow, otherwise to 0.  This option is enabled by default
-unless implicitly set by the @option{-fmemory-model=} option.
-
 @item allow-store-data-races
 Allow optimizers to introduce new data races on stores.
 Set to 1 to allow, otherwise to 0.  This option is enabled by default
-unless implicitly set by the @option{-fmemory-model=} option.
-
-@item allow-packed-load-data-races
-Allow optimizers to introduce new data races on packed data loads.
-Set to 1 to allow, otherwise to 0.  This option is enabled by default
-unless implicitly set by the @option{-fmemory-model=} option.
-
-@item allow-packed-store-data-races
-Allow optimizers to introduce new data races on packed data stores.
-Set to 1 to allow, otherwise to 0.  This option is enabled by default
-unless implicitly set by the @option{-fmemory-model=} option.
+at optimization level @option{-Ofast}.
 
 @item case-values-threshold
 The smallest number of different values for which it is best to use a
diff --git a/gcc/opts.c b/gcc/opts.c
index 3ab06c6..19203dc 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -620,6 +620,13 @@  default_options_optimization (struct gcc_options *opts,
      opt2 ? default_param_value (PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP) : 1000,
      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 28ef79a..aa1e88d 100644
--- a/gcc/params.def
+++ b/gcc/params.def
@@ -1002,25 +1002,10 @@  DEFPARAM (PARAM_CASE_VALUES_THRESHOLD,
           0, 0, 0)
 
 /* Data race flags for C++0x memory model compliance.  */
-DEFPARAM (PARAM_ALLOW_LOAD_DATA_RACES,
-	  "allow-load-data-races",
-	  "Allow new data races on loads to be introduced",
-	  1, 0, 1)
-
 DEFPARAM (PARAM_ALLOW_STORE_DATA_RACES,
 	  "allow-store-data-races",
 	  "Allow new data races on stores to be introduced",
-	  1, 0, 1)
-
-DEFPARAM (PARAM_ALLOW_PACKED_LOAD_DATA_RACES,
-	  "allow-packed-load-data-races",
-	  "Allow new data races on packed data loads to be introduced",
-	  1, 0, 1)
-
-DEFPARAM (PARAM_ALLOW_PACKED_STORE_DATA_RACES,
-	  "allow-packed-store-data-races",
-	  "Allow new data races on packed data stores to be introduced",
-	  1, 0, 1)
+	  0, 0, 1)
 
 /* Reassociation width to be used by tree reassoc optimization.  */
 DEFPARAM (PARAM_TREE_REASSOC_WIDTH,
diff --git a/gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C b/gcc/testsuite/g++.dg/simulate-thread/bitfields-2.C
index 077514a..be5d1ea 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-load-data-races=0 --param allow-store-data-races=0" } */
+/* { dg-options "--param allow-store-data-races=0" } */
 /* { 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 3acf21f..b829587 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-load-data-races=0 --param allow-store-data-races=0" } */
+/* { dg-options "--param allow-store-data-races=0" } */
 /* { 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/simulate-thread/strict-align-global.c b/gcc/testsuite/gcc.dg/simulate-thread/strict-align-global.c
index fdcd7f4..f8b88ad 100644
--- a/gcc/testsuite/gcc.dg/simulate-thread/strict-align-global.c
+++ b/gcc/testsuite/gcc.dg/simulate-thread/strict-align-global.c
@@ -1,5 +1,4 @@ 
 /* { dg-do link } */
-/* { dg-options "--param allow-packed-store-data-races=0" } */
 /* { dg-final { simulate-thread } } */
 
 #include <stdio.h>
diff --git a/gcc/testsuite/gcc.dg/simulate-thread/subfields.c b/gcc/testsuite/gcc.dg/simulate-thread/subfields.c
index 2d93117..70e38a1 100644
--- a/gcc/testsuite/gcc.dg/simulate-thread/subfields.c
+++ b/gcc/testsuite/gcc.dg/simulate-thread/subfields.c
@@ -1,5 +1,4 @@ 
 /* { dg-do link } */
-/* { dg-options "--param allow-packed-store-data-races=0" } */
 /* { dg-final { simulate-thread } } */
 
 #include <stdio.h>
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20050314-1.c b/gcc/testsuite/gcc.dg/tree-ssa/20050314-1.c
index 1082973..8f07781 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-lim1-details" } */
+/* { dg-options "-O1 -fdump-tree-lim1-details --param allow-store-data-races=1" } */
 
 float a[100];