https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116510
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|12.5 |15.0 Summary|[12/13/14/15 Regression] |[15 Regression] ice in |ice in decompose, at |decompose, at |wide-int.h:1049 |wide-int.h:1049 --- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Richard Biener from comment #3) > Confirmed. This is likely from a new match.pd pattern. > > * X == C (or X & Z == Y | C) is impossible if ~nonzero(X) & C != 0. */ > (for cmp (eq ne) > (simplify > (cmp:c (with_possible_nonzero_bits2 @0) (with_certain_nonzero_bits2 @1)) > (if (wi::bit_and_not (wi::to_wide (@1), get_nonzero_bits (@0)) != 0) > { constant_boolean_node (cmp == NE_EXPR, type); }))) > > the issue is that with_possible_nonzero_bits2 also supports SSA_NAMEs, so > @1 cannot be used like this. OK, I misparsed with_certain_nonzero_bits2 as with_possible_nonzero_bits2, the pattern looks correct.