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.
+ /* 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.
+ 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.
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?
Otherwise OK.
Thanks,
Richard.
> Thanks,
> Martin
>
--
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 247165 (AG München)