This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 06/01/2015 02:41 PM, Kyrill Tkachov wrote:
On 01/06/15 12:29, Christian Bruel wrote:hi Kyrill On 06/01/2015 12:39 PM, Kyrill Tkachov wrote:On 18/05/15 09:14, Christian Bruel wrote:Hi,Hi Christian, A couple comments inline. Overall, the approach looks ok to me, though I think we'll have to generalise arm_valid_target_attribute_rec in the future if we want to allow other target attributes.the other fpu target attributes will be part of another set of developments, specific parsing strings will be added as they are implemented.Ok, so you plan on working on fpu attributes as well?
I have a prototype for fpu=neon, it works locally but there are still a few corner cases and testing to sort out before sending a draft.
There are so many architectural variants to check that I might ask for help once it is a little bit more robust, and some might be similar with aarch64's simd.
+ +/* Establish appropriate back-end context for processing the function + FNDECL. The argument might be NULL to indicate processing at top + level, outside of any function scope. */ +static void +arm_set_current_function (tree fndecl) +{ + if (!fndecl || fndecl == arm_previous_fndecl) + return; + + tree old_tree = (arm_previous_fndecl + ? DECL_FUNCTION_SPECIFIC_TARGET (arm_previous_fndecl) + : NULL_TREE); + + tree new_tree = DECL_FUNCTION_SPECIFIC_TARGET (fndecl); + + arm_previous_fndecl = fndecl; + if (old_tree == new_tree) + ; + + else if (new_tree) + { + cl_target_option_restore (&global_options, + TREE_TARGET_OPTION (new_tree)); + + if (TREE_TARGET_GLOBALS (new_tree)) + restore_target_globals (TREE_TARGET_GLOBALS (new_tree)); + else + TREE_TARGET_GLOBALS (new_tree) + = save_target_globals_default_opts (); + } + + else if (old_tree) + { + new_tree = target_option_current_node; + + cl_target_option_restore (&global_options, + TREE_TARGET_OPTION (new_tree)); + if (TREE_TARGET_GLOBALS (new_tree)) + restore_target_globals (TREE_TARGET_GLOBALS (new_tree)); + else if (new_tree == target_option_default_node) + restore_target_globals (&default_target_globals); + else + TREE_TARGET_GLOBALS (new_tree) + = save_target_globals_default_opts (); + } + + arm_option_params_internal (&global_options); I thought the more common approach was to define TARGET_OPTION_RESTORE that was supposed to restore the backend state, including calling arm_option_params_internal? That way, cl_target_option_restore would do all that needs to be done to restore the backend.TARGET_OPTION_RESTORE is fine to restore target-specific information from struct cl_target_option. Other global states might as well be expressed within set_current_function (e.g indeed I might use TARGET_OPTION_RESTORE to switch arm_fpu_attr in the fpu neon attribute). But IMHO arm_option_params_internal are fine to be called there since the 2 params only depend from x_target_flags without the need of a new macro.Ok, I see. The patch looks ok to me modulo the typo nits I pointed out, but I think Ramana should have the final say here as he's already started reviewing it and it adds quite a lot of functionality.
OK thanks, I'll wait for Ramana's final words. Cheers Christian
Thanks, Kyrill
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |