[Bug rtl-optimization/56766] Fails to combine (vec_select (vec_concat ...)) to (vec_merge ...)

ubizjak at gmail dot com gcc-bugzilla@gcc.gnu.org
Thu Jun 11 11:12:00 GMT 2015


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"


More information about the Gcc-bugs mailing list