On Thu, Apr 12, 2012 at 5:34 PM, David Edelsohn <dje....@gmail.com> wrote: > On Thu, Apr 12, 2012 at 9:22 AM, Alan Modra <amo...@gmail.com> wrote: > >> I tried that. It doesn't work without something else in the insn to >> stop rtl-dce deleting it, so you may as well use SETs. But thanks for >> the prod in the right direction. We do get slightly better results >> when the regs are not hidden away in an UNSPEC, for instance >> non-stack writes/reads are seen by the alias oracle to not conflict >> with the epilogue frame deallocation. >> >> Bootstrapped etc. powerpc-linux. OK to apply, David? >> >> PR target/52828 >> * config/rs6000/rs6000.c (rs6000_emit_stack_tie): Rewrite with >> tie regs on destination of sets. Delete forward declaration. >> (rs6000_emit_stack_reset): Update rs6000_emit_stack_tie calls. >> (rs6000_emit_prologue): Likewise. >> (rs6000_emit_epilogue): Likewise. Use in place of gen_frame_tie >> and gen_stack_tie. >> (is_mem_ref): Use tie_operand to recognise stack ties. >> * config/rs6000/predicates.md (tie_operand): New. >> * config/rs6000/rs6000.md (UNSPEC_TIE): Delete. >> (restore_stack_block): Generate new stack tie rtl. >> (restore_stack_nonlocal): Likewise. >> (stack_tie): Update. >> (frame_tie): Delete. > > This probably is getting close to the best we can do with GCC's RTL > alias analysis infrastructure. > > This version is okay, but I also want to give Richi and Olivier an > opportunity to comment if they still have any concerns.
It looks fine to me. Richard. > Thanks, David