From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1851) id AA4CA385781D; Tue, 25 May 2021 12:57:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AA4CA385781D MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Martin Liska To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-1039] Improve global state for options. X-Act-Checkin: gcc X-Git-Author: Martin Liska X-Git-Refname: refs/heads/master X-Git-Oldrev: cec4d4a6782c9bd8d071839c50a239c49caca689 X-Git-Newrev: ebd5e86c0f41dc1d692f9b2b68a510b1f6835a3e Message-Id: <20210525125719.AA4CA385781D@sourceware.org> Date: Tue, 25 May 2021 12:57:19 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 May 2021 12:57:19 -0000 https://gcc.gnu.org/g:ebd5e86c0f41dc1d692f9b2b68a510b1f6835a3e commit r12-1039-gebd5e86c0f41dc1d692f9b2b68a510b1f6835a3e Author: Martin Liska Date: Wed Mar 10 15:12:31 2021 +0100 Improve global state for options. gcc/c-family/ChangeLog: PR tree-optimization/92860 PR target/99592 * c-attribs.c (handle_optimize_attribute): Save target node before calling parse_optimize_options and save it in case it changes. * c-pragma.c (handle_pragma_target): Similarly for pragma. (handle_pragma_pop_options): Likewise here. gcc/ChangeLog: PR tree-optimization/92860 PR target/99592 * optc-save-gen.awk: Remove exceptions. Diff: --- gcc/c-family/c-attribs.c | 9 +++++++++ gcc/c-family/c-pragma.c | 16 ++++++++++++---- gcc/optc-save-gen.awk | 9 --------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/gcc/c-family/c-attribs.c b/gcc/c-family/c-attribs.c index 671b27c3200..804374d5acc 100644 --- a/gcc/c-family/c-attribs.c +++ b/gcc/c-family/c-attribs.c @@ -5383,6 +5383,8 @@ handle_optimize_attribute (tree *node, tree name, tree args, /* Save current options. */ cl_optimization_save (&cur_opts, &global_options, &global_options_set); + tree prev_target_node = build_target_option_node (&global_options, + &global_options_set); /* If we previously had some optimization options, use them as the default. */ @@ -5401,10 +5403,17 @@ handle_optimize_attribute (tree *node, tree name, tree args, parse_optimize_options (args, true); DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node) = build_optimization_node (&global_options, &global_options_set); + tree target_node = build_target_option_node (&global_options, + &global_options_set); + if (prev_target_node != target_node) + DECL_FUNCTION_SPECIFIC_TARGET (*node) = target_node; /* Restore current options. */ cl_optimization_restore (&global_options, &global_options_set, &cur_opts); + cl_target_option_restore (&global_options, &global_options_set, + TREE_TARGET_OPTION (prev_target_node)); + if (saved_global_options != NULL) { cl_optimization_compare (saved_global_options, &global_options); diff --git a/gcc/c-family/c-pragma.c b/gcc/c-family/c-pragma.c index 4f8e8e0128c..7f658ea5646 100644 --- a/gcc/c-family/c-pragma.c +++ b/gcc/c-family/c-pragma.c @@ -918,6 +918,12 @@ handle_pragma_target(cpp_reader *ARG_UNUSED(dummy)) if (targetm.target_option.pragma_parse (args, NULL_TREE)) current_target_pragma = chainon (current_target_pragma, args); + + /* A target pragma can also influence optimization options. */ + tree current_optimize + = build_optimization_node (&global_options, &global_options_set); + if (current_optimize != optimization_current_node) + optimization_current_node = current_optimize; } } @@ -1078,12 +1084,14 @@ handle_pragma_pop_options (cpp_reader *ARG_UNUSED(dummy)) target_option_current_node = p->target_binary; } + /* Always restore optimization options as optimization_current_node is + * overwritten by invoke_set_current_function_hook. */ + cl_optimization_restore (&global_options, &global_options_set, + TREE_OPTIMIZATION (p->optimize_binary)); + if (p->optimize_binary != optimization_current_node) { - tree old_optimize = optimization_current_node; - cl_optimization_restore (&global_options, &global_options_set, - TREE_OPTIMIZATION (p->optimize_binary)); - c_cpp_builtins_optimize_pragma (parse_in, old_optimize, + c_cpp_builtins_optimize_pragma (parse_in, optimization_current_node, p->optimize_binary); optimization_current_node = p->optimize_binary; } diff --git a/gcc/optc-save-gen.awk b/gcc/optc-save-gen.awk index 19afa895930..e2a9a496bfd 100644 --- a/gcc/optc-save-gen.awk +++ b/gcc/optc-save-gen.awk @@ -1438,19 +1438,10 @@ print "{" checked_options["flag_merge_constants"]++ checked_options["param_max_fields_for_field_sensitive"]++ checked_options["flag_omit_frame_pointer"]++ -checked_options["unroll_only_small_loops"]++ # arc exceptions checked_options["TARGET_ALIGN_CALL"]++ checked_options["TARGET_CASE_VECTOR_PC_RELATIVE"]++ checked_options["arc_size_opt_level"]++ -# arm exceptions -checked_options["arm_fp16_format"]++ -checked_options["flag_ipa_ra"]++ -# s390 exceptions -checked_options["param_max_completely_peel_times"]++ -checked_options["param_max_completely_peeled_insns"]++ -checked_options["param_max_unroll_times"]++ -checked_options["param_max_unrolled_insns"]++ for (i = 0; i < n_opts; i++) {