This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]