From: rguenth Date: Wed, 20 Nov 2013 10:31:24 +0000 (+0000) Subject: 2013-11-20 Richard Biener X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5a91aea7365878f8686c3f6663e4dabae433dc79;p=thirdparty%2Fgcc.git 2013-11-20 Richard Biener PR lto/59035 * lto-opts.c (lto_write_options): Write defaults only if they were not explicitely specified. Also write -ffp-contract default. * lto-wrapper.c (merge_and_complain): Merge -ffp-contract conservatively. (run_gcc): Pass through -ffp-contract. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205096 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e36c825fb3b1..2bd67d0ef495 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2013-11-20 Richard Biener + + PR lto/59035 + * lto-opts.c (lto_write_options): Write defaults only if + they were not explicitely specified. Also write + -ffp-contract default. + * lto-wrapper.c (merge_and_complain): Merge -ffp-contract + conservatively. + (run_gcc): Pass through -ffp-contract. + 2013-11-20 Jan-Benedict Glaw * config/mips/mips.c (r10k_simplify_address): Eliminate macro usage. diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c index c9d4e03d00c7..2cb536bfc558 100644 --- a/gcc/lto-opts.c +++ b/gcc/lto-opts.c @@ -85,14 +85,35 @@ lto_write_options (void) function rather than per compilation unit. */ /* -fexceptions causes the EH machinery to be initialized, enabling generation of unwind data so that explicit throw() calls work. */ - if (global_options.x_flag_exceptions) + if (!global_options_set.x_flag_exceptions + && global_options.x_flag_exceptions) append_to_collect_gcc_options (&temporary_obstack, &first_p, "-fexceptions"); /* -fnon-call-exceptions changes the generation of exception regions. It is enabled implicitly by the Go frontend. */ - if (global_options.x_flag_non_call_exceptions) + if (!global_options_set.x_flag_non_call_exceptions + && global_options.x_flag_non_call_exceptions) append_to_collect_gcc_options (&temporary_obstack, &first_p, "-fnon-call-exceptions"); + /* The default -ffp-contract changes depending on the language + standard. Pass thru conservative standard settings. */ + if (!global_options_set.x_flag_fp_contract_mode) + switch (global_options.x_flag_fp_contract_mode) + { + case FP_CONTRACT_OFF: + append_to_collect_gcc_options (&temporary_obstack, &first_p, + "-ffp-contract=off"); + break; + case FP_CONTRACT_ON: + append_to_collect_gcc_options (&temporary_obstack, &first_p, + "-ffp-contract=on"); + break; + case FP_CONTRACT_FAST: + /* Nothing. That merges conservatively and is the default for LTO. */ + break; + default: + gcc_unreachable (); + } /* Output explicitly passed options. */ for (i = 1; i < save_decoded_options_count; ++i) diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index 57978c883d41..335ec8fd01ae 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -422,6 +422,18 @@ merge_and_complain (struct cl_decoded_option **decoded_options, append_option (decoded_options, decoded_options_count, foption); break; + case OPT_ffp_contract_: + /* For selected options we can merge conservatively. */ + for (j = 0; j < *decoded_options_count; ++j) + if ((*decoded_options)[j].opt_index == foption->opt_index) + break; + if (j == *decoded_options_count) + append_option (decoded_options, decoded_options_count, foption); + /* FP_CONTRACT_OFF < FP_CONTRACT_ON < FP_CONTRACT_FAST. */ + else if (foption->value < (*decoded_options)[j].value) + (*decoded_options)[j] = *foption; + break; + case OPT_freg_struct_return: case OPT_fpcc_struct_return: for (j = 0; j < *decoded_options_count; ++j) @@ -578,6 +590,7 @@ run_gcc (unsigned argc, char *argv[]) case OPT_fgnu_tm: case OPT_freg_struct_return: case OPT_fpcc_struct_return: + case OPT_ffp_contract_: break; default: