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 -------------------------------------------------------