This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [i386] scalar ops that preserve the high part of a vector
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