So let's say that I have an instruction that the combiner finds.
For instance: "mac": (set (match_operand:SI 0 "register_operand" "=r") (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "r") (match_operand:SI 2 "register_operand" "r")) (match_operand:SI 3 "register_operand" "0"))) Combine picks this up, no problem. Let's say I also have the instruction "mac_s16": (set (match_operand:SI 0 "register_operand" "=r") (ashiftrt:SI (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "r") (match_operand:SI 2 "register_operand" "r")) (match_operand:SI 3 "register_operand" "0")) (const_int 16))) Combine seems to not pick this up. 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? Is there anything that can be done? Would it be safe to run combine again after running it the first time? Or does something happen that makes this problematic? -- Why are ``tolerant'' people so intolerant of intolerant people?