On Thu, Jul 23, 2020 at 10:02 Richard Biener wrote:
> Likewise for the existing
>
>+/* popcount(X) == 0 is X == 0, and related (in)equalities. */ (for
>+(for popcount (POPCOUNT)
> (for cmp (le eq ne gt)
> rep (eq eq ne ne)
> (simplify
> (cmp (popcount @0) integer_zerop)
> (rep @0 { build_zero_cst (TREE_TYPE (@0)); }))))
>
> you can elide the (for ...)
Unfortunately, I tried that myself when preparing this patch:
Attempt #1:
(for cmp (le eq ne gt)
rep (eq eq ne ne)
(simplify
(cmp (POPCOUNT @0) integer_zerop)
(rep @0 { build_zero_cst (TREE_TYPE (@0)); }))))
results in:
build/genmatch --gimple ../../patcha3/gcc/match.pd \
> tmp-gimple-match.c
../../patcha3/gcc/match.pd:5977:11 error: operator-list POPCOUNT cannot be
expanded inside 'for'
(cmp (POPCOUNT @0) integer_zerop)
^
Attempt #2:
(for popcount (POPCOUNT)
cmp (le eq ne gt)
rep (eq eq ne ne)
(simplify
(cmp (popcount @0) integer_zerop)
(rep @0 { build_zero_cst (TREE_TYPE (@0)); })))
results in:
> tmp-gimple-match.c
../../patcha3/gcc/match.pd:5975:22 error: All user-defined identifiers must
have a multiple number of operator substitutions of the smallest number of
substitutions
cmp (le eq ne gt)
^
I'll leave it the way it is with the nested FORs, and investigate your other
suggestions.
> OK with those changes.
>
> Richard.
Roger
--