https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105231
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Before combine we had (insn 22 17 78 3 (set (reg:SF 92) (mem/u/c:SF (symbol_ref/u:SI ("*.LC0") [flags 0x2]) [0 S4 A32])) "t.c":6:3 142 {*movsf_internal} (expr_list:REG_EQUAL (const_double:SF 1.8446744073709551616e+19 [0x0.8p+65]) (nil))) (insn 78 22 24 3 (set (reg:XF 99) (float_extend:XF (reg:SF 92))) 166 {*extendsfxf2_i387} (expr_list:REG_DEAD (reg:SF 92) (expr_list:REG_EQUAL (const_double:XF 1.8446744073709551616e+19 [0x0.8p+65]) (nil)))) (insn 24 78 65 3 (set (reg:XF 90) (plus:XF (reg:XF 90) (reg:XF 99))) "t.c":6:3 1070 {*fop_xf_comm_i387} (expr_list:REG_EH_REGION (const_int 1 [0x1]) (nil))) ;; succ: 9 [never] count:0 (precise) (ABNORMAL,EH) after: (note 22 17 78 3 NOTE_INSN_DELETED) (insn 78 22 24 3 (set (reg:XF 99) (float_extend:XF (mem/u/c:SF (symbol_ref/u:SI ("*.LC0") [flags 0x2]) [0 S4 A32]))) 166 {*extendsfxf2_i387} (expr_list:REG_EH_REGION (const_int 1 [0x1]) (nil))) (insn 24 78 26 3 (set (reg:XF 90) (mem/u/c:XF (symbol_ref/u:SI ("*.LC3") [flags 0x2]) [0 S12 A128])) "t.c":6:3 140 {*movxf_internal} (nil)) (insn 26 24 27 3 (set (reg:DF 83 [ _2 ]) (float_truncate:DF (reg:XF 90))) "t.c":6:3 170 {truncxfdf2} (expr_list:REG_DEAD (reg:XF 90) (expr_list:REG_EH_REGION (const_int 1 [0x1]) (nil)))) ;; succ: 9 [never] count:0 (precise) (ABNORMAL,EH) now sure where the REG_EH_REGION note on insn 78 comes from. I suppose it's from Trying 78, 17 -> 24: 78: r99:XF=float_extend([`*.LC0']) REG_EQUAL 1.8446744073709551616e+19 17: r90:XF=[`*.LC1'] REG_EQUAL -1.444529636382101633e+18 24: r90:XF=r90:XF+r99:XF REG_EH_REGION 0x1 ... Successfully matched this instruction: (set (reg:XF 99) (float_extend:XF (mem/u/c:SF (symbol_ref/u:SI ("*.LC0") [flags 0x2]) [0 S4 A32]))) Successfully matched this instruction: (set (reg:XF 90) (mem/u/c:XF (symbol_ref/u:SI ("*.LC3") [flags 0x2]) [0 S12 A128])) allowing combination of insns 17, 78 and 24 original costs 12 + 4 + 4 = 20 replacement costs 4 + 12 = 16 deferring deletion of insn with uid = 17. modifying insn i2 78: r99:XF=float_extend([`*.LC0']) REG_EH_REGION 0x1 deferring rescan insn with uid = 78. modifying insn i3 24: r90:XF=[`*.LC3'] deferring rescan insn with uid = 24. (removed failing matches) So it does look like a combine problem to me which moves the EH note to a random place. Also insn 26 still shows up from nowhere... (maybe that's CFG cleanup).