[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