What I don't like with this approach hard coding the information about coroutines in the general purpose facility.
We discussed during lunch another place for this check, namely RefreshSCC, where if we discover a suspend point, we will set Devirt to true.
Cost of doing it in CGPass::RunOnModule is linear with the number of functions.
Cost of doing it in CGPassManager::RefreshCallGraph: is linear with the number of instructions in the module. Hence out of this two, I weakly prefer the one shown in this Diff.