On Tue, Jul 25, 2017 at 12:48 PM, Richard Biener <[email protected]> wrote: > On Mon, Jul 10, 2017 at 10:24 AM, Bin.Cheng <[email protected]> wrote: >> On Tue, Jun 27, 2017 at 11:49 AM, Bin Cheng <[email protected]> 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 <[email protected]> >>> >>> * 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.
