Hi, For below simple function from newlib: static int is_option (char *argv_element, int only) { return ((argv_element == 0) || (argv_element[0] == '-') || (only && argv_element[0] == '+')); }
The expanded rtl is like: 9: NOTE_INSN_BASIC_BLOCK 2 2: r113:SI=r0:SI 3: r114:SI=r1:SI 4: NOTE_INSN_FUNCTION_BEG 11: pc={(r113:SI==0)?L39:pc} REG_BR_PROB 0x3f6 12: NOTE_INSN_BASIC_BLOCK 3 13: r111:SI=zero_extend([r113:SI]) 14: pc={(r111:SI==0x2d)?L43:pc} REG_BR_PROB 0x7c7 15: NOTE_INSN_BASIC_BLOCK 4 16: pc={(r114:SI!=0)?L20:pc} REG_BR_PROB 0x1388 22: L22: 17: NOTE_INSN_BASIC_BLOCK 5 6: r110:SI=0 20: L20: 21: NOTE_INSN_BASIC_BLOCK 6 23: pc={(r111:SI!=0x2b)?L22:pc} REG_BR_PROB 0x1f49 35: NOTE_INSN_BASIC_BLOCK 7 8: r110:SI=0x1 39: L39: 38: NOTE_INSN_BASIC_BLOCK 8 7: r110:SI=0x1 43: L43: 42: NOTE_INSN_BASIC_BLOCK 9 5: r110:SI=0x1 24: L24: 25: NOTE_INSN_BASIC_BLOCK 10 26: r112:SI=r110:SI 30: r0:SI=r112:SI 33: use r0:SI Basic blocks 8/9/10 are identical and live until pass jump2, which is after register allocation. I think these duplicated BBs do not contain additional information and should be better to be removed ASAP, because they might interfere with other passes like ifcvt. So should this issue be handled like in jump pass? Thanks in advance. BTW, The compilation command line is: arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -Os ... -- Best Regards.