On Fri, Sep 4, 2020 at 8:18 AM Segher Boessenkool
<seg...@kernel.crashing.org> wrote:
>
> Hi!
>
> On Mon, Aug 24, 2020 at 03:49:50PM -0500, Qing Zhao wrote:
> > > Do you want to do this before or after the epilogue code is generated?
> >
> > static rtx_insn *
> > make_epilogue_seq (void)
> > {
> >   if (!targetm.have_epilogue ())
> >     return NULL;
> >
> >   start_sequence ();
> >   emit_note (NOTE_INSN_EPILOGUE_BEG);
> >
> >  +++++ gen_call_used_regs_seq ();                     // this is the place 
> > to emit the zeroing insn sequence
> >
> >   rtx_insn *seq = targetm.gen_epilogue ();
> > …
> > }
> >
> > Any comment on this?
>
> So, before.  This is problematic if the epilogue uses any of those
> registers: if the epilogue expects some value there, you just destroyed
> it; and, conversely, if the epilogue writes such a reg, your zeroing is
> useless.
>
>
> You probably have to do this for every target separately?  But it is not
> enough to handle it in the epilogue, you also need to make sure it is
> done on every path that returns *without* epilogue.

This feature is designed for normal return with epilogue.

-- 
H.J.

Reply via email to