...during the combine phase.
This is critical to have the combiner reach nodes that are *introduced*
during combining. Previously these would sometimes be visited and
sometimes not be visited based on whether they happened to end up on the
worklist or not. Now we always run them through the combiner.
This fixes quite a few bad codegen test cases lurking in the suite while
also being more principled. Among these, the TLS codegeneration is
particularly exciting for programs that have this in the critical path
like TSan-instrumented binaries (although I think they engineer to use
a different TLS that is faster anyways).
However, there are also a worrying number of cases in x86 where this
causes us to combine things into a DAG that misses the expected patterns
and instruction selects to something pretty terrible. =/ The vector sign
extension patterns in particular seem quite broken by this.
Again, assistance would be appreciated from those familiar with other
targets to evaluate the nature of these changes. I haven't even really
vetted Mips or R600 for correctness. That's the primary reason for
needing pre-commit review here.
If anyone wants to take a look at the x86 regressions around sign
extension and add some patterns or fix the combines to survive this
change that would be amazingly helpful...