How inline helps devirtualization in ModuleInlinerWrapperPass?

Hello all:
I’m interested in inline and devirtualization implementation in llvm. Then I read code below:,ModuleAnalysisManager%20%26MAM)
I found code below:

if (MaxDevirtIterations == 0)
        createDevirtSCCRepeatedPass(std::move(PM), MaxDevirtIterations)));

In ModuleInlinerWrapperPass constructor, I found PM only add InlinerPass. So in DevirtSCCRepeatedPass::run function,during each interation, we first run inline pass, then do devirtualization? The code location is below:

Do we need some alias analysis or other pass between inline and devirtualization which can help us do devirtualization better?
Thank you very much!

Take a look at PassBuilder::buildInlinerPipeline and how it sets up the module inliner (L707 onward)