This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Allow x <- x, 1 in *vec_concatv2df (PR rtl-optimization/55829)
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Wed, 9 Jan 2013 10:23:17 +0100
- Subject: Re: [PATCH] Allow x <- x, 1 in *vec_concatv2df (PR rtl-optimization/55829)
- References: <20130108200057.GM7269@tucnak.redhat.com>
On Tue, Jan 8, 2013 at 9:00 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> No matter whether LRA (if it is a bug in there) is fixed or not,
> *vec_concatv2df could handle for !avx sse3 x <- x, 1 alternative the same
> as it handles x <- m, 1 alternative (using movddup).
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> 2013-01-08 Jakub Jelinek <jakub@redhat.com>
>
> PR rtl-optimization/55829
> * config/i386/sse.md (*vec_concatv2df): Add x <- x, 1 alternative
> for sse3 but not avx.
>
> * gcc.target/i386/pr55829.c: New test.
>
> --- gcc/config/i386/sse.md.jj 2012-11-26 10:14:26.000000000 +0100
> +++ gcc/config/i386/sse.md 2013-01-08 10:28:42.496819712 +0100
> @@ -5183,10 +5183,10 @@ (define_insn "vec_dupv2df"
> (set_attr "mode" "V2DF")])
>
> (define_insn "*vec_concatv2df"
> - [(set (match_operand:V2DF 0 "register_operand" "=x,x,x,x,x,x,x,x")
> + [(set (match_operand:V2DF 0 "register_operand" "=x,x,x, x,x,x,x,x")
> (vec_concat:V2DF
> - (match_operand:DF 1 "nonimmediate_operand" " 0,x,m,0,x,m,0,0")
> - (match_operand:DF 2 "vector_move_operand" " x,x,1,m,m,C,x,m")))]
> + (match_operand:DF 1 "nonimmediate_operand" " 0,x,xm,0,x,m,0,0")
> + (match_operand:DF 2 "vector_move_operand" " x,x,1, m,m,C,x,m")))]
This was done on purpose, since reload had some problems with similar
pattern (please see PR 50875 [1] and [2]). If we are sure that LRA
fixes this problem, then the patch is OK for mainline.
Also, please revert "hack" that fixed PR 50875 in this case.
[1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50875
[2] http://gcc.gnu.org/ml/gcc-patches/2011-10/msg02477.html
Uros.