added peepholes 177.c,d (redundant moves) and peephole 252 (array access)
authorfrief <frief@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 11 Jan 2004 11:04:36 +0000 (11:04 +0000)
committerfrief <frief@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 11 Jan 2004 11:04:36 +0000 (11:04 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3110 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/mcs51/peeph.def

index 92d240fa982994a970fd219ea8cd7123736f4609..9e09697e63d9cd979ff4992cbddaa7bc01293746 100644 (file)
@@ -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
+}