From: Michael Meissner Date: Wed, 16 Oct 2013 23:06:36 +0000 (+0000) Subject: re PR target/57756 (Function target attribute is retaining state of previously seen... X-Git-Tag: releases/gcc-4.9.0~3415 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d358fb9dae37dfe948ef87af4d8951dac4cd3646;p=thirdparty%2Fgcc.git re PR target/57756 (Function target attribute is retaining state of previously seen function) 2013-10-16 Michael Meissner PR target/57756 * config/rs6000/rs6000.opt (rs6000_isa_flags_explicit): Move the explicit isa flag to be an options variable, instead of using global_options_set. Remove define from rs6000.h. * config/rs6000/rs6000.h (rs6000_isa_flags_explicit): Likewise. * config/rs6000/rs6000.c (rs6000_option_override_internal): Initialize rs6000_isa_flags_explicit. (rs6000_function_specific_save): Add gcc_options* parameter, so that the powerpc builds after the 2013-10-15 changes. (rs6000_function_specific_restore): Likewise. From-SVN: r203734 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 83541b2ce802..de8bf8891a98 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2013-10-16 Michael Meissner + + PR target/57756 + * config/rs6000/rs6000.opt (rs6000_isa_flags_explicit): Move the + explicit isa flag to be an options variable, instead of using + global_options_set. Remove define from rs6000.h. + * config/rs6000/rs6000.h (rs6000_isa_flags_explicit): Likewise. + + * config/rs6000/rs6000.c (rs6000_option_override_internal): + Initialize rs6000_isa_flags_explicit. + (rs6000_function_specific_save): Add gcc_options* parameter, so + that the powerpc builds after the 2013-10-15 changes. + (rs6000_function_specific_restore): Likewise. + 2013-10-16 DJ Delorie * config/rl78/rl78.c (rl78_alloc_address_registers_macax): Verify diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 1523816fe63c..63f68c47bd53 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -2796,6 +2796,10 @@ rs6000_option_override_internal (bool global_init_p) = ((global_init_p || target_option_default_node == NULL) ? NULL : TREE_TARGET_OPTION (target_option_default_node)); + /* Remember the explicit arguments. */ + if (global_init_p) + rs6000_isa_flags_explicit = global_options_set.x_rs6000_isa_flags; + /* On 64-bit Darwin, power alignment is ABI-incompatible with some C library functions, so warn about it. The flag may be useful for performance studies from time to time though, so don't disable it @@ -29995,19 +29999,22 @@ rs6000_set_current_function (tree fndecl) /* Save the current options */ static void -rs6000_function_specific_save (struct cl_target_option *ptr) +rs6000_function_specific_save (struct cl_target_option *ptr, + struct gcc_options *opts) { - ptr->x_rs6000_isa_flags = rs6000_isa_flags; - ptr->x_rs6000_isa_flags_explicit = rs6000_isa_flags_explicit; + ptr->x_rs6000_isa_flags = opts->x_rs6000_isa_flags; + ptr->x_rs6000_isa_flags_explicit = opts->x_rs6000_isa_flags_explicit; } /* Restore the current options */ static void -rs6000_function_specific_restore (struct cl_target_option *ptr) +rs6000_function_specific_restore (struct gcc_options *opts, + struct cl_target_option *ptr) + { - rs6000_isa_flags = ptr->x_rs6000_isa_flags; - rs6000_isa_flags_explicit = ptr->x_rs6000_isa_flags_explicit; + opts->x_rs6000_isa_flags = ptr->x_rs6000_isa_flags; + opts->x_rs6000_isa_flags_explicit = ptr->x_rs6000_isa_flags_explicit; (void) rs6000_option_override_internal (false); } diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index c4d57d863afe..745437edb814 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -593,9 +593,6 @@ extern int rs6000_vector_align[]; #define MASK_PROTOTYPE OPTION_MASK_PROTOTYPE #endif -/* Explicit ISA options that were set. */ -#define rs6000_isa_flags_explicit global_options_set.x_rs6000_isa_flags - /* For power systems, we want to enable Altivec and VSX builtins even if the user did not use -maltivec or -mvsx to allow the builtins to be used inside of #pragma GCC target or the target attribute to change the code level for a diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt index eae75f576801..c3f9c2d44a34 100644 --- a/gcc/config/rs6000/rs6000.opt +++ b/gcc/config/rs6000/rs6000.opt @@ -30,6 +30,9 @@ TargetSave HOST_WIDE_INT x_rs6000_isa_flags ;; Miscellaneous flag bits that were set explicitly by the user +Variable +HOST_WIDE_INT rs6000_isa_flags_explicit + TargetSave HOST_WIDE_INT x_rs6000_isa_flags_explicit