On 1/5/24 09:28, Richard Sandiford wrote:
function.cc emits a NOTE_FUNCTION_BEG after all arguments have
been copied to pseudos.  It then records this note in parm_birth_insn.
Various other pieces of code use this insn as a convenient place to
insert things at the start of the function.

However, cfgexpand later changes parm_birth_insn as follows:

   /* If we emitted any instructions for setting up the variables,
      emit them before the FUNCTION_START note.  */
   if (var_seq)
     {
       emit_insn_before (var_seq, parm_birth_insn);

       /* In expand_function_end we'll insert the alloca save/restore
         before parm_birth_insn.  We've just insertted an alloca call.
         Adjust the pointer to match.  */
       parm_birth_insn = var_seq;
     }

But the FUNCTION_BEG note is still useful for things that aren't
sensitive to stack allocation, and it has the advantage that
(unlike the var_seq above) it is never deleted or combined.
This patch adds a separate variable to track it.

Tested on aarch64-linux-gnu, where it's needed for fixing PR113196.
OK to install?

Richard


gcc/
        * emit-rtl.h (rtl_data::x_function_beg_note): New member variable.
        (function_beg_insn): New macro.
        * function.cc (expand_function_start): Initialize function_beg_insn.
OK
jeff

Reply via email to