On Fri, Nov 08, 2024 at 05:44:48PM +0000, Richard Sandiford wrote: > It's for https://gcc.gnu.org/pipermail/gcc-patches/2024-November/667499.html , > which needs to switch to the simd clone's chosen target (SVE) in order > to construct the correct types. Currently the patch uses: > > + cl_target_option_save (&cur_target, &global_options, > &global_options_set); > + tree new_target = DECL_FUNCTION_SPECIFIC_TARGET (node->decl); > + cl_target_option_restore (&global_options, &global_options_set, > + TREE_TARGET_OPTION (new_target)); > + aarch64_override_options_internal (&global_options); > + memcpy (m_old_have_regs_of_mode, have_regs_of_mode, > + sizeof (have_regs_of_mode)); > + for (int i = 0; i < NUM_MACHINE_MODES; ++i) > + if (aarch64_sve_mode_p ((machine_mode) i)) > + have_regs_of_mode[i] = true; > > to switch in and: > > + /* Restore current options. */ > + cl_target_option_restore (&global_options, &global_options_set, > &cur_target); > + aarch64_override_options_internal (&global_options); > + memcpy (have_regs_of_mode, m_old_have_regs_of_mode, > + sizeof (have_regs_of_mode)); > > to switch back, but the idea is to replace that with: > > push_function_decl (node->decl); > > ... > > pop_function_decl ();
Why do you need that? Can't you just use opt_for_fn? Jakub