On Thu, 17 Jun 2021, Jakub Jelinek wrote:
> On Thu, Jun 17, 2021 at 03:21:05PM +0200, Richard Biener wrote:
> > but the difficulty is in the (const_int ..) operand to (vec_merge ..).
> > I've tried sth like
> >
> > (define_mode_attr addsub_cst [(V4DF "(const_int 5)") (V2DF "(const_int
> > 1)")
> > (V4SF "(const_int 5)") (V8SF "(const_int
> > 85)")])
>
> Have you tried making addsub_cst just "5" "1" or "85" and use (const_int
> <addsub_cst>)?
Ah, that works! Now I only have to figure out the correct attributes
and alternatives. For reference, this is what I have at the moment.
Will play further tomorrow.
(define_mode_attr addsub_cst [(V4DF "5") (V2DF "1")
(V4SF "5") (V8SF "85")])
(define_insn "vec_addsub<mode>3"
[(set (match_operand:VF_128_256 0 "register_operand" "=x")
(vec_merge:VF_128_256
(minus:VF_128_256
(match_operand:VF_128_256 1 "register_operand" "x")
(match_operand:VF_128_256 2 "nonimmediate_operand" "xm"))
(plus:VF_128_256 (match_dup 1) (match_dup 2))
(const_int <addsub_cst>)))]
"TARGET_SSE3"
"%vaddsub<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "type" "sseadd")
(set_attr "prefix" "vex")
(set_attr "mode" "<MODE>")])
Richard.