fwprop: Fix single_use_p calculation
commitb61461ac7f9bdd0e98145be79423d19b933afaa0
authorIlya Leoshkevich <iii@linux.ibm.com>
Tue, 2 Mar 2021 22:37:26 +0000 (2 23:37 +0100)
committerIlya Leoshkevich <iii@linux.ibm.com>
Tue, 23 Mar 2021 18:44:22 +0000 (23 19:44 +0100)
tree32bdc72e60004b8cb1085701134a8b35f850f600
parentd1aa5f57db7c14a62e9b7e2a2aa8a9c402a89363
fwprop: Fix single_use_p calculation

Commit efb6bc55a93a ("fwprop: Allow (subreg (mem)) simplifications")
introduced a check that was supposed to look at the propagated def's
number of uses.  It uses insn_info::num_uses (), which in reality
returns the number of uses def's insn has.  The whole change therefore
works only by accident.

Fix by looking at set_info's uses instead of insn_info's uses.  This
requires passing around set_info instead of insn_info.

gcc/ChangeLog:

2021-03-02  Ilya Leoshkevich  <iii@linux.ibm.com>

* fwprop.c (fwprop_propagation::fwprop_propagation): Look at
set_info's uses.
(try_fwprop_subst_note): Use set_info instead of insn_info.
(try_fwprop_subst_pattern): Likewise.
(try_fwprop_subst_notes): Likewise.
(try_fwprop_subst): Likewise.
(forward_propagate_subreg): Likewise.
(forward_propagate_and_simplify): Likewise.
(forward_propagate_into): Likewise.
* rtl-ssa/accesses.h (set_info::single_nondebug_use) New
method.
(set_info::single_nondebug_insn_use): Likewise.
(set_info::single_phi_use): Likewise.
* rtl-ssa/member-fns.inl (set_info::single_nondebug_use) New
method.
(set_info::single_nondebug_insn_use): Likewise.
(set_info::single_phi_use): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/s390/vector/long-double-asm-abi.c: New test.
gcc/fwprop.c
gcc/rtl-ssa/accesses.h
gcc/rtl-ssa/member-fns.inl
gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c [new file with mode: 0644]