https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56766
--- Comment #11 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Richard Biener from comment #10) > So it works with > > (define_insn "sse3_addsubv2df3" > [(set (match_operand:V2DF 0 "register_operand" "=x,x") > (vec_select:V2DF > (vec_concat:V4DF > (plus:V2DF > (match_operand:V2DF 1 "register_operand" "0,x") > (match_operand:V2DF 2 "nonimmediate_operand" "xm,xm")) > (minus:V2DF (match_dup 2) (match_dup 1))) > (parallel [(const_int 0) (const_int 3)])))] You swapped non-commutative part of the insn. This should be: (define_insn "*sse3_addsubv2df3_1" [(set (match_operand:V2DF 0 "register_operand" "=x,x") (vec_select:V2DF (vec_concat:V4DF (plus:V2DF (match_operand:V2DF 2 "nonimmediate_operand" "xm,xm") (match_operand:V2DF 1 "register_operand" "0,x")) (minus:V2DF (match_dup 1) (match_dup 2))) (parallel [(const_int 0) (const_int 3)])))] "TARGET_SSE3"