[llvm-dev] How to use a custom InlineAdvisor with the new pass manager

Neil Henning via llvm-dev llvm-dev at lists.llvm.org
Wed May 19 05:27:34 PDT 2021


Hey list,

I'm currently porting our HPC# Burst compiler over from the legacy pass
manager to the new pass manager. While nearly everything went fine, I've
hit one major hiccup that I can't seem to workaround - how can we have a
custom `InlineAdvisor` for Burst without modifying tip LLVM.

At present I've managed to completely bodge this locally by getting access
to the `OwnedAdvisor` member of `InlinerPass` through very UB means (make a
class of the same layout, casteroo, assign the field). Now this works in
that I don't have codegen regressions anymore, but obviously this isn't the
solution I want to ship!

I was wondering if the list would object to us either:

   1. Making the `OwnedAdvisor` field of `InlinerPass` protected, so I
   could derive from `InlinerPass` and set the advisor.
   2. I could make the `getAdvisor` virtual, and assign it that way.
   3. Probably the 'best' fix would be to make `InlineAdvisorAnalysis`
   somehow able to take a user-provided `InlineAdvisor` - although I'd rather
   not use the static option `UseInlineAdvisor` to set this. I don't really
   know how this solution would look if I'm honest.

Thoughts from anyone? This is a blocker for us in the LLVM 13 timeframe
when we hope to enable the new pass manager as the default.

Cheers,
-Neil.

-- 
Neil Henning
Senior Software Engineer Compiler
unity.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210519/025ccd32/attachment.html>


More information about the llvm-dev mailing list