This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: _mm{,256}_i{32,64}gather_{ps,pd,epi32,epi64} intrinsics semantics
- From: Kirill Yukhin <kirill dot yukhin at gmail dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: Andi Kleen <andi at firstfloor dot org>, "H.J. Lu" <hjl dot tools at gmail dot com>, Richard Henderson <rth at redhat dot com>, Uros Bizjak <ubizjak at gmail dot com>, gcc at gcc dot gnu dot org
- Date: Wed, 2 Nov 2011 13:10:14 +0400
- Subject: Re: _mm{,256}_i{32,64}gather_{ps,pd,epi32,epi64} intrinsics semantics
- References: <20111101195742.GM1052@tyan-ft48-01.lab.bos.redhat.com>
Hi Jakub,
Actually I did not get the point.
If we have no src/masking, destination must be unchanged until gather
will write to it (at least partially)
If we have all 1's in mask, scr must not be changed at all.
So, nullification in intrinsics just useless.
Having such snippet:
(1) vmovdqa k(%rax,%rax), %ymm1
(2) vmovaps %ymm0, %ymm6
(3) vmovaps %ymm0, %ymm2
(4) vmovdqa k+32(%rax,%rax), %ymm3
(5) vgatherdps %ymm6, vf1(,%ymm1,4), %ymm2
Looks pretty strange. Which value has ymm0? If it has all zeroes, then
(1)-(5) is dead code, which may be just removed.
If contains all 1s then (2) s useless.
But again, seems I did not get your point...
Thanks, K