Quoting Andrew Hutchinson <andrewhutchin...@cox.net>:
Why doesn't combine try matching "unsimplified" expressions when it fails? This would at least permit creating patterns based on explicit format of input RTL without the added vagaries of simplification
Actually, that was my first attempt to approach the issue, but the trouble with this is that it is ill-defined what the simplifications are you want to loose versus what necessary canonicalisations are. Ultimatively, the search space is infinite, and the patterns that combine creates are shaped by the preconceptions of the programmers who hack it on what patterns are good to match. So it makes sense to try multiple patterns for a single combination and test the cost, but we couldn't afford an exhaustive search of all combinatorial possibilities.