From: SourceForge.net <no...@so...> - 2011-09-14 13:04:57
|
Bugs item #3407632, was opened at 2011-09-11 15:36 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. >Category: None Group: None Status: Open Resolution: None >Priority: 7 Private: No Submitted By: Woody (woody1234) Assigned to: Nobody/Anonymous (nobody) >Summary: Regression: Unsigned 16-bit comparison broken Initial Comment: 1. Sample code attached. 2. Command line used: C:\SDCC\BIN\sdcc dsp_bank1.c -mz80 -c --oldralloc --std-c99 --codeseg CODE1 3. SDCC version tested: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.4 #6848 (Sep 10 2011) (MINGW32) 4. The code was compiled correct with build 6720 (as in attached dsp_bank1_6720.asm). It was correct no matter --oldalloc was used or not. And it goes wrong with build 6848 no matter --oldalloc is used or not. The bug is in sdcc.exe, put 6720 sdcc.exe into 6848 build will work correctly. By the way, the same function was compiled wrong with an earlier fixed bug report related with --max-allocs-per-node option. ---------------------------------------------------------------------- >Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:04 Message: '>' unsigned 16-bit comparison on is broken. It is incorrectly trasnformed into an and by sdcc from current trunk: For if(x > 0x4000) the same code as for if(x & ~0x4000) is emitted, which obviosly results in errors for e.g. x == 1. The problem seems to affect all ports (I tested z80 and hc08). Increasing priority, since broken code is silently generated. Philipp ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-14 00:44 Message: I downloaded build 6849, same bug existed. Then I traced a smaller piece of code which generated the bug, attached in dsp_bank1_bug2.zip. dsp_bank1_correct.asm was generated by build 6720. ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-13 04:12 Message: Build 6848 had 2 obvious problems on my software, running the dsp code got dead lock and tcp was not working any more. The code here related with load dsp code from program flash to internal memory, seemed that it was not correctly done. I will try to split the code more to figure out what exactly wrong later today. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-12 21:21 Message: What exactly is the problem with the function? Does it not terminate? Does it pass wrong values to one of the functions it calls? Does it assign wrong values to a global variable? Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-09-14 13:06:05
|
Bugs item #3407632, was opened at 2011-09-11 15:36 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 7 Private: No Submitted By: Woody (woody1234) Assigned to: Nobody/Anonymous (nobody) Summary: Regression: Unsigned 16-bit comparison broken Initial Comment: 1. Sample code attached. 2. Command line used: C:\SDCC\BIN\sdcc dsp_bank1.c -mz80 -c --oldralloc --std-c99 --codeseg CODE1 3. SDCC version tested: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.4 #6848 (Sep 10 2011) (MINGW32) 4. The code was compiled correct with build 6720 (as in attached dsp_bank1_6720.asm). It was correct no matter --oldalloc was used or not. And it goes wrong with build 6848 no matter --oldalloc is used or not. The bug is in sdcc.exe, put 6720 sdcc.exe into 6848 build will work correctly. By the way, the same function was compiled wrong with an earlier fixed bug report related with --max-allocs-per-node option. ---------------------------------------------------------------------- >Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:06 Message: Minimal example to reproduce the bug: int y; void f(unsigned int x) { if(x > 0x4000) y = 0; } ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:04 Message: '>' unsigned 16-bit comparison on is broken. It is incorrectly trasnformed into an and by sdcc from current trunk: For if(x > 0x4000) the same code as for if(x & ~0x4000) is emitted, which obviosly results in errors for e.g. x == 1. The problem seems to affect all ports (I tested z80 and hc08). Increasing priority, since broken code is silently generated. Philipp ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-14 00:44 Message: I downloaded build 6849, same bug existed. Then I traced a smaller piece of code which generated the bug, attached in dsp_bank1_bug2.zip. dsp_bank1_correct.asm was generated by build 6720. ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-13 04:12 Message: Build 6848 had 2 obvious problems on my software, running the dsp code got dead lock and tcp was not working any more. The code here related with load dsp code from program flash to internal memory, seemed that it was not correctly done. I will try to split the code more to figure out what exactly wrong later today. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-12 21:21 Message: What exactly is the problem with the function? Does it not terminate? Does it pass wrong values to one of the functions it calls? Does it assign wrong values to a global variable? Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-09-14 13:23:18
|
Bugs item #3407632, was opened at 2011-09-11 15:36 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 7 Private: No Submitted By: Woody (woody1234) Assigned to: Nobody/Anonymous (nobody) Summary: Regression: Unsigned 16-bit comparison broken Initial Comment: 1. Sample code attached. 2. Command line used: C:\SDCC\BIN\sdcc dsp_bank1.c -mz80 -c --oldralloc --std-c99 --codeseg CODE1 3. SDCC version tested: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.4 #6848 (Sep 10 2011) (MINGW32) 4. The code was compiled correct with build 6720 (as in attached dsp_bank1_6720.asm). It was correct no matter --oldalloc was used or not. And it goes wrong with build 6848 no matter --oldalloc is used or not. The bug is in sdcc.exe, put 6720 sdcc.exe into 6848 build will work correctly. By the way, the same function was compiled wrong with an earlier fixed bug report related with --max-allocs-per-node option. ---------------------------------------------------------------------- >Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:23 Message: <= seems broken, too. I suspect (from the Changelog and svn blame, did not bisect) the following commits 6723, 6724 and 6726: * src/SDCCopt.c: fixed bug #3387421: Incorrect code in revision 6723, optimize '>' and '>=' also in case when the following instruction is not IFX * support/regression/test/compare_2_n.c: added test cases for bug #3387421 and for 0x0000 and 0xffff and * src/SDCCopt.c: further enhancements & fixes of patch #2702889: added <= and >= optimizations, optimize > only if IFX * support/regression/test/compare_2_n.c: added test cases without IFX ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:06 Message: Minimal example to reproduce the bug: int y; void f(unsigned int x) { if(x > 0x4000) y = 0; } ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:04 Message: '>' unsigned 16-bit comparison on is broken. It is incorrectly trasnformed into an and by sdcc from current trunk: For if(x > 0x4000) the same code as for if(x & ~0x4000) is emitted, which obviosly results in errors for e.g. x == 1. The problem seems to affect all ports (I tested z80 and hc08). Increasing priority, since broken code is silently generated. Philipp ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-14 00:44 Message: I downloaded build 6849, same bug existed. Then I traced a smaller piece of code which generated the bug, attached in dsp_bank1_bug2.zip. dsp_bank1_correct.asm was generated by build 6720. ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-13 04:12 Message: Build 6848 had 2 obvious problems on my software, running the dsp code got dead lock and tcp was not working any more. The code here related with load dsp code from program flash to internal memory, seemed that it was not correctly done. I will try to split the code more to figure out what exactly wrong later today. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-12 21:21 Message: What exactly is the problem with the function? Does it not terminate? Does it pass wrong values to one of the functions it calls? Does it assign wrong values to a global variable? Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-09-14 14:34:21
|
Bugs item #3407632, was opened at 2011-09-11 15:36 Message generated for change (Settings changed) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 7 Private: No Submitted By: Woody (woody1234) >Assigned to: Philipp Klaus Krause (spth) Summary: Regression: Unsigned 16-bit comparison broken Initial Comment: 1. Sample code attached. 2. Command line used: C:\SDCC\BIN\sdcc dsp_bank1.c -mz80 -c --oldralloc --std-c99 --codeseg CODE1 3. SDCC version tested: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.4 #6848 (Sep 10 2011) (MINGW32) 4. The code was compiled correct with build 6720 (as in attached dsp_bank1_6720.asm). It was correct no matter --oldalloc was used or not. And it goes wrong with build 6848 no matter --oldalloc is used or not. The bug is in sdcc.exe, put 6720 sdcc.exe into 6848 build will work correctly. By the way, the same function was compiled wrong with an earlier fixed bug report related with --max-allocs-per-node option. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:23 Message: <= seems broken, too. I suspect (from the Changelog and svn blame, did not bisect) the following commits 6723, 6724 and 6726: * src/SDCCopt.c: fixed bug #3387421: Incorrect code in revision 6723, optimize '>' and '>=' also in case when the following instruction is not IFX * support/regression/test/compare_2_n.c: added test cases for bug #3387421 and for 0x0000 and 0xffff and * src/SDCCopt.c: further enhancements & fixes of patch #2702889: added <= and >= optimizations, optimize > only if IFX * support/regression/test/compare_2_n.c: added test cases without IFX ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:06 Message: Minimal example to reproduce the bug: int y; void f(unsigned int x) { if(x > 0x4000) y = 0; } ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:04 Message: '>' unsigned 16-bit comparison on is broken. It is incorrectly trasnformed into an and by sdcc from current trunk: For if(x > 0x4000) the same code as for if(x & ~0x4000) is emitted, which obviosly results in errors for e.g. x == 1. The problem seems to affect all ports (I tested z80 and hc08). Increasing priority, since broken code is silently generated. Philipp ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-14 00:44 Message: I downloaded build 6849, same bug existed. Then I traced a smaller piece of code which generated the bug, attached in dsp_bank1_bug2.zip. dsp_bank1_correct.asm was generated by build 6720. ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-13 04:12 Message: Build 6848 had 2 obvious problems on my software, running the dsp code got dead lock and tcp was not working any more. The code here related with load dsp code from program flash to internal memory, seemed that it was not correctly done. I will try to split the code more to figure out what exactly wrong later today. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-12 21:21 Message: What exactly is the problem with the function? Does it not terminate? Does it pass wrong values to one of the functions it calls? Does it assign wrong values to a global variable? Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-09-14 14:45:43
|
Bugs item #3407632, was opened at 2011-09-11 15:36 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. >Category: Icode generator Group: None >Status: Closed >Resolution: Fixed Priority: 7 Private: No Submitted By: Woody (woody1234) Assigned to: Philipp Klaus Krause (spth) Summary: Regression: Unsigned 16-bit comparison broken Initial Comment: 1. Sample code attached. 2. Command line used: C:\SDCC\BIN\sdcc dsp_bank1.c -mz80 -c --oldralloc --std-c99 --codeseg CODE1 3. SDCC version tested: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.4 #6848 (Sep 10 2011) (MINGW32) 4. The code was compiled correct with build 6720 (as in attached dsp_bank1_6720.asm). It was correct no matter --oldalloc was used or not. And it goes wrong with build 6848 no matter --oldalloc is used or not. The bug is in sdcc.exe, put 6720 sdcc.exe into 6848 build will work correctly. By the way, the same function was compiled wrong with an earlier fixed bug report related with --max-allocs-per-node option. ---------------------------------------------------------------------- >Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 16:45 Message: Fixed in revision #3407632. Philipp ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:23 Message: <= seems broken, too. I suspect (from the Changelog and svn blame, did not bisect) the following commits 6723, 6724 and 6726: * src/SDCCopt.c: fixed bug #3387421: Incorrect code in revision 6723, optimize '>' and '>=' also in case when the following instruction is not IFX * support/regression/test/compare_2_n.c: added test cases for bug #3387421 and for 0x0000 and 0xffff and * src/SDCCopt.c: further enhancements & fixes of patch #2702889: added <= and >= optimizations, optimize > only if IFX * support/regression/test/compare_2_n.c: added test cases without IFX ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:06 Message: Minimal example to reproduce the bug: int y; void f(unsigned int x) { if(x > 0x4000) y = 0; } ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:04 Message: '>' unsigned 16-bit comparison on is broken. It is incorrectly trasnformed into an and by sdcc from current trunk: For if(x > 0x4000) the same code as for if(x & ~0x4000) is emitted, which obviosly results in errors for e.g. x == 1. The problem seems to affect all ports (I tested z80 and hc08). Increasing priority, since broken code is silently generated. Philipp ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-14 00:44 Message: I downloaded build 6849, same bug existed. Then I traced a smaller piece of code which generated the bug, attached in dsp_bank1_bug2.zip. dsp_bank1_correct.asm was generated by build 6720. ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-13 04:12 Message: Build 6848 had 2 obvious problems on my software, running the dsp code got dead lock and tcp was not working any more. The code here related with load dsp code from program flash to internal memory, seemed that it was not correctly done. I will try to split the code more to figure out what exactly wrong later today. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-12 21:21 Message: What exactly is the problem with the function? Does it not terminate? Does it pass wrong values to one of the functions it calls? Does it assign wrong values to a global variable? Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-09-14 14:55:07
|
Bugs item #3407632, was opened at 2011-09-11 15:36 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Icode generator Group: None Status: Closed Resolution: Fixed Priority: 7 Private: No Submitted By: Woody (woody1234) Assigned to: Philipp Klaus Krause (spth) Summary: Regression: Unsigned 16-bit comparison broken Initial Comment: 1. Sample code attached. 2. Command line used: C:\SDCC\BIN\sdcc dsp_bank1.c -mz80 -c --oldralloc --std-c99 --codeseg CODE1 3. SDCC version tested: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.4 #6848 (Sep 10 2011) (MINGW32) 4. The code was compiled correct with build 6720 (as in attached dsp_bank1_6720.asm). It was correct no matter --oldalloc was used or not. And it goes wrong with build 6848 no matter --oldalloc is used or not. The bug is in sdcc.exe, put 6720 sdcc.exe into 6848 build will work correctly. By the way, the same function was compiled wrong with an earlier fixed bug report related with --max-allocs-per-node option. ---------------------------------------------------------------------- >Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 16:55 Message: Revision #6850, though I hope it will not need refixing in revision #3407632. Philipp ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 16:45 Message: Fixed in revision #3407632. Philipp ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:23 Message: <= seems broken, too. I suspect (from the Changelog and svn blame, did not bisect) the following commits 6723, 6724 and 6726: * src/SDCCopt.c: fixed bug #3387421: Incorrect code in revision 6723, optimize '>' and '>=' also in case when the following instruction is not IFX * support/regression/test/compare_2_n.c: added test cases for bug #3387421 and for 0x0000 and 0xffff and * src/SDCCopt.c: further enhancements & fixes of patch #2702889: added <= and >= optimizations, optimize > only if IFX * support/regression/test/compare_2_n.c: added test cases without IFX ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:06 Message: Minimal example to reproduce the bug: int y; void f(unsigned int x) { if(x > 0x4000) y = 0; } ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:04 Message: '>' unsigned 16-bit comparison on is broken. It is incorrectly trasnformed into an and by sdcc from current trunk: For if(x > 0x4000) the same code as for if(x & ~0x4000) is emitted, which obviosly results in errors for e.g. x == 1. The problem seems to affect all ports (I tested z80 and hc08). Increasing priority, since broken code is silently generated. Philipp ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-14 00:44 Message: I downloaded build 6849, same bug existed. Then I traced a smaller piece of code which generated the bug, attached in dsp_bank1_bug2.zip. dsp_bank1_correct.asm was generated by build 6720. ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-13 04:12 Message: Build 6848 had 2 obvious problems on my software, running the dsp code got dead lock and tcp was not working any more. The code here related with load dsp code from program flash to internal memory, seemed that it was not correctly done. I will try to split the code more to figure out what exactly wrong later today. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-12 21:21 Message: What exactly is the problem with the function? Does it not terminate? Does it pass wrong values to one of the functions it calls? Does it assign wrong values to a global variable? Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-09-14 22:10:22
|
Bugs item #3407632, was opened at 2011-09-11 15:36 Message generated for change (Comment added) made by maartenbrock You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Icode generator Group: None Status: Closed Resolution: Fixed Priority: 7 Private: No Submitted By: Woody (woody1234) Assigned to: Philipp Klaus Krause (spth) Summary: Regression: Unsigned 16-bit comparison broken Initial Comment: 1. Sample code attached. 2. Command line used: C:\SDCC\BIN\sdcc dsp_bank1.c -mz80 -c --oldralloc --std-c99 --codeseg CODE1 3. SDCC version tested: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.4 #6848 (Sep 10 2011) (MINGW32) 4. The code was compiled correct with build 6720 (as in attached dsp_bank1_6720.asm). It was correct no matter --oldalloc was used or not. And it goes wrong with build 6848 no matter --oldalloc is used or not. The bug is in sdcc.exe, put 6720 sdcc.exe into 6848 build will work correctly. By the way, the same function was compiled wrong with an earlier fixed bug report related with --max-allocs-per-node option. ---------------------------------------------------------------------- >Comment By: Maarten Brock (maartenbrock) Date: 2011-09-15 00:10 Message: Can you please also add a regression test case? ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 16:55 Message: Revision #6850, though I hope it will not need refixing in revision #3407632. Philipp ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 16:45 Message: Fixed in revision #3407632. Philipp ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:23 Message: <= seems broken, too. I suspect (from the Changelog and svn blame, did not bisect) the following commits 6723, 6724 and 6726: * src/SDCCopt.c: fixed bug #3387421: Incorrect code in revision 6723, optimize '>' and '>=' also in case when the following instruction is not IFX * support/regression/test/compare_2_n.c: added test cases for bug #3387421 and for 0x0000 and 0xffff and * src/SDCCopt.c: further enhancements & fixes of patch #2702889: added <= and >= optimizations, optimize > only if IFX * support/regression/test/compare_2_n.c: added test cases without IFX ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:06 Message: Minimal example to reproduce the bug: int y; void f(unsigned int x) { if(x > 0x4000) y = 0; } ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:04 Message: '>' unsigned 16-bit comparison on is broken. It is incorrectly trasnformed into an and by sdcc from current trunk: For if(x > 0x4000) the same code as for if(x & ~0x4000) is emitted, which obviosly results in errors for e.g. x == 1. The problem seems to affect all ports (I tested z80 and hc08). Increasing priority, since broken code is silently generated. Philipp ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-14 00:44 Message: I downloaded build 6849, same bug existed. Then I traced a smaller piece of code which generated the bug, attached in dsp_bank1_bug2.zip. dsp_bank1_correct.asm was generated by build 6720. ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-13 04:12 Message: Build 6848 had 2 obvious problems on my software, running the dsp code got dead lock and tcp was not working any more. The code here related with load dsp code from program flash to internal memory, seemed that it was not correctly done. I will try to split the code more to figure out what exactly wrong later today. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-12 21:21 Message: What exactly is the problem with the function? Does it not terminate? Does it pass wrong values to one of the functions it calls? Does it assign wrong values to a global variable? Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-09-14 22:11:07
|
Bugs item #3407632, was opened at 2011-09-11 15:36 Message generated for change (Comment added) made by maartenbrock You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Icode generator Group: None Status: Closed Resolution: Fixed Priority: 7 Private: No Submitted By: Woody (woody1234) Assigned to: Philipp Klaus Krause (spth) Summary: Regression: Unsigned 16-bit comparison broken Initial Comment: 1. Sample code attached. 2. Command line used: C:\SDCC\BIN\sdcc dsp_bank1.c -mz80 -c --oldralloc --std-c99 --codeseg CODE1 3. SDCC version tested: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.4 #6848 (Sep 10 2011) (MINGW32) 4. The code was compiled correct with build 6720 (as in attached dsp_bank1_6720.asm). It was correct no matter --oldalloc was used or not. And it goes wrong with build 6848 no matter --oldalloc is used or not. The bug is in sdcc.exe, put 6720 sdcc.exe into 6848 build will work correctly. By the way, the same function was compiled wrong with an earlier fixed bug report related with --max-allocs-per-node option. ---------------------------------------------------------------------- >Comment By: Maarten Brock (maartenbrock) Date: 2011-09-15 00:11 Message: Oops, sorry. I have misread the changelog. ---------------------------------------------------------------------- Comment By: Maarten Brock (maartenbrock) Date: 2011-09-15 00:10 Message: Can you please also add a regression test case? ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 16:55 Message: Revision #6850, though I hope it will not need refixing in revision #3407632. Philipp ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 16:45 Message: Fixed in revision #3407632. Philipp ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:23 Message: <= seems broken, too. I suspect (from the Changelog and svn blame, did not bisect) the following commits 6723, 6724 and 6726: * src/SDCCopt.c: fixed bug #3387421: Incorrect code in revision 6723, optimize '>' and '>=' also in case when the following instruction is not IFX * support/regression/test/compare_2_n.c: added test cases for bug #3387421 and for 0x0000 and 0xffff and * src/SDCCopt.c: further enhancements & fixes of patch #2702889: added <= and >= optimizations, optimize > only if IFX * support/regression/test/compare_2_n.c: added test cases without IFX ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:06 Message: Minimal example to reproduce the bug: int y; void f(unsigned int x) { if(x > 0x4000) y = 0; } ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-14 15:04 Message: '>' unsigned 16-bit comparison on is broken. It is incorrectly trasnformed into an and by sdcc from current trunk: For if(x > 0x4000) the same code as for if(x & ~0x4000) is emitted, which obviosly results in errors for e.g. x == 1. The problem seems to affect all ports (I tested z80 and hc08). Increasing priority, since broken code is silently generated. Philipp ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-14 00:44 Message: I downloaded build 6849, same bug existed. Then I traced a smaller piece of code which generated the bug, attached in dsp_bank1_bug2.zip. dsp_bank1_correct.asm was generated by build 6720. ---------------------------------------------------------------------- Comment By: Woody (woody1234) Date: 2011-09-13 04:12 Message: Build 6848 had 2 obvious problems on my software, running the dsp code got dead lock and tcp was not working any more. The code here related with load dsp code from program flash to internal memory, seemed that it was not correctly done. I will try to split the code more to figure out what exactly wrong later today. ---------------------------------------------------------------------- Comment By: Philipp Klaus Krause (spth) Date: 2011-09-12 21:21 Message: What exactly is the problem with the function? Does it not terminate? Does it pass wrong values to one of the functions it calls? Does it assign wrong values to a global variable? Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3407632&group_id=599 |