On Sun, May 29, 2022 at 5:59 PM Di Zhao OS
<diz...@os.amperecomputing.com> wrote:
>
> Hi, attached is a new version of the patch. The changes are:
> - Skip using temporary equivalences for floating-point values, because
> folding expressions can generate incorrect values. For example,
> operations on 0.0 and -0.0 may have different results.
> - Avoid inserting duplicated back-refs from value-number to predicates.
> - Disable fre in testsuite/g++.dg/pr83541.C .
>
> Summary of the previous versions:
> https://gcc.gnu.org/pipermail/gcc-patches/2021-December/587346.html
>
> Is the patch still considered?

Yes, sorry - I have to catch up after release work but will look again at
this change after some vacation next week.

Richard.

>
> Thanks,
> Di Zhao
>
> ---
>
> Extend FRE with temporary equivalences.
>
> 2022-05-29  Di Zhao  <diz...@os.amperecomputing.com>
>
> gcc/ChangeLog:
>         PR tree-optimization/101186
>         * tree-ssa-sccvn.c (VN_INFO): remove assertions (there could be a
>         predicate already).
>         (dominated_by_p_w_unex): Moved upward.
>         (vn_nary_op_get_predicated_value): Moved upward.
>         (is_vn_valid_at_bb): Check if vn_pval is valid at BB.
>         (lookup_equiv_head): Lookup the "equivalence head" of given node.
>         (lookup_equiv_heads): Lookup the "equivalence head"s of given nodes.
>         (vn_tracking_edge): Extracted utility function.
>         (init_vn_nary_op_from_stmt): Insert and lookup by "equivalence head"s.
>         (vn_nary_op_insert_into): Insert new value at the front.
>         (vn_nary_op_insert_pieces_predicated_1): Insert as predicated values
>         from pieces.
>         (fold_const_from_equiv_heads): Fold N-ary expression of equiv-heads.
>         (push_new_nary_ref): Insert a back-reference to vn_nary_op_t.
>         (val_equiv_insert): Record temporary equivalence.
>         (vn_nary_op_insert_pieces_predicated): Record equivalences instead of
>         some predicates; insert back-refs.
>         (record_equiv_from_prev_phi_1): Record temporary equivalences 
> generated
>         by PHI nodes.
>         (record_equiv_from_prev_phi): Given an outgoing edge of a conditional
>         expression taken, record equivalences generated by PHI nodes.
>         (visit_nary_op): Add lookup previous results of N-ary operations by
>         equivalences.
>         (insert_related_predicates_on_edge): Some predicates can be computed
>         from equivalences, no need to insert them.
>         (process_bb): Add lookup predicated values by equivalences.
>         (struct unwind_state): Unwind state of back-refs to vn_nary_op_t.
>         (do_unwind): Unwind the back-refs to vn_nary_op_t.
>         (do_rpo_vn): Update back-reference unwind state.
>         * tree-ssa-sccvn.h (struct nary_ref): hold a lists of references to 
> the
>         nary map entries.
>
> gcc/testsuite/ChangeLog:
>
>         * g++.dg/pr83541.C: Disable fre.
>         * gcc.dg/tree-ssa/pr68619-2.c: Disable fre.
>         * gcc.dg/tree-ssa/pr71947-1.c: Disable fre.
>         * gcc.dg/tree-ssa/pr71947-2.c: Disable fre.
>         * gcc.dg/tree-ssa/pr71947-3.c: Disable fre.
>         * gcc.dg/tree-ssa/pr71947-5.c: Disable fre.
>         * gcc.dg/tree-ssa/pr71947-7.c: Disable fre.
>         * gcc.dg/tree-ssa/pr71947-8.c: Disable fre.
>         * gcc.dg/tree-ssa/pr71947-9.c: Disable fre.
>         * gcc.dg/tree-ssa/vrp03.c: Disable fre.
>         * gcc.dg/tree-ssa/ssa-fre-100.c: New test.
>         * gcc.dg/tree-ssa/ssa-fre-101.c: New test.
>         * gcc.dg/tree-ssa/ssa-fre-102.c: New test.
>         * gcc.dg/tree-ssa/ssa-pre-34.c: New test.

Reply via email to