]> git.ipfire.org Git - thirdparty/gcc.git/commit
Keep track of the FUNCTION_BEG note
authorRichard Sandiford <richard.sandiford@arm.com>
Fri, 12 Jan 2024 12:38:00 +0000 (12:38 +0000)
committerRichard Sandiford <richard.sandiford@arm.com>
Fri, 12 Jan 2024 12:38:00 +0000 (12:38 +0000)
commit0d74ff2d7e6cb0698282c506b6655cc06bcfe3d8
tree13caafe2d2f368ce3799f4537fc80b901ea7b33b
parent81d309168b2a058d4c8ad5430abb56cfe1f82188
Keep track of the FUNCTION_BEG note

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.

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.
gcc/emit-rtl.h
gcc/function.cc