[PATCH PR69052]Check if loop inv can be propagated into mem ref with additional addr expr canonicalization
Bin.Cheng
amker.cheng@gmail.com
Mon Feb 22 09:22:00 GMT 2016
On Fri, Feb 19, 2016 at 10:24 PM, Jeff Law <law@redhat.com> wrote:
> On 02/16/2016 11:43 AM, Bin Cheng wrote:
>>
>> ________________________________________
>> From: Jeff Law <law@redhat.com>
>> Sent: 11 February 2016 23:26
>> To: Bin.Cheng
>> Cc: Bin Cheng; gcc-patches@gcc.gnu.org; nd
>> Subject: Re: [PATCH PR69052]Check if loop inv can be propagated into mem
>> ref with additional addr expr canonicalization
>>
>>>> On 02/11/2016 10:59 AM, Bin.Cheng wrote:
>>
>>
>>>> Hi Jeff,
>>>> Thanks for detailed review. I also think a generic canonical
>>>> interface for RTL is much better. I will give it a try. But with
>>>> high chance it's a next stage1 stuff.
>>>
>>> That is, of course, fine. However, if you do get something ready, I'd
>>> support using it within LICM for gcc-6, then using it in other places
>>> for gcc-7.
>>
>> Hi,
>> This is the updated version patch. It fixes the problem by introducing a
>> generic address canonicalization interface. This new interface
>> canonicalizes address expression in following steps:
>> 1) Rewrite ASHIFT into MULT recursively.
>> 2) Divide address into sub expressions with PLUS as the separator.
>> 3) Sort sub expressions according to precedence defined for
>> communative operations.
>> 4) Simplify CONST_INT_P sub expressions.
>> 5) Create new canonicalized address and return.
>>
>> According to review comments, this interface is now restricted in LCIM,
>> and will probably be expanded to other passes like fwprop and combine after
>> entering GCC7.
>> Bootstrap and test on x86_64 and AArch64. Is it OK?
>>
>> Thanks,
>> bin
>>
>> 2016-02-15 Bin Cheng <bin.cheng@arm.com>
>>
>> PR tree-optimization/69052
>> * loop-invariant.c (canonicalize_address_mult): New function.
>> (MAX_CANON_ADDR_PARTS): New macro.
>> (collect_address_parts): New function.
>> (compare_address_parts, canonicalize_address): New functions.
>> (inv_can_prop_to_addr_use): Check validity of address expression
>> which is canonicalized by above canonicalize_address.
>>
>> gcc/testsuite/ChangeLog
>> 2016-02-15 Bin Cheng <bin.cheng@arm.com>
>>
>> PR tree-optimization/69052
>> * gcc.target/i386/pr69052.c: New test.
>
> This is exactly what I was looking for from a design standpoint.
>
> My only question is why didn't you use FOR_EACH_SUBRTX_VRA from rtl-iter.h
> to walk the RTX expressions in collect_address_parts and
> canonicalize_address_mult?
Hi Jeff,
Nothing special, just I haven't used this before, also
canonicalize_address_mult is alphabetically copied from fwprop.c. One
question is when rewriting SHIFT to MULT, we need to modify rtl
expression in place, does FOR_EACH_SUBRTX iterator support this? If
yes, what is the behavior for modified sub-expression?
Thanks,
bin
>
> Jeff
>
>
>>
>>>
>>> Jeff
>>
>>
>
More information about the Gcc-patches
mailing list