Richard Biener <rguent...@suse.de> writes: > On Tue, 18 May 2021, Richard Biener wrote: > >> On Tue, 18 May 2021, Richard Sandiford wrote: >> >> > Richard Biener <rguent...@suse.de> writes: >> > > @@ -6621,9 +6637,31 @@ pass_expand::execute (function *fun) >> > > (int) param_ssp_buffer_size); >> > > } >> > > >> > > + /* Temporarily mark PARM_DECLs and RESULT_DECLs we need to expand to >> > > + memory addressable so expand_function_start can emit the required >> > > + copies. */ >> > > + for (tree parm = DECL_ARGUMENTS (current_function_decl); parm; >> > > + parm = DECL_CHAIN (parm)) >> > > + if (bitmap_bit_p (forced_stack_vars, DECL_UID (parm))) >> > > + TREE_ADDRESSABLE (parm) = 1; >> > > + if (DECL_RESULT (current_function_decl) >> > > + && bitmap_bit_p (forced_stack_vars, >> > > + DECL_UID (DECL_RESULT (current_function_decl)))) >> > > + TREE_ADDRESSABLE (DECL_RESULT (current_function_decl)) = 1; >> > > + >> > > /* Set up parameters and prepare for return, for the function. */ >> > > expand_function_start (current_function_decl); >> > > >> > > + /* Clear TREE_ADDRESSABLE again. */ >> > > + for (tree parm = DECL_ARGUMENTS (current_function_decl); parm; >> > > + parm = DECL_CHAIN (parm)) >> > > + if (bitmap_bit_p (forced_stack_vars, DECL_UID (parm))) >> > > + TREE_ADDRESSABLE (parm) = 0; >> > > + if (DECL_RESULT (current_function_decl) >> > > + && bitmap_bit_p (forced_stack_vars, >> > > + DECL_UID (DECL_RESULT (current_function_decl)))) >> > > + TREE_ADDRESSABLE (DECL_RESULT (current_function_decl)) = 0; >> > > + >> > > /* If we emitted any instructions for setting up the variables, >> > > emit them before the FUNCTION_START note. */ >> > > if (var_seq) >> > >> > Is TREE_ADDRESSABLE guaranteed to be 0 for these decls before the code >> > is hit? I was surprised that we didn't need to protect against net >> > 1->0 transitions. >> >> Yes, bits are only set for decls satisfying use_register_for_decl. >> Oops, now that I'm double-checking, we fail to check that in >> discover_nonconstant_array_refs_r - I'll fix that. I can also make >> the above fool-proof by recoding the decls I marked addressable >> in a vec and traverse that for unsetting - would that be prefered? > > So like this? Testing TREE_ADDRESSABLE where it formerly wasn't > already testing use_register_for_decl.
LGTM FWIW, not that I know this code very well. The comment above was more for my own education than anything :-) Thanks, Richard