This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/19391] New: [4.0 Regression] missed optimization with size of 8 vectors
- From: "pinskia at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 12 Jan 2005 06:32:40 -0000
- Subject: [Bug middle-end/19391] New: [4.0 Regression] missed optimization with size of 8 vectors
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
We do not generate the vector instructions with the following code on x86_64 (and x86 -msse3):
typedef short mmxw __attribute__ ((vector_size(8)));
typedef int mmxdw __attribute__ ((vector_size(8)));
mmxdw dw;
mmxw w;
void test(){
w+=w;
dw= (mmxdw)w;
}
The code comes from PR 14552 but we don't use the vector unit any more for the addition so we
produce so much crappy code:
movq w(%rip), %xmm0
movabsq $-9223231297218904064, %rax
movq %xmm0, -8(%rsp)
movq -8(%rsp), %rsi
movq %rsi, %rcx
movq %rsi, %rdx
xorq %rsi, %rcx
andq %rax, %rcx
movabsq $9223231297218904063, %rax
andq %rax, %rdx
addq %rdx, %rdx
xorq %rdx, %rcx
movq %rcx, -16(%rsp)
movq -16(%rsp), %xmm0
movq %xmm0, w(%rip)
movq %xmm0, dw(%rip)
ret
Compared to what we got in 3.4:
test:
movq w, %mm1
psllw $1, %mm1
movq %mm1, w
movq w, %mm0
movq %mm0, dw
ret
--
Summary: [4.0 Regression] missed optimization with size of 8
vectors
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Keywords: missed-optimization, ssemmx
Severity: normal
Priority: P2
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: pinskia at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: x86_64-*-*
OtherBugsDependingO 14552
nThis:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19391