This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH GCC][4/4]Better handle store-stores chain if eliminated stores only store loop invariant
- From: "Bin.Cheng" <amker dot cheng at gmail dot com>
- To: Richard Biener <richard dot guenther at gmail dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 28 Jul 2017 16:42:53 +0100
- Subject: Re: [PATCH GCC][4/4]Better handle store-stores chain if eliminated stores only store loop invariant
- Authentication-results: sourceware.org; auth=none
- References: <VI1PR0802MB2176EC12FFDF68774C9B132BE7DC0@VI1PR0802MB2176.eurprd08.prod.outlook.com> <CAHFci28vO8iv_DvD+KqM2M=7e+EkR_fh6Msvc1dbFqg2eWnyNg@mail.gmail.com> <CAFiYyc35mCh1pbM5NY-mr_zLsh0ZLsNCUv+8zEH39iURWM-G0g@mail.gmail.com>
On Tue, Jul 25, 2017 at 12:48 PM, Richard Biener
<richard.guenther@gmail.com> wrote:
> On Mon, Jul 10, 2017 at 10:24 AM, Bin.Cheng <amker.cheng@gmail.com> wrote:
>> On Tue, Jun 27, 2017 at 11:49 AM, Bin Cheng <Bin.Cheng@arm.com> wrote:
>>> Hi,
>>> This is a followup patch better handling below case:
>>> for (i = 0; i < n; i++)
>>> {
>>> a[i] = 1;
>>> a[i+2] = 2;
>>> }
>>> Instead of generating root variables by loading from memory and propagating with PHI
>>> nodes, like:
>>> t0 = a[0];
>>> t1 = a[1];
>>> for (i = 0; i < n; i++)
>>> {
>>> a[i] = 1;
>>> t2 = 2;
>>> t0 = t1;
>>> t1 = t2;
>>> }
>>> a[n] = t0;
>>> a[n+1] = t1;
>>> We can simply store loop invariant values after loop body if we know loop iterates more
>>> than chain->length times, like:
>>> for (i = 0; i < n; i++)
>>> {
>>> a[i] = 1;
>>> }
>>> a[n] = 2;
>>> a[n+1] = 2;
>>>
>>> Bootstrap(O2/O3) in patch series on x86_64 and AArch64. Is it OK?
>> Update patch wrto changes in previous patch.
>> Bootstrap and test on x86_64 and AArch64. Is it OK?
>
> + if (TREE_CODE (val) == INTEGER_CST || TREE_CODE (val) == REAL_CST)
> + continue;
>
> Please use CONSTANT_CLASS_P (val) instead. I suppose VECTOR_CST or
> FIXED_CST would be ok as well for example.
>
> Ok with that change. Did we eventually optimize this in followup
Patch revised as suggested. I retested whole patch set and applied as
250665 ~ 250670. Will keep eyes on possible breakage in next couple
weeks.
Thanks,
bin
> passes previously?
>
> Richard.
>
>> Thanks,
>> bin
>>>
>>> Thanks,
>>> bin
>>> 2017-06-21 Bin Cheng <bin.cheng@arm.com>
>>>
>>> * tree-predcom.c: (struct chain): Handle store-store chain in which
>>> stores for elimination only store loop invariant values.
>>> (execute_pred_commoning_chain): Ditto.
>>> (prepare_initializers_chain_store_elim): Ditto.
>>> (prepare_finalizers): Ditto.
>>> (is_inv_store_elimination_chain): New function.
>>> (initialize_root_vars_store_elim_1): New function.