https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108129
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Alexander Monakov from comment #0) > match.pd has multi-pattern matcher 'nop_atomic_bit_test_and_p'. > > It expands to ~38 KLOC in gimple-match.cc and ~350 KB in the compiled binary. > > There has to be a better way than repeatedly emitting the match pattern for > each member of {ATOMIC,SYNC}_FETCH_{AND,OR_XOR}_N :) It's the way the matcher works - if you can think of a better way of code-generating it within the constraints: - earlier patterns in match.pd should match first in case there are multiple matches - matching time should ideally be O(size of the pattern) rather than O(size of match.pd) The 2nd constraint isn't currently fulfilled because of the first constraint (or how that is implemented). The 2nd constraint was the original design goal to make frequent "re-folding" cheap. The first constraint was implemented to allow pattern ordering to disambiguate "overlapping" matches. Writing a different code generation in genmatch should be possible, the (lowered) AST is available.