This moves handling of alwaysinline, coroutines, matrix lowering, PGO,
and LTO-required passes into PassBuilder. Much of this is replicated
between Clang and opt. Other out-of-tree users also replicate some of
this, such as Rust [1] replicating the alwaysinline, LTO, and PGO
passes.
The LTO passes are also now run in
build(Thin)LTOPreLinkDefaultPipeline() since they are semantically
required for (Thin)LTO.
This seems to change behavior. For one, previously we were only suppressing adding the PGO Instr passes for ThinLTO. Now this will suppress adding the coroutines passes and whatever else runRegisteredEPCallbacks was doing. Also, it's now doing the same for regular LTO but it didn't seem to do any special handling in that case before. Are these changes intended?