[llvm-dev] Some questions about phase ordering in OPT and LLC

serge guelton via llvm-dev llvm-dev at lists.llvm.org
Mon May 9 22:16:18 PDT 2016


> >> You can look at AddOptimizationPasses() in opt.cpp.
> > 
> > As far as I understand, the two passmanager do not interleave their
> > passes. It first runs all the function passes and below. Then all the
> > module passes. So if you specify:
> > 
> >    opt -mymodulepass0 -myfunctionpass -mymodulepass1
> > 
> > What you actually get is:
> > 
> > 1. myfunctionpass on each function
> > 2. mymodulepass0 
> > 3. mymodulepass0 
> 
> (I assume your 3 was intended to be mymodulepass1 right?)
(yes)
> So AFAIK no, you should get the order you specified on the command line, i.e. 
> 
> 1. mymodulepass0 
> 2. myfunctionpass on each function
> 3. mymodulepass1

MMMh, from opt.cpp, there's a first call to:

  if (OptLevelO1 || OptLevelO2 || OptLevelOs || OptLevelOz || OptLevelO3) {
    FPasses->doInitialization();
    for (Function &F : *M)
      FPasses->run(F);
    FPasses->doFinalization();
  }

then a few lines later, a call to:

    Passes.run(*M);

where Passes is the Module pass Manager and FPasses is the Function Pass
Manager. Each is filled in AddOptimizationPasses with different passes.
I don't see the point where the two manage interleave their passes.


More information about the llvm-dev mailing list