This is work towards: https://github.com/llvm/llvm-project/issues/51652
This differential sets up the options and threads them through everywhere, but doesn't actually use them yet. The differential that finally makes use of them is D122061, which is the final differential in the chain that fixes bug 51652.
Note that in general, I have followed the approach in which we completely separate the "mechanism" (the how to apply a transformation) from "policy" (the when and where to apply, i.e. the heuristics). Here you sort of step into both worlds where kAuto is entering the policy world, while the kVia/kDirect are still just two mechanisms. So I would be okay with just the two mechamisms for now (although you explained offline why kAuto is there). If we keep all three, perhaps mention a bit on policy vs mechanism (in general in this file perhaps at top, and concretely here).
And yes, I know, I am deviating from my regular "terse" commenting path ;-) ;-)