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

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

[avr-libc-dev] Re: Testresults for [PATCH]: Rewrite AVR backend's rtx_co


From: Andy Hutchinson
Subject: [avr-libc-dev] Re: Testresults for [PATCH]: Rewrite AVR backend's rtx_costs (take 3)
Date: Tue, 08 Feb 2005 20:50:40 -0500
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)

Regression seems to be related to bug 18251.

Block move (pattern *movmemqi_insn) is being used to put structure on stack - that needs 2 of 3 available pointer registers. Which is a challenge when frame p (r28/r29) is the other one mixed up in all of this!

I guessed that it assigned the other one as move count. So I tried a quick hack on reduced testcase by forcing counter to avoid pointer registers (constraint "l" instead of "r"). Not pretty but it worked.

Now for better fix.....


address@hidden wrote:

Hi,

I have been testing Roger Sayles patch (http://gcc.gnu.org/ml/gcc-patches/2005-01/msg02224.html) together with the MODES_TIEABLE 1 change suggested by Andy Hutchinson. Tests were run with the simulavr simulator for the atmega128 platform.

Now for the first time head 4.0.0 outperforms 3.4.3 considerably concerning the code size (e.g. 3.4.3 without -fnew-ra about 0x3A12, 3.4.3 with -fnew-ra 0x3712, head 4.0.0 with both changes and -morder1: now 0x361C).

Looking at the testsuite results with the simulator, I have observed a single regression:

Comparison of head 4.0.0 with head 4.0.0 and both, Roger Sayles patch *and* MODES_TIEABLE defined to yield 1 in avr.h:

Tests that now fail, but worked before:

gcc.dg/struct-by-value-1.c (test for excess errors)


Considering the code-size reduction, I think that Roger Sayles patch is clearly a win for the avr target. Maybe one could figure out the origin of the one regression. Despite that, I think that the considerable code size-reduction will probably motivate quite some avr-developers to test the new 4.0.0. .

Best regards,

Björn

P.S.:

This is the additional error message from the testsuite log file:

Executing on host: /home/bmh/gnucvs/head/build/gcc/xgcc -B/home/bmh/gnucvs/head/build/gcc/ /home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c -O2 -DSTACK_SIZE=400 -DNO_TRAMPOLINES -DSIGNAL_SUPPRESS -mmcu=atmega128 /home/bmh/dejagnuboards/exit.c -lm -o ./struct-by-value-1.exe (timeout = 300) /home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c: In function 'testit19': /home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c:58: error: unable to find a register to spill in class 'BASE_POINTER_REGS' /home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c:58: error: this is the insn:
(insn 77 53 57 0 (set (reg:QI 24 r24)
        (mem:QI (plus:HI (reg/f:HI 28 r28)
                (const_int 1 [0x1])) [42 S1 A8])) 9 {*movqi} (nil)
    (nil))
/home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c:58: internal compiler error: in spill_failure, at reload1.c:1872
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
compiler exited with status 1
output is:
/home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c: In function 'testit19': /home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c:58: error: unable to find a register to spill in class 'BASE_POINTER_REGS' /home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c:58: error: this is the insn:
(insn 77 53 57 0 (set (reg:QI 24 r24)
        (mem:QI (plus:HI (reg/f:HI 28 r28)
                (const_int 1 [0x1])) [42 S1 A8])) 9 {*movqi} (nil)
    (nil))
/home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c:58: internal compiler error: in spill_failure, at reload1.c:1872
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.

FAIL: gcc.dg/struct-by-value-1.c (test for excess errors)
Excess errors:
/home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c:58: error: unable to find a register to spill in class 'BASE_POINTER_REGS' /home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c:58: error: this is the insn:
(insn 77 53 57 0 (set (reg:QI 24 r24)
        (mem:QI (plus:HI (reg/f:HI 28 r28)
                (const_int 1 [0x1])) [42 S1 A8])) 9 {*movqi} (nil)
    (nil))
/home/bmh/gnucvs/head/gcc/gcc/testsuite/gcc.dg/struct-by-value-1.c:58: internal compiler error: in spill_failure, at reload1.c:1872

WARNING: gcc.dg/struct-by-value-1.c compilation failed to produce executable





reply via email to

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