Hi! On Thu, Feb 04, 2021 at 11:54:09AM +0100, Henri Cloetens wrote: > I am working on a custom gcc.9.2.0 back end, and have an issue with > frame pointer elimination. It is a much better idea to use a more current GCC version, and it is easier to upgrade now than to upgrade later. Just a hint, do with it what you want :-) > - the result is OK till step '276 : ira (register allocation) > - the result is NG from step '277 onward (reload) Those numbers are useless to us: they depend on your configuration, and on the exact GCC version (it often changes within one major+minor+ patchlevel as well). The LRA pass (you do use LRA I hope?) sets up the hard frame pointer. If you look at that dump file you can see what happened and what went wrong (you'll probably need to look at the lra* files in the GCC source to figure out what happened exactly, what everything means). > What it did: It used R19 for the frame pointer. This register is > call-clobbered, but is not used for > argument passing. Some way, it assumed to be free, but it is not. Is R19 the FRAME_POINTER_REGNUM or the HARD_FRAME_POINTER_REGNUM? You didn't show how you have anything of this set up, so it is hard to give more detailed advice. > So, the frame pointer is put in it, it is call-clobbered, and the result > is incorrect. > > If the compile flag -fomit-frame-pointer is used, the issue goes away. > > Has anybody any idea where to look ?. You need to save the register in your prologue code if frame_pointer_needed, etc. Segher