[NPM] Register target specific pass with opt

Hello LLVM community,

I was trying to port a target specific loop transformation pass (HexagonVectorLoopCarriedReusePass) to the New Pass Manager. However, I could not figure out a way to register this pass with opt. I can see that llvm/lib/Passes/PassRegistry.def is the registry for target independent passes. Can anyone point me to an example/API which can help me in registering this pass so that I can use it -passes option in opt?

Thanks

Ankit

Hi Ankit,

Testing target specific passes using opt+NPM is not currently supported. The work is still work-in-progress. What is the motivation for doing this?

- Yuanfang

Hi Chen,

Thanks for the quick response.

Halide which is a DSL for image processing has moved to the New Pass Manager. Earlier we were using TargetMachine's adjustPassManager to run HexagonVectorLoopCarriedReusePass. Now we want to be able to run this pass with the New Pass Manager.

Regards
Ankit

Re-reply, to llvm-dev this time.

The legacy pass manager allowed TargetMachine to inject passes at various extension points (and there are actual uses of that). The NPM does support such extensions, but at the moment there is no way for a TM to add passes. Something like TargetMachine::registerPassBuilderCallbacks(PassBuilder&) would allow that.

There is currently not yet an equivalent for adjustPassManager() in NPM, see https://bugs.llvm.org/show_bug.cgi?id=47244. That will have to be worked out before the NPM flip.