On Sat, Nov 2, 2024 at 4:10 PM Andrew Pinski <quic_apin...@quicinc.com> wrote: > > To make it easier to add more predicates in some cases, > factor out the code. Plus it makes the code slightly more > readable since it is not indented as much. > > Bootstrapped and tested on x86_64.
OK. Thanks, Richard. > gcc/ChangeLog: > > * tree-ssa-sccvn.cc (insert_predicates_for_cond): New function, > factored out from ... > (process_bb): Here. > > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com> > --- > gcc/tree-ssa-sccvn.cc | 70 +++++++++++++++++++++++-------------------- > 1 file changed, 37 insertions(+), 33 deletions(-) > > diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc > index 1c8bc884f1f..a11bf968670 100644 > --- a/gcc/tree-ssa-sccvn.cc > +++ b/gcc/tree-ssa-sccvn.cc > @@ -7895,6 +7895,42 @@ insert_related_predicates_on_edge (enum tree_code > code, tree *ops, edge pred_e) > } > } > > +/* Insert on the TRUE_E true and FALSE_E false predicates > + derived from LHS CODE RHS. */ > +static void > +insert_predicates_for_cond (tree_code code, tree lhs, tree rhs, > + edge true_e, edge false_e) > +{ > + tree_code icode = invert_tree_comparison (code, HONOR_NANS (lhs)); > + tree ops[2]; > + ops[0] = lhs; > + ops[1] = rhs; > + if (true_e) > + vn_nary_op_insert_pieces_predicated (2, code, boolean_type_node, ops, > + boolean_true_node, 0, true_e); > + if (false_e) > + vn_nary_op_insert_pieces_predicated (2, code, boolean_type_node, ops, > + boolean_false_node, 0, false_e); > + if (icode != ERROR_MARK) > + { > + if (true_e) > + vn_nary_op_insert_pieces_predicated (2, icode, boolean_type_node, ops, > + boolean_false_node, 0, true_e); > + if (false_e) > + vn_nary_op_insert_pieces_predicated (2, icode, boolean_type_node, ops, > + boolean_true_node, 0, false_e); > + } > + /* Relax for non-integers, inverted condition handled > + above. */ > + if (INTEGRAL_TYPE_P (TREE_TYPE (lhs))) > + { > + if (true_e) > + insert_related_predicates_on_edge (code, ops, true_e); > + if (false_e) > + insert_related_predicates_on_edge (icode, ops, false_e); > + } > +} > + > /* Main stmt worker for RPO VN, process BB. */ > > static unsigned > @@ -8098,45 +8134,13 @@ process_bb (rpo_elim &avail, basic_block bb, > edge true_e, false_e; > extract_true_false_edges_from_block (bb, &true_e, &false_e); > enum tree_code code = gimple_cond_code (last); > - enum tree_code icode > - = invert_tree_comparison (code, HONOR_NANS (lhs)); > - tree ops[2]; > - ops[0] = lhs; > - ops[1] = rhs; > if ((do_region && bitmap_bit_p (exit_bbs, > true_e->dest->index)) > || !can_track_predicate_on_edge (true_e)) > true_e = NULL; > if ((do_region && bitmap_bit_p (exit_bbs, > false_e->dest->index)) > || !can_track_predicate_on_edge (false_e)) > false_e = NULL; > - if (true_e) > - vn_nary_op_insert_pieces_predicated > - (2, code, boolean_type_node, ops, > - boolean_true_node, 0, true_e); > - if (false_e) > - vn_nary_op_insert_pieces_predicated > - (2, code, boolean_type_node, ops, > - boolean_false_node, 0, false_e); > - if (icode != ERROR_MARK) > - { > - if (true_e) > - vn_nary_op_insert_pieces_predicated > - (2, icode, boolean_type_node, ops, > - boolean_false_node, 0, true_e); > - if (false_e) > - vn_nary_op_insert_pieces_predicated > - (2, icode, boolean_type_node, ops, > - boolean_true_node, 0, false_e); > - } > - /* Relax for non-integers, inverted condition handled > - above. */ > - if (INTEGRAL_TYPE_P (TREE_TYPE (lhs))) > - { > - if (true_e) > - insert_related_predicates_on_edge (code, ops, true_e); > - if (false_e) > - insert_related_predicates_on_edge (icode, ops, false_e); > - } > + insert_predicates_for_cond (code, lhs, rhs, true_e, false_e); > } > break; > } > -- > 2.43.0 >