On Mon, Jul 10, 2017 at 10:24 AM, Bin.Cheng <amker.ch...@gmail.com> wrote:
> On Tue, Jun 27, 2017 at 11:49 AM, Bin Cheng <bin.ch...@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
passes previously?

Richard.

> Thanks,
> bin
>>
>> Thanks,
>> bin
>> 2017-06-21  Bin Cheng  <bin.ch...@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.

Reply via email to