https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56766
--- Comment #12 from rguenther at suse dot de <rguenther at suse dot de> --- On Thu, 11 Jun 2015, ubizjak at gmail dot com wrote: > 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" As it is just 'naming' it shouldn't matter, no?