This patch does the following:
- Fix FIXME on needsStackRealignment: it is now shared between multiple targets, implemented in TargetRegisterInfo, and isn't virtual anymore. This will break out-of-tree targets, silently if they used virtual and with a build error if they used override.
- Factor out canRealignStack as a virtual function on TargetRegisterInfo, by default only looks for the no-realign-stack function attribute.
Multiple targets duplicated the same needsStackRealignment code:
- Aarch64.
- ARM.
- Mips almost: had extra DEBUG diagnostic, which the default implementation now has.
- PowerPC.
- WebAssembly.
- x86 almost: has an extra -force-align-stack option, which the default implementation now has.
The default implementation of needsStackRealignment used to just return false. My current patch changes the behavior by simply using the above shared behavior. This affects:
- AMDGPU
- BPF
- CppBackend
- MSP430
- NVPTX
- Sparc
- SystemZ
- XCore
- Out-of-tree targets
This is a breaking change! make check passes.
The only implementation of the virtual function (besides the slight different in x86) was Hexagon (which did MF.getFrameInfo()->getMaxAlignment() > 8), and potentially some out-of-tree targets. Hexagon now uses the default implementation.
needsStackRealignment was being overwritten in <Target>GenRegisterInfo.inc, to return false as the default also did. That was odd and is now gone.
I think MIPS' assert makes sense here. If a function "needs" stack realignment, we're going to require that it "can" realign its stack.