avr-libc-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-libc-dev] Considerable Compiler improvement neeeds testing


From: Björn Haase
Subject: [avr-libc-dev] Considerable Compiler improvement neeeds testing
Date: Sun, 30 Jan 2005 17:48:16 +0100
User-agent: KMail/1.7.1

Hi, 

find enclosed a mail posted by Andy Hutchinson on the address@hidden list. I 
forward this mail to this list since I think that this is the better forum 
for discussing this issue.

The story is:
It seems that the gcc internals documentation was kind of misleading and for 
this reason avr-gcc was not able to take benefit of a couple of optimizations 
that avoid useless moves across registers when dealing with variables of 
different byte sizes.
The change suggested by Andy Hutchinson affects one single line in
the gcc/config/avr/avr.h that presently reads
#define MODES_TIEABLE_P 0
to 
#define MODES_TIEABLE_P 1
. My tests have shown that *with* this change, about 15 testcases in the gcc 
testsuite work that did not beforehand and the code becomes considerably 
tighter.

Yours,

Björn


Sunday, 30. Januar 2005 17:32  Andy Hutchinson wrote:
> This is tremendous!
>
> Can somebody check out a few real embedded application? So we can see if
> there is any I/O hiccups and get a feel for code improvement? Something
> very "char/byte" orientated plus some floating point?? oh yes - it
> should be run and see if it works rather than just compile/simulate.
>
> I have found no issues but I have other optimisation in my setup that
> now prevent a true comparision.
>
> address@hidden wrote:
> > Hi,
> >
> > Meanwhile I have run the testsuite (using the simulavr simulator) with
> > and without modes defined tieable. When modes are declared to be tieable,
> > 13 failures disappear:
> >
> > Testsuite result summary for #define MODES_TIEABLE_P 0
> >         === gcc Summary ===
> > # of expected passes        23105
> > # of unexpected failures    314
> > # of unexpected successes   3
> > # of expected failures      67
> > # of unresolved testcases   128
> > # of untested testcases     25
> > # of unsupported tests      962
> > /home/bmh/gnucvs/gcc343/build/gcc/xgcc version 3.4.3
> >
> > Testsuite result summary for #define MODES_TIEABLE_P 1
> >         === gcc Summary ===
> > # of expected passes        23120
> > # of unexpected failures    301
> > # of unexpected successes   3
> > # of expected failures      67
> > # of unresolved testcases   126
> > # of untested testcases     25
> > # of unsupported tests      962
> > /home/bmh/gnucvs/gcc343/build/gcc/xgcc version 3.4.3
> >
> > Yours,
> >
> > Björn
> >
> > P.S.:
> > This is the diff of the summary files:
> >
> > *** gcc.sum.tieable0    2005-01-30 17:06:29.619017504 +0100
> > --- gcc.sum.tieable1    2005-01-30 12:49:11.000000000 +0100
> > ***************
> > *** 1,4 ****
> > ! Test Run By bmh on Sun Jan 30 12:55:18 2005
> >   Target is avr-unknown-none
> >   Host   is i686-pc-linux-gnu
> >
> > --- 1,4 ----
> > ! Test Run By bmh on Sun Jan 30 11:29:20 2005
> >   Target is avr-unknown-none
> >   Host   is i686-pc-linux-gnu
> >
> > ***************
> > *** 374,381 ****
> >   PASS: gcc.c-torture/compile/20001212-1.c  -O0  (test for excess errors)
> >   PASS: gcc.c-torture/compile/20001212-1.c  -O1  (test for excess errors)
> >   PASS: gcc.c-torture/compile/20001212-1.c  -O2  (test for excess errors)
> > ! FAIL: gcc.c-torture/compile/20001212-1.c  -O3 -fomit-frame-pointer 
> > (test for excess errors)
> > ! FAIL: gcc.c-torture/compile/20001212-1.c  -O3 -g  (test for excess
> > errors) PASS: gcc.c-torture/compile/20001212-1.c  -Os  (test for excess
> > errors) PASS: gcc.c-torture/compile/20001221-1.c  -O0  (test for excess
> > errors) PASS: gcc.c-torture/compile/20001221-1.c  -O1  (test for excess
> > errors) --- 374,381 ----
> >   PASS: gcc.c-torture/compile/20001212-1.c  -O0  (test for excess errors)
> >   PASS: gcc.c-torture/compile/20001212-1.c  -O1  (test for excess errors)
> >   PASS: gcc.c-torture/compile/20001212-1.c  -O2  (test for excess errors)
> > ! PASS: gcc.c-torture/compile/20001212-1.c  -O3 -fomit-frame-pointer 
> > (test for excess errors)
> > ! PASS: gcc.c-torture/compile/20001212-1.c  -O3 -g  (test for excess
> > errors) PASS: gcc.c-torture/compile/20001212-1.c  -Os  (test for excess
> > errors) PASS: gcc.c-torture/compile/20001221-1.c  -O0  (test for excess
> > errors) PASS: gcc.c-torture/compile/20001221-1.c  -O1  (test for excess
> > errors) ***************
> > *** 1664,1673 ****
> >   PASS: gcc.c-torture/compile/900116-1.c  -O0  (test for excess errors)
> >   PASS: gcc.c-torture/compile/900116-1.c  -O1  (test for excess errors)
> >   PASS: gcc.c-torture/compile/900116-1.c  -O2  (test for excess errors)
> > ! FAIL: gcc.c-torture/compile/900116-1.c  -O3 -fomit-frame-pointer  (test
> > for excess errors)
> > ! FAIL: gcc.c-torture/compile/900116-1.c  -O3 -fomit-frame-pointer
> > -funroll-loops  (test for excess errors)
> > ! FAIL: gcc.c-torture/compile/900116-1.c  -O3 -fomit-frame-pointer
> > -funroll-all-loops -finline-functions  (test for excess errors)
> > ! FAIL: gcc.c-torture/compile/900116-1.c  -O3 -g  (test for excess
> > errors) PASS: gcc.c-torture/compile/900116-1.c  -Os  (test for excess
> > errors) PASS: gcc.c-torture/compile/900216-1.c  -O0  (test for excess
> > errors) PASS: gcc.c-torture/compile/900216-1.c  -O1  (test for excess
> > errors) --- 1664,1673 ----
> >   PASS: gcc.c-torture/compile/900116-1.c  -O0  (test for excess errors)
> >   PASS: gcc.c-torture/compile/900116-1.c  -O1  (test for excess errors)
> >   PASS: gcc.c-torture/compile/900116-1.c  -O2  (test for excess errors)
> > ! PASS: gcc.c-torture/compile/900116-1.c  -O3 -fomit-frame-pointer  (test
> > for excess errors)
> > ! PASS: gcc.c-torture/compile/900116-1.c  -O3 -fomit-frame-pointer
> > -funroll-loops  (test for excess errors)
> > ! PASS: gcc.c-torture/compile/900116-1.c  -O3 -fomit-frame-pointer
> > -funroll-all-loops -finline-functions  (test for excess errors)
> > ! PASS: gcc.c-torture/compile/900116-1.c  -O3 -g  (test for excess
> > errors) PASS: gcc.c-torture/compile/900116-1.c  -Os  (test for excess
> > errors) PASS: gcc.c-torture/compile/900216-1.c  -O0  (test for excess
> > errors) PASS: gcc.c-torture/compile/900216-1.c  -O1  (test for excess
> > errors) ***************
> > *** 2588,2597 ****
> >   PASS: gcc.c-torture/compile/930621-1.c  -O0  (test for excess errors)
> >   PASS: gcc.c-torture/compile/930621-1.c  -O1  (test for excess errors)
> >   PASS: gcc.c-torture/compile/930621-1.c  -O2  (test for excess errors)
> > ! FAIL: gcc.c-torture/compile/930621-1.c  -O3 -fomit-frame-pointer  (test
> > for excess errors)
> > ! FAIL: gcc.c-torture/compile/930621-1.c  -O3 -fomit-frame-pointer
> > -funroll-loops  (test for excess errors)
> > ! FAIL: gcc.c-torture/compile/930621-1.c  -O3 -fomit-frame-pointer
> > -funroll-all-loops -finline-functions  (test for excess errors)
> > ! FAIL: gcc.c-torture/compile/930621-1.c  -O3 -g  (test for excess
> > errors) PASS: gcc.c-torture/compile/930621-1.c  -Os  (test for excess
> > errors) PASS: gcc.c-torture/compile/930623-1.c  -O0  (test for excess
> > errors) PASS: gcc.c-torture/compile/930623-1.c  -O1  (test for excess
> > errors) --- 2588,2597 ----
> >   PASS: gcc.c-torture/compile/930621-1.c  -O0  (test for excess errors)
> >   PASS: gcc.c-torture/compile/930621-1.c  -O1  (test for excess errors)
> >   PASS: gcc.c-torture/compile/930621-1.c  -O2  (test for excess errors)
> > ! PASS: gcc.c-torture/compile/930621-1.c  -O3 -fomit-frame-pointer  (test
> > for excess errors)
> > ! PASS: gcc.c-torture/compile/930621-1.c  -O3 -fomit-frame-pointer
> > -funroll-loops  (test for excess errors)
> > ! PASS: gcc.c-torture/compile/930621-1.c  -O3 -fomit-frame-pointer
> > -funroll-all-loops -finline-functions  (test for excess errors)
> > ! PASS: gcc.c-torture/compile/930621-1.c  -O3 -g  (test for excess
> > errors) PASS: gcc.c-torture/compile/930621-1.c  -Os  (test for excess
> > errors) PASS: gcc.c-torture/compile/930623-1.c  -O0  (test for excess
> > errors) PASS: gcc.c-torture/compile/930623-1.c  -O1  (test for excess
> > errors) ***************
> > *** 8319,8328 ****
> >   PASS: gcc.c-torture/execute/930608-1.c execution,  -O1
> >   PASS: gcc.c-torture/execute/930608-1.c compilation,  -O2
> >   PASS: gcc.c-torture/execute/930608-1.c execution,  -O2
> > ! FAIL: gcc.c-torture/execute/930608-1.c compilation,  -O3
> > -fomit-frame-pointer
> > ! UNRESOLVED: gcc.c-torture/execute/930608-1.c execution,  -O3
> > -fomit-frame-pointer
> > ! FAIL: gcc.c-torture/execute/930608-1.c compilation,  -O3 -g
> > ! UNRESOLVED: gcc.c-torture/execute/930608-1.c execution,  -O3 -g
> >   PASS: gcc.c-torture/execute/930608-1.c compilation,  -Os
> >   PASS: gcc.c-torture/execute/930608-1.c execution,  -Os
> >   PASS: gcc.c-torture/execute/930614-1.c compilation,  -O0
> > --- 8319,8328 ----
> >   PASS: gcc.c-torture/execute/930608-1.c execution,  -O1
> >   PASS: gcc.c-torture/execute/930608-1.c compilation,  -O2
> >   PASS: gcc.c-torture/execute/930608-1.c execution,  -O2
> > ! PASS: gcc.c-torture/execute/930608-1.c compilation,  -O3
> > -fomit-frame-pointer
> > ! PASS: gcc.c-torture/execute/930608-1.c execution,  -O3
> > -fomit-frame-pointer ! PASS: gcc.c-torture/execute/930608-1.c
> > compilation,  -O3 -g
> > ! PASS: gcc.c-torture/execute/930608-1.c execution,  -O3 -g
> >   PASS: gcc.c-torture/execute/930608-1.c compilation,  -Os
> >   PASS: gcc.c-torture/execute/930608-1.c execution,  -Os
> >   PASS: gcc.c-torture/execute/930614-1.c compilation,  -O0
> > ***************
> > *** 18846,18852 ****
> >   PASS: gcc.dg/loop-1.c (test for excess errors)
> >   PASS: gcc.dg/loop-2.c (test for excess errors)
> >   PASS: gcc.dg/loop-2.c execution test
> > ! FAIL: gcc.dg/loop-3.c (test for excess errors)
> >   PASS: gcc.dg/loop-4.c (test for excess errors)
> >   PASS: gcc.dg/loop-4.c execution test
> >   PASS: gcc.dg/loop-5.c (test for excess errors)
> > --- 18846,18852 ----
> >   PASS: gcc.dg/loop-1.c (test for excess errors)
> >   PASS: gcc.dg/loop-2.c (test for excess errors)
> >   PASS: gcc.dg/loop-2.c execution test
> > ! PASS: gcc.dg/loop-3.c (test for excess errors)
> >   PASS: gcc.dg/loop-4.c (test for excess errors)
> >   PASS: gcc.dg/loop-4.c execution test
> >   PASS: gcc.dg/loop-5.c (test for excess errors)
> > ***************
> > *** 24656,24666 ****
> >
> >         === gcc Summary ===
> >
> > ! # of expected passes      23105
> > ! # of unexpected failures  314
> >   # of unexpected successes 3
> >   # of expected failures        67
> > ! # of unresolved testcases 128
> >   # of untested testcases       25
> >   # of unsupported tests        962
> >   /home/bmh/gnucvs/gcc343/build/gcc/xgcc version 3.4.3
> > --- 24656,24666 ----
> >
> >         === gcc Summary ===
> >
> > ! # of expected passes      23120
> > ! # of unexpected failures  301
> >   # of unexpected successes 3
> >   # of expected failures        67
> > ! # of unresolved testcases 126
> >   # of untested testcases       25
> >   # of unsupported tests        962
> >   /home/bmh/gnucvs/gcc343/build/gcc/xgcc version 3.4.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]