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 --