On Mon, Nov 07, 2011 at 04:10:38PM +0000, Joseph S. Myers wrote: > FWIW, when I encountered such a problem in 4.4-based tools I found I > needed the following change to stack_tie patterns to fix it (applied to > and rediffed against trunk, but not tested there), in addition to a > DEFAULT_ABI == ABI_V4 check such as you added. Given all the confusion > about this class of bugs and whether they should be addressed in each back > end or in a target-independent way, I didn't try to send this upstream at > the time. > > 2011-04-11 Joseph Myers <jos...@codesourcery.com> > > * config/rs6000/rs6000.md (stack_tie): Use (mem:BLK (scratch)) as > output of SET. > (restore_stack_block, restore_stack_nonlocal): Update UNSPEC_TIE > patterns.
OK, so you made the stack ties conflict with all memory. I wondered about that too, but didn't find a testcase where it mattered. It would certainly be safer to use the big hammer, but on the other hand it can restrict scheduling unnecessarily. For example void byref (int *a) { int x; asm ("#%0 set here" : "=r" (x) : : "r29", "r30"); *a = x; } with the existing stack ties, the write to *a happens after stack deallocation. -- Alan Modra Australia Development Lab, IBM