On 09/19/2016 03:45 AM, Richard Earnshaw (lists) wrote:
So those don't seem to me to imply that the frame pointer needs to be a
fixed register.   So the first thing I'd do is fix the aarch64 port to
not do that and see what fallout there is and how to fix it.

Most ports simply don't mark the frame pointer as fixed.

The AArch64 ABI specification strongly recommends that, when a frame
record is not created, the frame pointer register is left unused so that
the frame chain, while not complete, is still valid (a chain of valid
records but ending in a NULL pointer).  That strongly suggests that FP
should remain a fixed register.
So essentially you're asking that even with -fomit-frame-pointer that FP still not be used and that the user should specify an additional -fcall-saved- parameter?

I can see your point -- lots of things use -fomit-frame-pointer and you may not necessarily want to make FP available to the register allocator.

But by requiring -fcall-saved-whatever, aren't you forcing folks to encode aarch64 specific flags into their build systems?

Neither seems like a good position to be in.

I guess we could push all of this into a new back-end option to permit
the 'I really want to use FP for general purposes', but it seems to be
just duplicating the existing use of -fcall-saved; so would be yet
another flag in the compiler that needs documenting.
Yea, and more aarch64 specific bits in the build system.

It seems much more sensible to me to just make a slight relaxation of
the fixed-register code and then re-use the existing options.
Maybe. I understand the situation much better now, but I don't see a particularly good solution.

Reply via email to