This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/36992] Very stange code for _mm_move_epi64
- From: "ubizjak at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 Aug 2008 19:32:58 -0000
- Subject: [Bug target/36992] Very stange code for _mm_move_epi64
- References: <bug-36992-682@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #8 from ubizjak at gmail dot com 2008-08-01 19:32 -------
(In reply to comment #7)
> But it isn't necessary at all. We should use
>
> movq %xmm0,%xmm0
It looks to me that we should add:
[(set (match_operand:V2DI 0 "register_operand" "=x")
(vec_concat:V2DI
(match_operand:DI 1 "nonimmediate_operand" "!x")
(match_operand:DI 2 "vector_move_operand" " C")))]
to the alternatives of all vec_concatv2di patterns.
Perhaps we need something like that also for all vec_concatv2si patterns, since
x can also hold SImode value, and movd fills upper part of target SSE reg with
zeroes.
"!" guarantees, that this alternative applies only when input value is already
in SSE reg.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36992