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.