https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25290
--- Comment #34 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #22) > Without load/store handling, here are the following optimizations that > either can move to match.pd already or need some extra work to do it: > > * value_replacement: need to handle !single_non_singleton_phi_for_edges case > and more than one feeder statement (2 max according to the current > definition) There is a secondary part to value_replacement which requires more work than just working on the phi. I have to think of how to handle that. > * cond_removal_in_popcount_clz_ctz_pattern: need 2 feeder statements and > builtin call handling for feeder statements > > > * two_value_replacement: recored as PR 100958, it can move already Handled. > * abs_replacement: needs PROP_gimple_lswitch so we don't change if > statements early enough > ** I think majority of the abs handling is already in match.pd. This is handled. > * minmax_replacement: has some handling of comparisions which might not be > in the match.pd patterns already. needs PROP_gimple_lswitch also. > ** The handling of: > if (a <= u) > b = MAX (a, d); > x = PHI <b, u> > needs to moved too. > > > For the ones which cannot move There is a new part of minmax which I have a patch for but there is one part missing still (recorded in PR 101024) > * factor_out_conditional_conversion: will never move, though it needs > improvement and moved already (PR 56223 and PR 13563) I have an implementation which moves this over to using gimple_match_op (which I need to a few testcases for it). Though some of this maybe should move over to match ... > * spaceship_replacement: cannot move to match.pd depends on use afterwards > which is not hard to deal with in a match pattern. I have to look at what is done for spaceship and maybe merge it in with what is done for value_replacement (comparison after the phi) since they implement a similar optimization.