On Wed, Jun 14, 2023 at 06:25:10PM +0200, Richard Biener wrote: > > Form rs6000.md: > > ; This is to explain that changes to the stack pointer should > > ; not be moved over loads from or stores to stack memory. > > (define_insn "stack_tie" > > That suggests it’s the hard register value that‘s protected, not the memory > pointed to. I suppose that means an unspec volatile with the reg as input > would serve the same?
No? It says what it says. That is pretty vague language, of course, not entirely by accident no doubt. > Or maybe that’s not the whole story. > > > > and from rs6000-logue.cc: > > /* This ties together stack memory (MEM with an alias set of > > frame_alias_set) > > and the change to the stack pointer. */ > > static void > > rs6000_emit_stack_tie (rtx fp, bool hard_frame_needed) > > I cannot make sense of that comment, but not sure if I really want to know … It really is the same thing: this is a bloody heavy hammer keeping the change to the stack pointer (or "hard" frame pointer) in place wrt any accesses to the stack memory. If there was a nice portable way to avoid needing this we haven't found it yet -- or a non-portable way even, and it doesn't have to be all that nice either come to think of it :-) Segher