On 9/11/19 2:43 PM, Richard Biener wrote: > On Wed, 11 Sep 2019, Martin Liška wrote: > >> I'm sending updated version of the patch where I changed >> from previous version: >> - more compact matching is used (note @3 and @4): >> (and (code1:c@3 @0 INTEGER_CST@1) (code2:c@4 @0 INTEGER_CST@2)) >> >> Patch can bootstrap on x86_64-linux-gnu and survives regression tests. >> >> Ready to be installed? > > --- a/gcc/genmatch.c > +++ b/gcc/genmatch.c > @@ -1894,9 +1894,11 @@ dt_node * > dt_node::append_simplify (simplify *s, unsigned pattern_no, > dt_operand **indexes) > { > + dt_simplify *s2; > dt_simplify *n = new dt_simplify (s, pattern_no, indexes); > for (unsigned i = 0; i < kids.length (); ++i) > - if (dt_simplify *s2 = dyn_cast <dt_simplify *> (kids[i])) > + if ((s2 = dyn_cast <dt_simplify *> (kids[i])) > + && s->match->location != s2->s->match->location) > { > > can you retain the warning for verbose >= 1 please? And put in > a comment that duplicates are sometimes hard to avoid with > nested for so this keeps match.pd sources small.
Sure. > > + /* Function maybe_fold_comparisons_from_match_pd creates temporary > + SSA_NAMEs. */ > + if (TREE_CODE (op1) == SSA_NAME && TREE_CODE (op2) == SSA_NAME) > + { > + gimple *s = SSA_NAME_DEF_STMT (op2); > + if (is_gimple_assign (s)) > + return same_bool_comparison_p (op1, gimple_assign_rhs_code (s), > + gimple_assign_rhs1 (s), > + gimple_assign_rhs2 (s)); > + else > + return false; > + } > > when do you actually run into the need to add this? The whole > same_bool_result_p/same_bool_comparison_p helpers look a bit > odd to me. It shouldn't be special to the new temporaries > either so at least the comment looks out-of place. At some point it was needed to handle gcc/testsuite/gcc.dg/pr46909.c test-case. Apparently, now the test-case is fine with the hunk. I will it removal of the hunk. > > + else if (op.code.is_tree_code () > + && TREE_CODE_CLASS ((tree_code)op.code) == tcc_comparison) > + { > > COMPARISON_CLASS_P ((tree_code)op.code) > > as was noted. Won't work here: /home/marxin/Programming/gcc/gcc/gimple-fold.c: In function ‘tree_node* maybe_fold_comparisons_from_match_pd(tree, tree_code, tree_code, tree, tree, tree_code, tree, tree)’: /home/marxin/Programming/gcc/gcc/tree.h:239:49: error: base operand of ‘->’ is not a pointer 239 | #define TREE_CODE(NODE) ((enum tree_code) (NODE)->base.code) | ^~ > > Any particular reason you needed to swap the calls in > maybe_fold_and/or_comparisons? > > +(for code1 (eq ne) > + (for code2 (eq ne lt gt le ge) > + (for and (truth_and bit_and) > + (simplify > > You could save some code-bloat with writing > > (for and ( > #if GENERIC > truth_and > #endif > bit_and) > > but since you are moving the patterns from GIMPLE code I'd say > simply remove truth_and and that innermost for? I'm gonna drop the generic tree codes support. Martin > > Otherwise OK. > > Thanks, > Richard. > > > > >> Thanks, >> Martin >> >