[PATCH] arm: Fix up arm_override_options_after_change_1
Jakub Jelinek
jakub@redhat.com
Thu Sep 10 08:51:00 GMT 2020
On Tue, Sep 08, 2020 at 10:45:12AM +0200, Jakub Jelinek via Gcc-patches wrote:
> Looking further at arm_override_options_after_change_1, it also seems to be
> incorrect, rather than testing
> !opts->x_str_align_functions
> it should be really testing
> !opts_set->x_str_align_functions
> and get &global_options_set or similar passed to it as additional opts_set
> argument. That is because otherwise the decision will be sticky, while it
> should be done whenever use provided -falign-functions but didn't provide
> -falign-functions= (either on the command line, or through optimize
> attribute or pragma).
Here is a fix for that (incremental change on top of the previous patch).
Bootstrapped/regtested on armv7hl-linux-gnueabi, ok for trunk?
2020-09-10 Jakub Jelinek <jakub@redhat.com>
* config/arm/arm.c (arm_override_options_after_change_1): Add opts_set
argument, test opts_set->x_str_align_functions rather than
opts->x_str_align_functions.
(arm_override_options_after_change, arm_option_override_internal,
arm_set_current_function): Adjust callers.
--- gcc/config/arm/arm.c.jj 2020-09-09 09:19:42.911419411 +0200
+++ gcc/config/arm/arm.c 2020-09-09 09:28:02.392897384 +0200
@@ -3024,10 +3024,11 @@ static GTY(()) bool thumb_flipper;
static GTY(()) tree init_optimize;
static void
-arm_override_options_after_change_1 (struct gcc_options *opts)
+arm_override_options_after_change_1 (struct gcc_options *opts,
+ struct gcc_options *opts_set)
{
/* -falign-functions without argument: supply one. */
- if (opts->x_flag_align_functions && !opts->x_str_align_functions)
+ if (opts->x_flag_align_functions && !opts_set->x_str_align_functions)
opts->x_str_align_functions = TARGET_THUMB_P (opts->x_target_flags)
&& opts->x_optimize_size ? "2" : "4";
}
@@ -3037,7 +3038,7 @@ arm_override_options_after_change_1 (str
static void
arm_override_options_after_change (void)
{
- arm_override_options_after_change_1 (&global_options);
+ arm_override_options_after_change_1 (&global_options, &global_options_set);
}
/* Implement TARGET_OPTION_SAVE. */
@@ -3065,7 +3066,7 @@ static void
arm_option_override_internal (struct gcc_options *opts,
struct gcc_options *opts_set)
{
- arm_override_options_after_change_1 (opts);
+ arm_override_options_after_change_1 (opts, opts_set);
if (TARGET_INTERWORK && !bitmap_bit_p (arm_active_target.isa, isa_bit_thumb))
{
@@ -32335,7 +32336,7 @@ arm_set_current_function (tree fndecl)
save_restore_target_globals (new_tree);
- arm_override_options_after_change_1 (&global_options);
+ arm_override_options_after_change_1 (&global_options, &global_options_set);
}
/* Implement TARGET_OPTION_PRINT. */
Jakub
More information about the Gcc-patches
mailing list