https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82683
--- Comment #6 from Wilco <wilco at gcc dot gnu.org> --- (In reply to Segher Boessenkool from comment #5) > Oh, it does show the intermediate results: > > Trying 18 -> 19: > Successfully matched this instruction: > (set (reg/f:DI 78 [ _7 ]) > (plus:DI (ashift:DI (reg:DI 83 [ _26 ]) > (const_int 2 [0x2])) > (reg/f:DI 76 [ _4 ]))) > allowing combination of insns 18 and 19 > original costs 4 + 4 = 8 > replacement cost 8 > deferring deletion of insn with uid = 18. > modifying insn i3 19: r78:DI=r83:DI<<0x2+r76:DI > REG_DEAD r83:DI > REG_DEAD r76:DI > deferring rescan insn with uid = 19. > > (How do you dump things? You forgot a -all?) Yes, but this is all it shows for the bit that goes wrong: allowing combination of insns 19, 20 and 21 original costs 8 + 20 + 4 = 32 replacement costs 28 + 4 = 32 deferring rescan insn with uid = 21. deferring deletion of insn with uid = 19. modifying insn i2 20: r83:DI=sign_extend([r83:DI*0x4+r76:DI]) REG_DEAD r76:DI deferring rescan insn with uid = 20. modifying insn i3 21: r82:SI=r83:DI#0 REG_DEAD r83:DI REG_DEAD r83:DI REG_DEAD r83:DI deferring rescan insn with uid = 21. I guess it would be good if it shows the instructions it's trying to combine in this part, because it's impossible to follow when the instructions involved have been changed already...