https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64916
amker at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amker at gcc dot gnu.org --- Comment #2 from amker at gcc dot gnu.org --- Below is full dump of pr43920-2.c with "-mthumb -mcpu=cortex-m3 -Os" options: 10: NOTE_INSN_BASIC_BLOCK 2 2: r116:SI=r0:SI 3: r117:SI=r1:SI REG_DEAD r1:SI 4: r118:SI=r2:SI REG_DEAD r2:SI 5: NOTE_INSN_FUNCTION_BEG 12: r2:SI=0x1 13: r1:SI=0 15: r0:SI=call [`lseek'] argc:0 REG_DEAD r2:SI REG_DEAD r1:SI REG_CALL_DECL `lseek' 16: r111:SI=r0:SI REG_DEAD r0:SI 17: r2:SI=0x2 18: r1:SI=0 19: r0:SI=r116:SI REG_DEAD r116:SI 20: r0:SI=call [`lseek'] argc:0 REG_DEAD r2:SI REG_DEAD r1:SI REG_CALL_DECL `lseek' 21: r112:SI=r0:SI REG_DEAD r0:SI 22: cc:CC=cmp(r111:SI,0xffffffffffffffff) 23: pc={(cc:CC==0)?L46:pc} REG_DEAD cc:CC REG_BR_PROB 159 24: NOTE_INSN_BASIC_BLOCK 3 25: cc:CC=cmp(r112:SI,0xffffffffffffffff) 26: pc={(cc:CC==0)?L50:pc} REG_DEAD cc:CC REG_BR_PROB 159 27: NOTE_INSN_BASIC_BLOCK 4 28: NOTE_INSN_DELETED 29: {cc:CC_NOOV=cmp(r112:SI-r111:SI,0);r114:SI=r112:SI-r111:SI;} REG_DEAD r112:SI 30: pc={(cc:CC_NOOV==0)?L54:pc} REG_DEAD cc:CC_NOOV REG_BR_PROB 400 31: NOTE_INSN_BASIC_BLOCK 5 32: [r117:SI]=r111:SI REG_DEAD r117:SI REG_DEAD r111:SI 33: [r118:SI]=r114:SI REG_DEAD r118:SI REG_DEAD r114:SI 7: r110:SI=0 REG_EQUAL 0 76: pc=L34 77: barrier 46: L46: 45: NOTE_INSN_BASIC_BLOCK 6 8: r110:SI=r111:SI REG_DEAD r111:SI REG_EQUAL 0xffffffffffffffff 78: pc=L34 79: barrier 50: L50: 49: NOTE_INSN_BASIC_BLOCK 7 6: r110:SI=r112:SI REG_DEAD r112:SI REG_EQUAL 0xffffffffffffffff 80: pc=L34 81: barrier 54: L54: 53: NOTE_INSN_BASIC_BLOCK 8 9: r110:SI=0xffffffffffffffff REG_EQUAL 0xffffffffffffffff 34: L34: 35: NOTE_INSN_BASIC_BLOCK 9 40: r0:SI=r110:SI REG_DEAD r110:SI 41: use r0:SI Before r216169 (with REG_EQUAL in insn9), jumps from basic block 6/7/8 can be merged because r110 equals to -1 afterwards. But with the patch, the equal information of r110==-1 in basic block 8 is lost. As a result, jump from 8->9 can't be merged and two additional instructions are generated.