On 04/11/2016 12:15 PM, Olivier Hainque wrote:
> 
>> On Mar 28, 2016, at 19:41 , Richard Henderson <r...@redhat.com> wrote:
>>
>> But I expect for stage4, the best solution is to strengthen the stack_tie 
>> pattern to block all memory.  Early scheduling of the stack frame 
>> deallocation (a simple logic insn) can't really be that important to 
>> performance.
> 
> Something like the attached patch, at least for next stage1 until the
> more general issue is sorted out ?
> 
> Only basic testing at this point. I can do more if considered appropriate.
> 
> Thanks for your feedback,
> 
> With Kind Regards,
> 
> Olivier
> 
>       * config/rs6000/rs6000.c (rs6000_emit_stack_tie): Add a
>         (clobber mem:BLK (scratch)) to the set of effects, blocking
>       all memory accesses.

We have the same problem on S/390 and I'm also looking for a way to solve that. 
I'm not sure about
the (clobber (mem)) approach. Wouldn't it be theoretically possible to move a 
memory write over a
(clobber (mem))?

The patch I'm currently testing follows a proposal from Joseph Myers in 2011:
https://gcc.gnu.org/ml/gcc-patches/2011-11/msg00977.html

+ [(set (mem:BLK (scratch))
+ (unspec:BLK [(match_operand:BLK 0 "memory_operand" "+m")] UNSPEC_TIE))]

What I'm wondering is whether the memory read is actually needed here?! 
Wouldn't the following have
the same effect?

[(set (mem:BLK (scratch)) (unspec:BLK [(const_int 0)] UNSPEC_TIE))]

To my understanding this should block memory reads and writes from being moved 
across.
The MEM probably should be set up to be in the frame alias set?

Bye,

-Andreas-

Reply via email to