re PR tree-optimization/88709 (Improve store-merging)
authorJakub Jelinek <jakub@redhat.com>
Mon, 6 May 2019 21:50:14 +0000 (23:50 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 6 May 2019 21:50:14 +0000 (23:50 +0200)
commit3afd514bca6ea572e614b5289c4429ace693311b
tree6cf0ff6dfc80988456a14b05c7a9b0581f0a685d
parent839c480a14f025bdcd73a53d14a19d4cc9a1aea5
re PR tree-optimization/88709 (Improve store-merging)

PR tree-optimization/88709
PR tree-optimization/90271
* params.def (PARAM_STORE_MERGING_MAX_SIZE): New parameter.
* gimple-ssa-store-merging.c (encode_tree_to_bitpos): Handle
non-clobber CONSTRUCTORs with no elts.  Remove useless tmp_int
variable.
(imm_store_chain_info::coalesce_immediate_stores): Punt if the size
of the store merging group is larger than
PARAM_STORE_MERGING_MAX_SIZE parameter.
(split_group): Add bzero_first argument.  If set, always emit first
the first store which must be = {} of the whole area and then for the
rest of the stores consider all zero bytes as paddings.
(imm_store_chain_info::output_merged_store): Check if first store
is = {} of the whole area and if yes, determine which setting of
bzero_first for split_group gives smaller number of stores.  Adjust
split_group callers.
(lhs_valid_for_store_merging_p): Allow decls.
(rhs_valid_for_store_merging_p): Allow non-clobber CONTRUCTORs with
no elts.
(pass_store_merging::process_store): Likewise.

* gcc.dg/store_merging_26.c: New test.
* gcc.dg/store_merging_27.c: New test.
* gcc.dg/store_merging_28.c: New test.
* gcc.dg/store_merging_29.c: New test.

From-SVN: r270924
gcc/ChangeLog
gcc/gimple-ssa-store-merging.c
gcc/params.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/store_merging_26.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/store_merging_27.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/store_merging_28.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/store_merging_29.c [new file with mode: 0644]