* Issue with frame pointer elimination
@ 2021-02-04 10:54 Henri Cloetens
2021-02-04 10:57 ` AW: " Stefan Franke
2021-02-04 23:42 ` Segher Boessenkool
0 siblings, 2 replies; 4+ messages in thread
From: Henri Cloetens @ 2021-02-04 10:54 UTC (permalink / raw)
To: gcc-help
Hello,
I am working on a custom gcc.9.2.0 back end, and have an issue with
frame pointer elimination.
- the result is OK till step '276 : ira (register allocation)
- the result is NG from step '277 onward (reload)
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.
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 ?.
Best Regards,
Henri.
^ permalink raw reply [flat|nested] 4+ messages in thread
* AW: Issue with frame pointer elimination
2021-02-04 10:54 Issue with frame pointer elimination Henri Cloetens
@ 2021-02-04 10:57 ` Stefan Franke
2021-02-04 23:42 ` Segher Boessenkool
1 sibling, 0 replies; 4+ messages in thread
From: Stefan Franke @ 2021-02-04 10:57 UTC (permalink / raw)
To: 'gcc-help'
> Von: Gcc-help <gcc-help-bounces@gcc.gnu.org> Im Auftrag von Henri
> Cloetens
> Gesendet: Donnerstag, 4. Februar 2021 11:54
> An: gcc-help <gcc-help@gcc.gnu.org>
> Betreff: Issue with frame pointer elimination
>
> Hello,
>
> I am working on a custom gcc.9.2.0 back end, and have an issue with frame
> pointer elimination.
>
> - the result is OK till step '276 : ira (register allocation)
> - the result is NG from step '277 onward (reload)
>
> 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.
>
> 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 ?.
>
> Best Regards,
>
> Henri.
Maybe R19 is used as the FRAME_POINTER? Then you can't use it for other purposes which means that no function may clobber it.
Stefan
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Issue with frame pointer elimination
2021-02-04 10:54 Issue with frame pointer elimination Henri Cloetens
2021-02-04 10:57 ` AW: " Stefan Franke
@ 2021-02-04 23:42 ` Segher Boessenkool
2021-02-05 8:52 ` Henri Cloetens
1 sibling, 1 reply; 4+ messages in thread
From: Segher Boessenkool @ 2021-02-04 23:42 UTC (permalink / raw)
To: Henri Cloetens; +Cc: gcc-help
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
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Issue with frame pointer elimination
2021-02-04 23:42 ` Segher Boessenkool
@ 2021-02-05 8:52 ` Henri Cloetens
0 siblings, 0 replies; 4+ messages in thread
From: Henri Cloetens @ 2021-02-05 8:52 UTC (permalink / raw)
To: Segher Boessenkool; +Cc: gcc-help
Hello Segher,
Ok. Then, which one would you recommend ?.
The diagnosis is indeed correct: I took the wrong one, I took R19, which
is call clobbered.
If I take R18, the issue is solved, but it creates other problems.
Best Regards,
Henri.
On 2/5/21 12:42 AM, Segher Boessenkool wrote:
> 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
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-02-05 8:52 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-04 10:54 Issue with frame pointer elimination Henri Cloetens
2021-02-04 10:57 ` AW: " Stefan Franke
2021-02-04 23:42 ` Segher Boessenkool
2021-02-05 8:52 ` Henri Cloetens
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).