diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-11-08 16:46:58 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-11-08 16:46:58 +0100 |
commit | 383ac8dc264dad7e173ad808e814e3c4b609dcab (patch) | |
tree | d8ee3fb831dd90541d0114b71ab2b990661f2d41 /gcc/tree-nested.h | |
parent | a14ab2c3467950ccaad000864164a62d24129dd5 (diff) | |
download | gcc-383ac8dc264dad7e173ad808e814e3c4b609dcab.zip gcc-383ac8dc264dad7e173ad808e814e3c4b609dcab.tar.gz gcc-383ac8dc264dad7e173ad808e814e3c4b609dcab.tar.bz2 |
re PR tree-optimization/78821 (GCC7: Copying whole 32 bits structure field by field not optimised into copying whole 32 bits at once)
PR tree-optimization/78821
* gimple-ssa-store-merging.c (struct store_operand_info): Add bit_not_p
data member.
(store_operand_info::store_operand_info): Initialize it to false.
(pass_store_merging::terminate_all_aliasing_chains): Rewritten to use
ref_maybe_used_by_stmt_p and stmt_may_clobber_ref_p on lhs of each
store in the group, and if chain_info is non-NULL, to ignore altogether
that chain.
(compatible_load_p): Fail if bit_not_p does not match.
(imm_store_chain_info::output_merged_store): Handle bit_not_p loads.
(handled_load): Fill in bit_not_p. Handle BIT_NOT_EXPR.
(pass_store_merging::process_store): Adjust
terminate_all_aliasing_chains calls to pass NULL in all current spots,
call terminate_all_aliasing_chains newly when adding a store into
a chain with non-NULL chain_info.
* gcc.dg/store_merging_2.c: Expect 3 store mergings instead of 2.
* gcc.dg/store_merging_13.c (f7, f8, f9, f10, f11, f12, f13): New
functions.
(main): Test also those. Expect 13 store mergings instead of 6.
* gcc.dg/store_merging_14.c (f7, f8, f9): New functions.
(main): Test also those. Expect 9 store mergings instead of 6.
From-SVN: r254536
Diffstat (limited to 'gcc/tree-nested.h')
0 files changed, 0 insertions, 0 deletions