tree-optimization/111779 - Handle some BIT_FIELD_REFs in SRA
commit6decda1a35be5764101987c210b5693a0d914e58
authorRichard Biener <rguenther@suse.de>
Thu, 12 Oct 2023 09:34:57 +0000 (12 11:34 +0200)
committerRichard Biener <rguenther@suse.de>
Fri, 13 Oct 2023 06:34:23 +0000 (13 08:34 +0200)
tree901af698616915d43c1c2b177821a3c4b19bc84c
parent35b5bb475375dba4ea9101d6db13a6012c4e84ca
tree-optimization/111779 - Handle some BIT_FIELD_REFs in SRA

The following handles byte-aligned, power-of-two and byte-multiple
sized BIT_FIELD_REF reads in SRA.  In particular this should cover
BIT_FIELD_REFs created by optimize_bit_field_compare.

For gcc.dg/tree-ssa/ssa-dse-26.c we now SRA the BIT_FIELD_REF
appearing there leading to more DSE, fully eliding the aggregates.

This results in the same false positive -Wuninitialized as the
older attempt to remove the folding from optimize_bit_field_compare,
fixed by initializing part of the aggregate unconditionally.

PR tree-optimization/111779
gcc/
* tree-sra.cc (sra_handled_bf_read_p): New function.
(build_access_from_expr_1): Handle some BIT_FIELD_REFs.
(sra_modify_expr): Likewise.
(make_fancy_name_1): Skip over BIT_FIELD_REF.

gcc/fortran/
* trans-expr.cc (gfc_trans_assignment_1): Initialize
lhs_caf_attr and rhs_caf_attr codimension flag to avoid
false positive -Wuninitialized.

gcc/testsuite/
* gcc.dg/tree-ssa/ssa-dse-26.c: Adjust for more DSE.
* gcc.dg/vect/vect-pr111779.c: New testcase.
gcc/fortran/trans-expr.cc
gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-26.c
gcc/testsuite/gcc.dg/vect/vect-pr111779.c [new file with mode: 0644]
gcc/tree-sra.cc