https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95218
--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> --- Note a 'use' is not something that needs to be preserved, so (define_insn_and_split "*<code><mode>2" [(set (match_operand:VF 0 "register_operand" "=x,v") (absneg:VF (match_operand:VF 1 "vector_operand" "%0,v"))) (use (match_operand:VF 2 "vector_operand" "xBm,vm"))] "TARGET_SSE" "#" "&& reload_completed" [(set (match_dup 0) (<absneg_op>:VF (match_dup 1) (match_dup 2)))] "" [(set_attr "isa" "noavx,avx")]) doesn't make much sense (before reload). To me, that is. Why do we go that obfuscated way at all? I think a clean solution is to use an UNSPEC here (well, "clean"...).