https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102306
Eric Botcazou <ebotcazou at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ebotcazou at gcc dot gnu.org --- Comment #3 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- Trying 6 -> 7: 6: r109:QI=[%i0:SI] REG_DEAD %i0:SI 7: r112:SI=zero_extend(r109:QI) Failed to match this instruction: (parallel [ (set (reg:SI 112 [ _1+-3 ]) (zero_extend:SI (mem/v:QI (reg:SI 24 %i0 [ a ]) [0 *a_5(D)+0 S1 A8]))) (set (reg:QI 109 [ _1 ]) (mem/v:QI (reg:SI 24 %i0 [ a ]) [0 *a_5(D)+0 S1 A8])) ]) Failed to match this instruction: (parallel [ (set (reg:SI 112 [ _1+-3 ]) (zero_extend:SI (mem/v:QI (reg:SI 24 %i0 [ a ]) [0 *a_5(D)+0 S1 A8]))) (set (reg:QI 109 [ _1 ]) (mem/v:QI (reg:SI 24 %i0 [ a ]) [0 *a_5(D)+0 S1 A8])) ]) Successfully matched this instruction: (set (reg:QI 109 [ _1 ]) (mem/v:QI (reg:SI 24 %i0 [ a ]) [0 *a_5(D)+0 S1 A8])) Successfully matched this instruction: (set (reg:SI 112 [ _1+-3 ]) (zero_extend:SI (mem/v:QI (reg:SI 24 %i0 [ a ]) [0 *a_5(D)+0 S1 A8]))) allowing combination of insns 6 and 7 original costs 4 + 4 = 8 replacement costs 4 + 4 = 8 modifying insn i2 6: r109:QI=[%i0:SI] deferring rescan insn with uid = 6. modifying insn i3 7: r112:SI=zero_extend([%i0:SI]) REG_DEAD %i0:SI deferring rescan insn with uid = 7. This should probably have been prevented in two different ways: 1) the volatile load and 2) the equal cost for a 2->2 combination.