This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH PR57534]Support strength reduction for MEM_REF in slur


On 5/14/19 10:29 PM, bin.cheng wrote:
> Hi,
> As noted in PR57534 comment #33, SLSR currently doesn't strength reduce memory
> references in reported cases, which conflicts with its comment at the beginning of file.
> The main reason is in functions slsr_process_ref and restructure_reference which
> rejects MEM_REF by handled_compoenent_p in the first place.  This patch identifies
> and creates CAND_REF for MEM_REF by restructuring base/offset.
> 
> Note the patch only affects cases with multiple reducible MEM_REF.
> 
> Also note, with this patch, [base + cst_offset] addressing mode would be generally
> preferred.  I need to adjust three existing tests:
> * gcc.dg/tree-ssa/isolate-5.c
> * gcc.dg/tree-ssa/ssa-hoist-4.c
> Though address computation is reduced out of memory reference, the generated 
> assembly is not worsened.
> 
> * gcc.dg/tree-ssa/slsr-3.c
> The generated assembly has two more instructions:
> <       movslq  %edx, %rcx
> <       movl    (%rsi,%rcx,4), %r9d
> <       leaq    0(,%rcx,4), %rax
> <       leal    2(%r9), %r8d
> <       movl    %r8d, (%rdi,%rcx,4)
> <       movl    4(%rsi,%rax), %ecx
> <       addl    $2, %ecx
> <       movl    %ecx, 4(%rdi,%rax)
> <       movl    8(%rsi,%rax), %ecx
> <       addl    $2, %ecx
> <       movl    %ecx, 8(%rdi,%rax)
> <       movl    12(%rsi,%rax), %ecx
> <       addl    $2, %ecx
> <       movl    %ecx, 12(%rdi,%rax)
> ---
>>       movslq  %edx, %rax
>>       salq    $2, %rax
>>       addq    %rax, %rsi
>>       addq    %rax, %rdi
>>       movl    (%rsi), %eax
>>       addl    $2, %eax
>>       movl    %eax, (%rdi)
>>       movl    4(%rsi), %eax
>>       addl    $2, %eax
>>       movl    %eax, 4(%rdi)
>>       movl    8(%rsi), %eax
>>       addl    $2, %eax
>>       movl    %eax, 8(%rdi)
>>       movl    12(%rsi), %eax
>>       addl    $2, %eax
>>       movl    %eax, 12(%rdi)
> 
> Seems to me this is not deteriorating and "salq" can be saved by two forward propagation.
> 
> Bootstrap and test on x86_64, any comments?
> 
> Thanks,
> bin
> 
> 2019-05-15  Bin Cheng  <bin.cheng@linux.alibaba.com>
> 
>         PR tree-optimization/57534
>         * gimple-ssa-strength-reduction.c (restructure_base_offset): New.
>         (restructure_reference): Call restructure_base_offset when offset is
>         NULL.
>         (slsr_process_ref): Handle MEM_REF.
> 
> 2018-05-15  Bin Cheng  <bin.cheng@linux.alibaba.com>
> 
>         PR tree-optimization/57534
>         * gcc.dg/tree-ssa/pr57534.c: New test.
>         * gcc.dg/tree-ssa/isolate-5.c: Adjust checking strings.
>         * gcc.dg/tree-ssa/slsr-3.c: Ditto.
>         * gcc.dg/tree-ssa/ssa-hoist-4.c: Ditto.
I'll let Bill comment on the actual SLSR changes.  WRT the isolate-5.c
changes, I don't think your change impacts the purpose behind the test
at all.  So no objections from me.

jeff
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]