> I think it is the combination of: > * Combine doesn't pick tuples of three to attempt to combine, so it > would never > pick mult, plus, and ashift to try together. > * Combine doesn't put an instruction back to try and combine again, > so once I get "mac" > combine doesn't try again to find "mac_s16". > > Is my understanding correct?
No. Combine will do both things. > Is there anything that can be done? What's happening is that the insn that combine makes from those three is likely algebraically the same as that insn, but looks different. Use a debugger to find out what it made when it combined the three insn.