* src/SDCCpeeph.c (deadMove),
[fw/sdcc] / src / mcs51 / peeph.def
index 8c8f01c848e389d5a35490a78c53607d36c10694..e0ea01950bc2b68fd0e8b3ddf6cbae2cc6453525 100644 (file)
@@ -1,20 +1,3 @@
-//replace restart {
-//       pop  %1
-//       push %1
-//} by {
-//       ;       Peephole 1     removed pop %1 push %1 (not push pop)
-//}
-
-//replace restart {
-//       pop  %1
-//       mov  %2,%3
-//       push %1
-//} by {
-//       ;       Peephole 2     removed pop %1 push %1 (not push pop)
-//       mov  %2,%3
-//}
-
-//
 // added by Jean Louis VERN for
 // his shift stuff
 replace {
@@ -193,17 +176,63 @@ replace {
        movx    @dptr,a
 } if notVolatile %1
 
+// applies to f.e. lib/src/time.c (--model-large)
+replace {
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       mov     a,%1
+       movx    @dptr,a
+} by {
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       ;       Peephole 101.a  removed redundant moves
+       movx    @dptr,a
+       inc     dptr
+       movx    @dptr,a
+       inc     dptr
+       movx    @dptr,a
+} if notVolatile %1
+
+// applies to f.e. support/regression/tests/literalop.c (--model-large)
 replace {
        mov     a,%1
        movx    @dptr,a
        inc     dptr
        mov     a,%1
        movx    @dptr,a
+       inc     dptr
+       mov     a,%1
+       movx    @dptr,a
 } by {
        mov     a,%1
        movx    @dptr,a
        inc     dptr
-       ;       Peephole 101    removed redundant mov
+       ;       Peephole 101.b  removed redundant moves
+       movx    @dptr,a
+       inc     dptr
+       movx    @dptr,a
+} if notVolatile %1
+
+// applies to f.e. support/regression/tests/onebyte.c (--model-large)
+replace {
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       mov     a,%1
+       movx    @dptr,a
+} by {
+       mov     a,%1
+       movx    @dptr,a
+       inc     dptr
+       ;       Peephole 101.c  removed redundant mov
        movx    @dptr,a
 } if notVolatile %1
 
@@ -215,19 +244,19 @@ replace {
 %3:
        mov     dpl,%1
 %7:
-       mov     sp,bp
-       pop     bp
+       mov     sp,_bp
+       pop     _bp
 } by {
-       ;       Peephole 102    removed redundant mov
+       ;       Peephole 102    removed redundant mov to %1
        mov     dpl,%2
        ljmp    %3
 %4:
        mov     dpl,%5
 %3:
 %7:
-       mov     sp,bp
-       pop     bp
-} if notVolatile %1
+       mov     sp,_bp
+       pop     _bp
+} if notVolatile(%1), labelRefCount(%3 1)
 
 replace {
        mov     %1,%2
@@ -237,37 +266,38 @@ replace {
 %3:
        mov     dpl,%1
 %7:
-       mov     sp,bp
-       pop     bp
+       mov     sp,_bp
+       pop     _bp
 } by {
-       ;       Peephole 103    removed redundant mov
+       ;       Peephole 103    removed redundant mov to %1
        mov     dpl,%2
        ljmp    %3
 %4:
        mov     dpl,%5
 %3:
 %7:
-       mov     sp,bp
-       pop     bp
-}
+       mov     sp,_bp
+       pop     _bp
+} if labelRefCount(%3 1)
 
-replace {
-       mov     a,bp
-       clr     c
-       add     a,#0x01
-       mov     r%1,a
-} by {
-       ;       Peephole 104    optimized increment (acc not set to r%1, flags undefined)
-       mov     r%1,bp
-       inc     r%1
-}
+// Does not seem to be triggered anymore
+//replace {
+//     mov     a,_bp
+//     clr     c
+//     add     a,#0x01
+//     mov     r%1,a
+//} by {
+//     ;       Peephole 104    optimized increment (acc not set to r%1, flags undefined)
+//     mov     r%1,_bp
+//     inc     r%1
+//}
 
 replace {
        mov     %1,a
        mov     a,%1
 } by {
        mov     %1,a
-;      Peephole 105    removed redundant mov
+       ;       Peephole 105    removed redundant mov
 } if notVolatile %1
 
 replace {
@@ -582,11 +612,11 @@ replace {
 replace {
        push    psw
        mov     psw,%1
-       push    bp
-       mov     bp,%2
+       push    _bp
+       mov     _bp,%2
 %3:
-       mov     %2,bp
-       pop     bp
+       mov     %2,_bp
+       pop     _bp
        pop     psw
        ret
 } by {
@@ -792,7 +822,7 @@ replace {
        mov     %1,a
        mov     dpl,%2
        mov     dph,%3
-       ;       Peephole 136    removed redundant move
+       ;       Peephole 136    removed redundant mov
 } if notVolatile %1
 
 // WTF? Doesn't look sensible to me...
@@ -844,7 +874,8 @@ replace {
 } by {
        ;       Peephole 139.b  removed redundant mov
        orl     a,%2
-       mov     r%1,a }
+       mov     r%1,a
+}
 
 replace {
        mov     r%1,a
@@ -874,7 +905,7 @@ replace {
        mov     r%2,ar%1
        mov     ar%1,@r%2
 } by {
-       ;       Peephole 142    removed redundant moves
+       ;       Peephole 142    removed redundant mov
        mov     r%2,a
        mov     ar%1,@r%2
 }
@@ -1283,7 +1314,7 @@ replace {
        mov     %1,%2
        mov     %1,%3
 } by {
-       ;       Peephole 177.c  removed redundant move
+       ;       Peephole 177.c  removed redundant mov
        mov     %1,%3
 } if notVolatile %1 %2
 
@@ -1296,7 +1327,7 @@ replace restart {
 } by {
        mov     %1,%2
        mov     %3,%4
-       ;       Peephole 177.d  removed redundant move
+       ;       Peephole 177.d  removed redundant mov
 } if notVolatile(%1 %2),operandsNotRelated(%1 %2 %3)
 
 // applies to f.e. bug-607243.c
@@ -1305,7 +1336,7 @@ replace {
        mov     r%1,%2
        mov     ar%1,%3
 } by {
-       ;       peephole 177.e  removed redundant move
+       ;       peephole 177.e  removed redundant mov
        mov     ar%1,%3
 } if notVolatile %2 %3
 
@@ -1313,7 +1344,7 @@ replace {
        mov     ar%1,%2
        mov     r%1,%3
 } by {
-       ;       peephole 177.f  removed redundant move
+       ;       peephole 177.f  removed redundant mov
        mov     r%1,%3
 } if notVolatile %2
 
@@ -1971,16 +2002,17 @@ replace {
        mov     %1,%1
 } by {
        ;       Peephole 206    removed redundant mov %1,%1
-} if notVolatile
+} if notVolatile %1
 
-replace {
-       mov     a,_bp
-       add     a,#0x00
-       mov     %1,a
-} by {
-       ;       Peephole 207    removed zero add (acc not set to %1, flags undefined)
-       mov     %1,_bp
-}
+// Does not seem to be triggered anymore
+//replace {
+//     mov     a,_bp
+//     add     a,#0x00
+//     mov     %1,a
+//} by {
+//     ;       Peephole 207    removed zero add (acc not set to %1, flags undefined)
+//     mov     %1,_bp
+//}
 
 replace {
        push    acc
@@ -1991,16 +2023,17 @@ replace {
        mov     r%1,_bp
 }
 
-replace {
-       mov     a,_bp
-       add     a,#0x00
-       inc     a
-       mov     %1,a
-} by {
-       ;       Peephole 209    optimized increment (acc not set to %1, flags undefined)
-       mov     %1,_bp
-       inc     %1
-}
+// Does not seem to be triggered anymore
+//replace {
+//     mov     a,_bp
+//     add     a,#0x00
+//     inc     a
+//     mov     %1,a
+//} by {
+//     ;       Peephole 209    optimized increment (acc not set to %1, flags undefined)
+//     mov     %1,_bp
+//     inc     %1
+//}
 
 replace {
        mov     dptr,#((((%1 >> 8)) <<8) + %1)
@@ -2016,15 +2049,16 @@ replace {
        ;       Peephole 211    removed redundant push %1 pop %1
 }
 
-replace {
-       mov     a,_bp
-       add     a,#0x01
-       mov     r%1,a
-} by {
-       ;       Peephole 212    reduced add sequence to inc
-       mov     r%1,_bp
-       inc     r%1
-}
+// Does not seem to be triggered anymore
+//replace {
+//     mov     a,_bp
+//     add     a,#0x01
+//     mov     r%1,a
+//} by {
+//     ;       Peephole 212    reduced add sequence to inc
+//     mov     r%1,_bp
+//     inc     r%1
+//}
 
 // reverts peephole 159? asx8051 cannot handle, too complex?
 replace {
@@ -2050,7 +2084,7 @@ replace    {
        add     a,%1
 } by {
        mov     %1,a
-       ;       Peephole 214    reduced some extra moves
+       ;       Peephole 214.a  removed redundant mov
        add     a,%2
 } if operandsNotSame
 
@@ -2059,7 +2093,7 @@ replace {
        add     a,%2
        mov     %1,a
 } by {
-       ;       Peephole 215    removed some moves
+       ;       Peephole 214.b  removed redundant mov
        add     a,%2
        mov     %1,a
 } if operandsNotSame
@@ -2178,13 +2212,13 @@ replace {
 replace {
        mov     %1 + %2,(%2 + %1)
 } by {
-       ;       Peephole 221.a  remove redundant move
+       ;       Peephole 221.a  remove redundant mov
 } if notVolatile
 
 replace {
        mov     (%1 + %2 + %3),((%2 + %1) + %3)
 } by {
-       ;       Peephole 221.b  remove redundant move
+       ;       Peephole 221.b  remove redundant mov
 } if notVolatile
 
 replace {
@@ -2563,7 +2597,7 @@ replace {
        mov     %7,%15
        mov     %8,%16
        ;       Peephole 238.a  removed 4 redundant moves
-} if operandsNotSame8 %1 %2 %3 %4 %5 %6 %7 %8
+} if operandsNotSame8(%1 %2 %3 %4 %5 %6 %7 %8), notVolatile(%1 %2 %3 %4 %9 %10 %11 %12)
 
 // applies to device/lib/log10f.c
 replace {
@@ -2581,7 +2615,7 @@ replace {
        mov     %3,%7
        mov     %4,%8
        ;       Peephole 238.b  removed 3 redundant moves
-} if operandsNotSame7 %1 %2 %3 %4 %5 %6 %7
+} if operandsNotSame7(%1 %2 %3 %4 %5 %6 %7), notVolatile(%1 %2 %3 %5 %6 %7)
 
 // applies to f.e. device/lib/time.c
 replace {
@@ -2600,7 +2634,7 @@ replace {
        mov     %3,%7
        mov     %4,%8
        ;       Peephole 238.c  removed 2 redundant moves
-} if operandsNotSame4 %1 %2 %3 %4
+} if operandsNotSame4(%1 %2 %3 %4), notVolatile(%1 %2 %5 %6)
 
 // applies to f.e. support/regression/tests/bug-524209.c
 replace {
@@ -2616,7 +2650,7 @@ replace {
        mov     %2,%5
        mov     %3,%6
        ;       Peephole 238.d  removed 3 redundant moves
-} if operandsNotSame6 %1 %2 %3 %4 %5 %6
+} if operandsNotSame6(%1 %2 %3 %4 %5 %6), notVolatile(%1 %2 %3 %4 %5 %6)
 
 // applies to f.e. ser_ir.asm
 replace {
@@ -4557,9 +4591,23 @@ replace {
 %3:
 } if labelRefCount(%3 1), labelRefCountChange(%3 -1)
 
+
+replace restart {
+       pop     ar%1
+} by {
+       ;       Peephole 300    pop ar%1 removed
+} if deadMove %1
+
+replace {
+       mov     r%1,%2
+} by {
+       ;       Peephole 301    mov r%1,%2 removed
+} if notVolatile(%2), deadMove(%1)
+
+
 // should be one of the last peepholes
 replace{
 %1:
 } by {
-       ;       Peephole 300    removed redundant label %1
+       ;       Peephole 400    removed redundant label %1
 } if labelRefCount(%1 0)