Hi! On Fri, Aug 31, 2018 at 02:54:17PM -0700, H.J. Lu wrote: > On Fri, Aug 31, 2018 at 1:32 PM, Jason Merrill <ja...@redhat.com> wrote: > > On Fri, Aug 31, 2018 at 3:33 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > >> On Thu, Aug 30, 2018 at 10:21 AM, Jason Merrill <ja...@redhat.com> wrote: > >>> > >>>> r138335 allowed arg_pointer_rtx to be eliminated by either FP or SP, > >>>> but only when dynamic stack alignment is supported. In this case, > >>>> arg_pointer_rtx is eliminated by FP even when frame_pointer_needed > >>>> is false and there is no dynamic stack alignment at all. > >>>> > >>>>> gcc_assert (elim == stack_pointer_rtx || (frame_pointer_needed && elim > >>>>> == hard_frame_pointer_rtx)); > >>>>> > >>>>> so as not to allow eliminating to an uninitialized FP. > >>>> > >>>> FP isn't uninitialized. It is initialized the same way as in the case of > >>>> SUPPORTS_STACK_ALIGNMENT is true. > >>> > >>> How is that? Why would it be initialized when frame_pointer_needed is > >>> false? What does it mean for frame_pointer_needed to be false, if > >>> not, as in the documentation of -fomit-frame-pointer, > >>> > >>> "This avoids the instructions to save, set up and restore the frame > >>> pointer; on many targets it also makes an extra register available." > >>> > >>> ? > >> > >> A backend may not set up frame pointer even with -fno-omit-frame-pointer. > >> In the case of x86, hard frame pointer can be represented by stack pointer > >> - UNITS_PER_WORD. > >> > >> This patch adds hard_frame_pointer_from_stack_pointer_plus_offset and > >> hard_frame_pointer_offset to rtl_data to allow a backend to represent > >> hard frame pointer as stack pointer + offset. > > > > Shouldn't this be fixed in eliminate_regs rather than dwarf2out? > > > > With -fno-omit-frame-pointer, arg pointer is eliminated with hard frame > pointer. But > > commit cd557ff63f388ad27c376d0a225e74d3594a6f9d > Author: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> > Date: Thu Aug 10 15:29:05 2017 +0000 > > i386: Don't use frame pointer without stack access > > When there is no stack access, there is no need to use frame pointer > even if -fno-omit-frame-pointer is used and caller's frame pointer is > unchanged. > > changed it in the last minute. It is too late to go back. When it is done, > hard frame pointer must be replaced by stack pointer - UNITS_PER_WORD > if it is ever used.
So after that patch something uses the hard frame pointer, while it also claims nothing uses the hard frame pointer? Sounds to me you should fix the uses, and all will be fine. Segher