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

Reply via email to