* src/mcs51/peeph.def: moved rules 257.x to 253.x and re-enabled 253.b
authorMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 26 Oct 2007 18:07:27 +0000 (18:07 +0000)
committerMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 26 Oct 2007 18:07:27 +0000 (18:07 +0000)
* support/regression/tests/bug1721024.c:new, added

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4941 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/mcs51/peeph.def
support/regression/tests/bug1721024.c [new file with mode: 0644]

index 11b0b2bffb5de8ec131fd72996ed4264ac58ec6f..285bc22ae56031a59061fb143839e6a5237c7612 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-10-26 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/mcs51/peeph.def: moved rules 257.x to 253.x and re-enabled 253.b
+       * support/regression/tests/bug1721024.c:new, added
+
 2007-10-25 Maarten Brock <sourceforge.brock AT dse.nl>
 
        * support/regression/tests/bug1816470.c: new, added
index 51e251225c6122972dee40d09b6609f7d310ae41..66909c942e035907b483ddba5cb0ab5e041416dd 100644 (file)
@@ -3734,6 +3734,29 @@ replace {
        mov     r%3,a
 }
 
+// unsigned char i=8; do{ } while(--i != 0);
+// this applies if i is kept in a register
+replace {
+       dec     %1
+       cjne    %1,#0x00,%2
+} by {
+       ;       Peephole 253.a  optimized decrement with compare
+       djnz    %1,%2
+} if notVolatile(%1)
+
+// unsigned char i=8; do{ } while(--i != 0);
+// this applies if i is kept in data memory
+// must come before 256, see bug 1721024
+replace {
+       dec     %1
+       mov     a,%1
+       jnz     %2
+} by {
+       ;       Peephole 253.b  optimized decrement with compare
+       djnz    %1,%2
+} if notVolatile(%1), operandsNotRelated(%1 '@r0' '@r1')
+
+
 // applies to f.e. funptrs.c
 // saves one byte if %1 is a register or @register
 replace {
@@ -3852,29 +3875,6 @@ replace {
 } if labelRefCount(%2 0),operandsNotRelated('a' %4 %6 %8)
 
 
-// unsigned char i=8; do{ } while(--i != 0);
-// this applies if i is kept in a register
-replace {
-       dec     %1
-       cjne    %1,#0x00,%2
-} by {
-       ;       Peephole 257.a  optimized decrement with compare
-       djnz    %1,%2
-} if notVolatile(%1)
-
-//// unsigned char i=8; do{ } while(--i != 0);
-//// this applies if i is kept in data memory
-// Disabled because together with 256.c it causes bug #1721024
-//replace {
-//     dec     %1
-//     mov     a,%1
-//     jnz     %2
-//} by {
-//     ;       Peephole 257.b  optimized decrement with compare
-//     djnz    %1,%2
-//} if notVolatile(%1), operandsNotRelated(%1 '@r0' '@r1')
-
-
 // in_byte<<=1; if(in_bit) in_byte|=1;
 // helps f.e. reading data on a 3-wire (SPI) bus
 replace {
diff --git a/support/regression/tests/bug1721024.c b/support/regression/tests/bug1721024.c
new file mode 100644 (file)
index 0000000..1035aa7
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+    bug 1721024
+*/
+
+#include <testfwk.h>
+
+static unsigned char temp1;
+static unsigned char temp2;
+
+void tst(unsigned long acc)
+{
+       UNUSED(acc);
+       temp1--;
+       if (temp1==0)
+       {
+               temp2=0;
+       }
+}
+
+void
+testBug(void)
+{
+       temp1 = 1;
+       temp2 = 2;
+       tst(0xFFFFFFFF);        //make sure acc!=0
+       ASSERT(temp2 == 0);
+}