Hi Denis,

I have had a look at your patch. It generally seems to work. Presently it 
still misses some optimization where the old cc0 back-end was smarter. The 
testsuite also reports a couple of new failures.

Yours,

Björn.

Here are a couple of cases where the old cc0 interface generated better code:

--- ./cc0/test.s        2005-03-09 21:45:49.000000000 +0100
+++ ./CC/test.s 2005-03-18 22:40:20.000000000 +0100
@@ -96,19 +96,21 @@

-       cpi r17,lo8(31)
+       cpi r17,lo8(30)
+       breq .+2
        brsh .L14


-       cpi r17,lo8(30)
+       cpi r17,lo8(29)
+       breq .L18
        brlo .L18


@@ -405,7 +415,7 @@
 /* prologue end (size=0) */
        call Hardware_SetRedLED
        lds r18,g_ucBuzzerOff
-       tst r18
+       cpi r18,lo8(0)
        brne .L82
        ldi r24,lo8(1000)
        ldi r25,hi8(1000)


        ldi r17,hi8(25)
        rjmp .L151
 .L147:
-       cp __zero_reg__,r22
-       cpc __zero_reg__,r23
-       brlt .L151
+       cp r22,__zero_reg__
+       cpc r23,__zero_reg__
+       breq .+2
+       brpl .L151



Results from the testsuite run:

Tests that now fail, but worked before:

gcc.c-torture/compile/20031220-2.c  -O1  (test for excess errors)
gcc.c-torture/compile/20031220-2.c  -O2  (test for excess errors)
gcc.c-torture/compile/20031220-2.c  -O3 -fomit-frame-pointer
-funroll-all-loops -finline-functions  (test for excess errors)
gcc.c-torture/compile/20031220-2.c  -O3 -fomit-frame-pointer -funroll-loops
(test for excess errors)
gcc.c-torture/compile/20031220-2.c  -O3 -fomit-frame-pointer  (test for
 excess errors)
gcc.c-torture/compile/20031220-2.c  -O3 -g  (test for excess errors)
gcc.c-torture/compile/20031220-2.c  -Os  (test for excess errors)
gcc.c-torture/execute/20030606-1.c execution,  -O1
gcc.c-torture/execute/20030606-1.c execution,  -O2
gcc.c-torture/execute/20030606-1.c execution,  -O3 -fomit-frame-pointer
gcc.c-torture/execute/20030606-1.c execution,  -O3 -g
gcc.c-torture/execute/20030606-1.c execution,  -Os
gcc.c-torture/execute/931004-6.c execution,  -Os
gcc.c-torture/execute/builtins/memcmp.c execution,  -O1
gcc.c-torture/execute/builtins/memcmp.c execution,  -O2
gcc.c-torture/execute/builtins/memcmp.c execution,  -O3 -fomit-frame-pointer
gcc.c-torture/execute/builtins/memcmp.c execution,  -O3 -g
gcc.c-torture/execute/builtins/memcmp.c execution,  -Os
gcc.c-torture/execute/compare-1.c execution,  -O1
gcc.c-torture/execute/compare-1.c execution,  -O2
gcc.c-torture/execute/compare-1.c execution,  -Os
gcc.c-torture/execute/divcmp-1.c execution,  -O1
gcc.c-torture/execute/divcmp-1.c execution,  -O2
gcc.c-torture/execute/divcmp-4.c execution,  -O1
gcc.c-torture/execute/divcmp-4.c execution,  -O2
gcc.c-torture/execute/int-compare.c execution,  -O1
gcc.c-torture/execute/int-compare.c execution,  -O2

New tests that FAIL:

gcc.dg/tree-ssa/ssa-ccp-3.c scan-tree-dump-times link_error 0

New tests that PASS:

gcc.dg/tree-ssa/20030731-2.c scan-tree-dump-times if  1
gcc.dg/tree-ssa/20030917-1.c scan-tree-dump-times foo .defval 1
gcc.dg/tree-ssa/20030917-3.c scan-tree-dump-times printf.*, 0 1
gcc.dg/tree-ssa/20030922-2.c scan-tree-dump-times if  2
gcc.dg/tree-ssa/20031015-1.c scan-tree-dump-times V_MAY_DEF 2
gcc.dg/tree-ssa/20031022-1.c scan-tree-dump-times entry_exit_blocks.1..pred 1
gcc.dg/tree-ssa/20040210-1.c scan-tree-dump-times if  2
gcc.dg/tree-ssa/20040216-1.c scan-tree-dump-times Deleted dead store 2
gcc.dg/tree-ssa/20040305-1.c scan-tree-dump-times if  2
gcc.dg/tree-ssa/20040305-1.c scan-tree-dump-times Replaced 1
gcc.dg/tree-ssa/20040513-1.c scan-tree-dump-times \(_Bool\) 0
gcc.dg/tree-ssa/20040513-2.c scan-tree-dump-times link_error 0
gcc.dg/tree-ssa/20040514-1.c scan-tree-dump-times if  0
gcc.dg/tree-ssa/20040518-1.c scan-tree-dump-times if  0
gcc.dg/tree-ssa/20040518-2.c scan-tree-dump-times ABS_EXPR 1
gcc.dg/tree-ssa/20040518-2.c scan-tree-dump-times straightline 1
gcc.dg/tree-ssa/20040615-1.c scan-tree-dump-times bar2 0
gcc.dg/tree-ssa/20040624-1.c scan-tree-dump-times if  1
gcc.dg/tree-ssa/20040703-1.c scan-tree-dump-times 0\.0 0
gcc.dg/tree-ssa/20040721-1.c scan-tree-dump-times = G; 0
gcc.dg/tree-ssa/20040729-1.c scan-tree-dump-times &x 0
gcc.dg/tree-ssa/20040911-1.c scan-tree-dump-not VUSE <c
gcc.dg/tree-ssa/20041002-1.c scan-tree-dump-times if 0
gcc.dg/tree-ssa/cfgcleanup-1.c scan-tree-dump-times if  0
gcc.dg/tree-ssa/copy-headers.c scan-tree-dump-times Duplicating header 1
gcc.dg/tree-ssa/pr15349.c scan-tree-dump-times PHI 1
gcc.dg/tree-ssa/pr19633.c scan-tree-dump-times GLOBAL_VAR 0
gcc.dg/tree-ssa/ssa-ccp-10.c scan-tree-dump-times strlen 0
gcc.dg/tree-ssa/ssa-ccp-1.c scan-tree-dump-times link_error 0
gcc.dg/tree-ssa/ssa-ccp-2.c scan-tree-dump-times link_error 0
gcc.dg/tree-ssa/ssa-ccp-7.c scan-tree-dump-times link_error 0
gcc.dg/tree-ssa/ssa-ccp-9.c scan-tree-dump-times link_error 0
gcc.dg/tree-ssa/ssa-dce-1.c scan-tree-dump-times if  0
gcc.dg/tree-ssa/ssa-dce-2.c scan-tree-dump-times if  0
gcc.dg/tree-ssa/ssa-dom-ccp-1.c scan-tree-dump-times Replaced.*with constant
'4' 1
gcc.dg/tree-ssa/ssa-dom-cse-1.c scan-tree-dump-times Replaced.* t  1
gcc.dg/tree-ssa/ssa-dom-thread-1.c scan-tree-dump-times Threaded 2
gcc.dg/tree-ssa/ssa-pre-1.c scan-tree-dump-times Eliminated:1 1
gcc.dg/tree-ssa/ssa-pre-2.c scan-tree-dump-times Eliminated:1 1
gcc.dg/tree-ssa/ssa-pre-3.c scan-tree-dump-times Eliminated:2 1
gcc.dg/tree-ssa/ssa-pre-4.c scan-tree-dump-times Eliminated:1 1
gcc.dg/tree-ssa/ssa-pre-5.c scan-tree-dump-times Constified:1 1
gcc.dg/tree-ssa/ssa-pre-6.c scan-tree-dump-times Eliminated:1 1
gcc.dg/tree-ssa/tailrecursion-1.c scan-tree-dump-times Eliminated tail
recursion 1
gcc.dg/tree-ssa/tailrecursion-2.c scan-tree-dump-times Eliminated tail
recursion 1
gcc.dg/tree-ssa/tailrecursion-3.c scan-tree-dump-times Eliminated tail
recursion 1
gcc.dg/tree-ssa/tailrecursion-4.c scan-tree-dump-times Eliminated tail
recursion 2

Old tests that passed, that have disappeared: (Eeek!)

gcc.c-torture/execute/20050203-1.c execution,  -Os
gcc.c-torture/execute/multi-ix.c execution,  -O2
gcc.c-torture/execute/multi-ix.c execution,  -O3 -fomit-frame-pointer
gcc.c-torture/execute/multi-ix.c execution,  -O3 -fomit-frame-pointer
-funroll-all-loops -finline-functions
gcc.c-torture/execute/multi-ix.c execution,  -O3 -fomit-frame-pointer
-funroll-loops
gcc.c-torture/execute/multi-ix.c execution,  -O3 -g

-------------------------------------------------------

Reply via email to