https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86107
--- Comment #6 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> --- (In reply to Uroš Bizjak from comment #5) > (In reply to rsand...@gcc.gnu.org from comment #4) > > > > but should not fail verification even for !TARGET_INTER_UNIT_MOVES_TO_VEC > > > targets. As a matter of fact, the compilation works with -mtune=intel. > > > > This is by design when the insn belongs to a block that is being > > optimised for speed rather than size. It isn't recog per se that > > fails, but the validate_change stuff, which is designed for doing > > optional optimisations rather than required changes. > > Please note that regrename_do_replace fails, since the mentioned instruction > does not validate, although the compiler just wants to rename %bx to %dx in > (insn 1264); a simple register rename should not make the new insn invalid. Yeah, but "validate" in the "validate_change" sense rather than "recog_memoized" sense. Like I say, that's by design: regrename shouldn't be changing a "preferred for speed" alternative into a "not preferred for speed" alternative if the block is being optimised for speed. The renaming is a pure optimisation when regrename does it, so returning false is the right thing to do.