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