From: frief Date: Sun, 11 Jan 2004 11:04:36 +0000 (+0000) Subject: added peepholes 177.c,d (redundant moves) and peephole 252 (array access) X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=1fcf333be9b5b4f71405a11db6d483abc271d683;p=fw%2Fsdcc added peepholes 177.c,d (redundant moves) and peephole 252 (array access) git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3110 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def index 92d240fa..9e09697e 100644 --- a/src/mcs51/peeph.def +++ b/src/mcs51/peeph.def @@ -11,7 +11,7 @@ // push %1 //} by { // ; Peephole 2 removed pop %1 push %1 (not push pop) -// mov %2,%3 +// mov %2,%3 //} // @@ -640,7 +640,7 @@ replace { clr c addc a,%1 } by { - ; Peephole 145 changed to add without carry + ; Peephole 145 changed to add without carry add a,%1 } @@ -1004,7 +1004,7 @@ replace { mov %1,%2 mov %2,%1 } by { - ; Peephole 177 removed redundant mov + ; Peephole 177.a removed redundant mov mov %1,%2 } if notVolatile %1 %2 @@ -1013,10 +1013,31 @@ replace { mov r%1,a mov a,ar%1 } by { - ; Peephole 177 removed redundant mov + ; Peephole 177.b removed redundant mov mov r%1,a } +// applies to f.e. bug-408972.c +replace { + mov %1,%2 + mov %1,%3 +} by { + ; Peephole 177.c removed redundant move + mov %1,%3 +} if notVolatile %1 %2 + +// applies to f.e. bug-408972.c +// not before peephole 177.c +replace { + mov %1,%2 + mov %3,%4 + mov %2,%1 +} by { + ; Peephole 177.d removed redundant move + mov %1,%2 + mov %3,%4 +} if notVolatile %1 %2 + replace { mov a,%1 mov b,a @@ -1195,7 +1216,7 @@ replace { movc a,@a+dptr mov %3,a mov acc,b - inc dptr + inc dptr } replace { @@ -2331,7 +2352,7 @@ replace { cjne r%1,#%2,%3 mov a,#0x01 sjmp %4 -%3: +%3: clr a %4: } by { @@ -2373,7 +2394,7 @@ replace { %7: } -// applies to f.e. j = (k!=0x1000); +// applies to f.e. j = (k!=0x1000); // with volatile idata int k; replace { cjne @r%1,#%2,%3 @@ -2400,7 +2421,7 @@ replace { cjne @r%1,#%2,%3 mov a,#0x01 sjmp %7 -%3: +%3: clr a %7: } by { @@ -3129,3 +3150,22 @@ replace { ret } if labelIsReturnOnly +// applies to shifts.c and when accessing arrays with an unsigned integer index +// saving 1 byte, 2 cycles +replace { + mov r%1,%2 + mov a,(%2 + 1) + xch a,r%1 + add a,acc + xch a,r%1 + rlc a + mov r%3,a +} by { + ; Peephole 252 optimized left shift + mov a,%2 + add a,acc + mov r%1,a + mov a,(%2 + 1) + rlc a + mov r%3,a +}