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.