On Fri, Dec 07, 2012 at 08:43:05AM -0600, Richard Henderson wrote: > > +(define_insn "<sse>_vm<plusminus_insn><mode>3<vec_merge_or_concat>" > > [(set (match_operand:VF_128 0 "register_operand" "=x,x") > > (vec_merge:VF_128 > > - (plusminus:VF_128 > > - (match_operand:VF_128 1 "register_operand" "0,x") > > - (match_operand:VF_128 2 "nonimmediate_operand" "xm,xm")) > > + (vec_duplicate:VF_128 > > + (plusminus:<ssescalarmode> > > + (vec_select:<ssescalarmode> > > + (match_operand:VF_128 1 "register_operand" "0,x") > > + (parallel [(const_int 0)])) > > + (match_operand:<ssescalarmode> 2 "nonimmediate_operand" "xm,xm"))) > > (match_dup 1) > > (const_int 1)))] > > "TARGET_SSE" > > "@ > > <plusminus_mnemonic><ssescalarmodesuffix>\t{%2, %0|%0, %2} > > v<plusminus_mnemonic><ssescalarmodesuffix>\t{%2, %1, %0|%0, %1, %2}" > > [(set_attr "isa" "noavx,avx") > > (set_attr "type" "sseadd") > > (set_attr "prefix" "orig,vex") > > (set_attr "mode" "<ssescalarmode>")]) > > Did this really trigger as a substitution? It's not supposed to have, since > you didn't add (set_attr "replace_vec_merge_with_vec_concat" "yes")...
That was the older proposal, the current way to trigger it is using the substitution attr somewhere, typically in pattern name - <vec_merge_or_concat> in the above case. Jakub