https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64233
Bug ID: 64233 Summary: [m68k coldfire] Another misoptimisation with -fschedule-insns Product: gcc Version: 4.8.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: jifl-bugzilla at jifvik dot org Created attachment 34226 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34226&action=edit Main testcase source file to reproduce problem I submitted bug 63347 about a misoptimisation on m68k coldfire with -fschedule-insns. I have found another problem with different code when compiling with gcc 4.8.3, although I'm submitting it separately as it could have an unrelated cause. This code has been reduced from an OpenSSL test case, but the files I'm attaching are self-contained. There are two files: one is h1.c which is the main one which gets misoptimised; the other is h2.c which is used to provide some empty stubs called from h1.c, assuming you want a linkable program to execute. Compile them with: m68k-elf-gcc -m528x -c -g -O1 -fschedule-insns although I expect other coldfire will fail similarly. The problem is that the return value from execute_heartbeat() is always 0, but num_failed manages to get set to 1. Looking at the disassembly, things get confused, with an 'sne' instruction but no preceding 'tst', along with stomping over a valid return value. I am also attaching an annotated partial disassembly of main. Needless to say, it would be good if someone could fix this in 4.8! Jifl