This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Report optimization/8832 was corrupted
- From: Mark van Doesburg <mark at cal005304 dot student dot utwente dot nl>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 6 Dec 2002 00:09:19 +0100
- Subject: Report optimization/8832 was corrupted
I tried reporting this bug through GNATS but the system info is not in
the report (even though I filled it in) The formatting is also hard to
read, so here it is as it was intended to be :-)
I have the following test program:
void t(int v)
{
asm volatile ("movaps %xmm0,%xmm1");
if(v&7)
asm volatile ("movaps %xmm1,%xmm2");
asm volatile ("movaps %xmm2,%xmm1");
if(v&7)
asm volatile ("movaps %xmm3,%xmm2");
asm volatile ("movaps %xmm4,%xmm1");
}
With gcc-3.2/3.2.1/3.3 (gcc -O3 -c bug.cpp) produces the following code:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 0f 28 c8 movaps %xmm0,%xmm1
6: f6 45 08 07 testb $0x7,0x8(%ebp)
a: 74 09 je 15 <_Z2tti+0x15>
c: 0f 28 d1 movaps %xmm1,%xmm2
f: 0f 28 ca movaps %xmm2,%xmm1
12: 0f 28 d3 movaps %xmm3,%xmm2
15: 0f 28 cc movaps %xmm4,%xmm1
18: 5d pop %ebp
19: c3 ret
This is not what I want because "movaps %xmm1,%xmm2" is not done if v==7.
Is this a bug, or am I doing something wrong ?
gcc -v Options used: gcc -O3 -c bug.cpp
--------------------------------------------------------------------------
Reading specs from /usr/local/test/lib/gcc-lib/i686-pc-linux-gnu/3.3/specs
Configured with: ../gcc-20021202/configure --prefix=/usr/local/test
Thread model: posix
gcc version 3.3 20021202 (experimental)
The code used to work correctly, gcc 2.95.3 (same system and options)
produces the code below, which does excactly what I expect it to do:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 0f 28 c8 movaps %xmm0,%xmm1
6: 8b 45 08 mov 0x8(%ebp),%eax
9: 83 e0 07 and $0x7,%eax
c: 74 03 je 11 <tt__Fi+0x11>
e: 0f 28 d1 movaps %xmm1,%xmm2
11: 0f 28 ca movaps %xmm2,%xmm1
14: 85 c0 test %eax,%eax
16: 74 03 je 1b <tt__Fi+0x1b>
18: 0f 28 d3 movaps %xmm3,%xmm2
1b: 0f 28 cc movaps %xmm4,%xmm1
1e: c9 leave
1f: c3 ret