https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109855
--- Comment #5 from ktkachov at gcc dot gnu.org --- (In reply to rsand...@gcc.gnu.org from comment #4) > I guess the problem is that the define_subst output template has: > > (match_operand:<VDBL> 0) > > which creates a new operand 0 with an empty predicate and constraint, > as opposed to a (match_dup 0), which would be substituted with the > original operand 0. Unfortunately > > (match_dup:<VDBL> 0) > > doesn't work as a way of inserting the original destination with > a different mode, since the :<VDBL> is ignored. Perhaps we should > “fix” that. Alternatively: > > (match_operand:<VDBL> 0 "register_operand" "=w") > > should work, but probably locks us into using patterns that have one > alternative only. I think this approach is the most promising and probably okay for the vast majority of cases we want to handle with these substs.