This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH PR57534]Support strength reduction for MEM_REF in slur
- From: Jeff Law <law at redhat dot com>
- To: "bin.cheng" <bin dot cheng at linux dot alibaba dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 16 May 2019 12:00:18 -0600
- Subject: Re: [PATCH PR57534]Support strength reduction for MEM_REF in slur
- References: <61934715-4a6e-43b6-b5fe-0d9714e3cb36.bin.cheng@linux.alibaba.com>
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
>