[llvm-dev] OptBisect implementation for new pass manager

Fedor Sergeev via llvm-dev llvm-dev at lists.llvm.org
Wed Sep 26 09:53:52 PDT 2018


Greetings!

As the generic Pass Instrumentation framework for new pass manager is 
finally *in*,
I'm glad to start the discussion on implementation of -opt-bisect 
through that framework.

As it has already been discovered while porting other features (namely, 
-time-passes)
blindly copying the currently existing legacy implementation is most 
likely not a perfect
way forward. Now is a chance to take a fresh look at the overall 
approach and perhaps
do better, without the restrictions that legacy pass manager framework 
imposed on
the implementation.

Kind of a summary of what we have now:
   - There is a single OptBisect object, requested through LLVMContext
     (managed as ManagedStatic).

   - OptBisect is defined in lib/IR, but does use analyses,
     which is a known layering issue

   - Pass hierarchy provides skipModule etc helper functions

   - Individual passes opt-in to OptBisect activities by manually 
calling skip* helper functions
     whenever appropriate

With current state of new-pm PassInstrumentation potential OptBisect 
implementation
will have the following properties/issues:
   - OptBisect object that exists per compilation pipeline, managed 
similar to PassBuilder/PassManagers
     (which makes it more suitable for use in parallel compilations)

   - no more layering issues imposed by implementation since 
instrumentations by design
     can live anywhere - lib/Analysis, lib/Passes etc

   - since Codegen is still legacy-only we will have to make a joint 
implementation that
     provides a sequential passes numbering through both new-PM IR and 
legacy Codegen pipelines

   - as of right now there is no mechanism for opt-in/opt-out, so it 
needs to be designed/implemented
     Here I would like to ask:
         - what would be preferable - opt-in or opt-out?

         - with legacy implementation passes opt-in both for bisect and 
attribute-optnone support at once.
           Do we need to follow that in new-pm implementation?

Also, I would like to ask whether people see current user interface for 
opt-bisect limiting?
Do we need better controls for more sophisticated bisection?
Basically I'm looking for any ideas on improving opt-bisect user 
experience that might
affect design approaches we take on the initial implementation.

regards,
   Fedor.



More information about the llvm-dev mailing list