On Thu, Feb 29, 2024 at 03:15:30PM +0100, Jan Hubicka wrote: > I am not wed to the idea (just it appeared to me as an option to > disabling this optimization by default). I still think it may make sense.
Maybe I misunderstood your idea. So, you are basically suggesting to go in a completely opposite direction from H.J.'s changes, instead of saving less in noreturn prologues, save more, most likely not change anything in code generation on the caller's side (nothing is kept alive across visible unconditional noreturn calls) and maybe after some time use normally caller-saved registers in say call frame debug info for possible use in DW_OP_entry_value (but in that case it is an ABI change) and improve debuggability of vars which live in normally caller-saved registers right before a noreturn call in that frame? What about registers in which function arguments are passed? If it is done as a change with no changes at all on the caller side and just on the callee side, it could again be guarded by some option (not sure what the default would be) where the user could increase debuggability of the noreturn caller (in that case always necessarily just a single immediate one; while not doing the callee saved register saves improves debuggability in perhaps multiple routines in the call stack, depending on which registers wouldn't be saved and which registers are used in each of the caller frames; e.g. noreturn function could save/not save all of %rbx, %r1[2345], one caller somewhere use %r12, another %rbx and %r13, yet another one %r14 and %r15). Jakub