https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84064

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
In:
11787     if ((!to_allocate && frame->nregs <= 1)
11788         || (TARGET_64BIT && to_allocate >= HOST_WIDE_INT_C (0x80000000))
11789         /* If stack clash probing needs a loop, then it needs a
11790            scratch register.  But the returned register is only
guaranteed
11791            to be safe to use after register saves are complete.  So if
11792            stack clash protections are enabled and the allocated frame is
11793            larger than the probe interval, then use pushes to save
11794            callee saved registers.  */
11795         || (flag_stack_clash_protection && to_allocate >
get_probe_interval ()))
11796       frame->save_regs_using_mov = false;

to_allocate is 0, so we don't set frame->save_regs_using_mov, frame->nregs is
4, so int_regs_saved is initially false, frame_pointer_needed is also false,
and we aren't using red zone either, so nothing sets int_regs_saved afterwards.
But allocate is 16 for those 4 pushes we want to do.
I fail to see what we need to do though, if allocate is equal to the register
save area, then we don't need any probes, those pushes are themselves a probe.

Reply via email to