This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/19133] New: march=athlon can produce slower code than march=i686
- From: "ornati at fastwebnet dot it" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 22 Dec 2004 21:01:37 -0000
- Subject: [Bug c/19133] New: march=athlon can produce slower code than march=i686
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
"gcc -v"
Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/specs
Configured with: /var/tmp/portage/gcc-3.3.4-r1/work/gcc-3.3.4/configure
--prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.3
--includedir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/include
--datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3
--mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3/man
--infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3/info --enable-shared
--host=i686-pc-linux-gnu --target=i686-pc-linux-gnu --with-system-zlib
--enable-languages=c,c++ --enable-threads=posix --enable-long-long
--disable-checking --disable-libunwind-exceptions --enable-cstdio=stdio
--enable-version-specific-runtime-libs
--with-gxx-include-dir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.4/include/g++-v3
--with-local-prefix=/usr/local --enable-shared --enable-nls
--without-included-gettext --disable-multilib --enable-__cxa_atexit
--enable-clocale=generic
Thread model: posix
gcc version 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)
"cat /proc/cpu"
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 3
model name : AMD Duron(tm) Processor
stepping : 1
cpu MHz : 756.798
cache size : 64 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx
fxsr syscall mmxext 3dnowext 3dnow
bogomips : 1490.94
Playing with compiler optimizations I've found a "test-case" where
"-march=athlon" produces an executable that is ~18% slower than that produced
with "-march=i686".
"Commands used for compilation"
gcc -Wall -O2 -march=i686 -o test-i686 test.c
gcc -Wall -O2 -march=athlon -o test-athlon test.c
"test.c"
#define N 30000
static int A[N];
static int B[N];
int main(void)
{
int i, j, x;
for (i = 0; i < N; ++i) {
x = 0;
for (j=0; j < N; ++j)
if (A[j] < A[i] && B[j] > x)
x = A[j];
A[i] = x + 1;
}
return 0;
}
Execution time:
paolo@tux gcc_test $ time ./test-i686
real 0m6.149s
user 0m6.015s
sys 0m0.004s
paolo@tux gcc_test $ time ./test-athlon
real 0m7.270s
user 0m7.120s
sys 0m0.004s
Anoter interesting thing is that if I only do this change:
--- test.c.orig 2004-12-22 21:52:46.208140096 +0100
+++ test.c 2004-12-22 21:55:01.069638032 +0100
@@ -10,7 +10,7 @@
for (i = 0; i < N; ++i) {
x = 0;
for (j=0; j < N; ++j)
- if (A[j] < A[i] && B[j] > x)
+ if (A[j] < A[i] && A[j] > x)
x = A[j];
A[i] = x + 1;
}
The "test-athlon" version returns fast as "test-i686" one:
paolo@tux gcc_test $ time ./test-i686
real 0m6.134s
user 0m6.015s
sys 0m0.003s
paolo@tux gcc_test $ time ./test-athlon
real 0m6.128s
user 0m6.010s
sys 0m0.006s
I've tried also gcc 3.4.3 and it shows the same behaviour.
Shouldn't "-march=athlon" optimize for AMD K7 processors? ;-)
--
Summary: march=athlon can produce slower code than march=i686
Product: gcc
Version: 3.3.4
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ornati at fastwebnet dot it
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19133