[llvm-dev] [RFC] Generalize out-of-tree pass support

Serge Guelton via llvm-dev llvm-dev at lists.llvm.org
Tue Jan 14 02:18:38 PST 2020

Hi Folks,

some update on the « compiler extension » topic.
The main patch landed last week and received a bunch of update meanwhile.
It's almost complete, so let me describe it some more,
based on a thread [0] on cfe-commits at lists.llvm.org.

# What's this patch all about?

Proposing a common infrastructure to write LLVM pass plugins linked
dynamically (a.ka. MODULE in the cmake terminology) or statically
(just a STATIC library) and have them work gracefully within
Polly already had several hooks to provide this behavior. At such, this
patch is a generalization of the approach.

# What problem does it solve?

Dynamically loaded plugins are an easy way to jump into LLVM, but they are
not natural to use for the end-users: no one wants to type

    clang -Xclang -load -Xclang /clang/install/path/.../MyPlugin.so
my_source.c on a regular basis.

The next step is generally  to write a regular LLVM pass, register it in
clang / opt pipelines, which involves a few modifications to the original
With this patch, one can write a top-level project, say StuffyDoll, that's
separated from llvm-project source, and use the cmake


to have it being compiled alongside LLVM, then use the


option to switch between the module or static build. When using the static
build, the appropriate clang/opt/bugpoint hooks are automatically installed,
which means *no* modification outside of StuffyDoll.

# How should I use it?

Probably through reading the in-tree example [1], after reading the
documentation [2] :-)

# Is it working for all platforms?

It's 100% functional on Linux, waiting for https://reviews.llvm.org/D72493
to be accepted[3] to fully work on OSX, and it only works for static builds
on Windows.

[1] https://github.com/llvm/llvm-project/tree/master/llvm/examples/Bye
[2] http://llvm.org/docs/WritingAnLLVMPass.html#building-pass-plugins
[3] If you've read so far, you might be interested enough to participate in
the review ;-)

On Fri, Sep 20, 2019 at 3:56 PM Serge Guelton <sguelton at redhat.com> wrote:

> Hi folks,
> I've been working for a few months on a proposal to make it easier to
> develop
> out-of-tree passes, and have them linked either statically or dynamically,
> within LLVM. This includes automatic integration within clang, opt and
> bugpoint.
> The goal is to lower the bar for people who develop out-of tree passes:
> they can
> maintain their code base in a third-party repo, pick it at config time and
> build
> it statically or dynamically.
> As a side-effect, this provides a generalization of the polly-specific code
> that spread at several locations of the code base (and removes most of the
> explicit mention of Polly itself, without removing the functionality,
> obviously).
> Both legacy and new pass managers are supported.
> From the review's documentation:
>     LLVM provides a mechanism to automatically register pass plugins within
>     ``clang``, ``opt`` and ``bugpoint``. One first needs to create an
> independent
>     project and add it to either ``tools/`` or, using the MonoRepo layout,
> at the
>     root of the repo alongside other projects. This project must contain
> the
>     following minimal ``CMakeLists.txt``:
>     .. code-block:: cmake
>         add_llvm_pass_plugin(Name source0.cpp)
>     The pass must provide two entry points for the new pass manager, one
> for static
>     registration and one for dynamically loaded plugins:
>     - ``llvm::PassPluginLibraryInfo get##Name##PluginInfo();``
>     - ``extern "C" ::llvm::PassPluginLibraryInfo llvmGetPassPluginInfo()
>     Pass plugins are compiled and link dynamically by default, but it's
>     possible to set the following variables to change this behavior:
>     - ``LLVM_${NAME}_LINK_INTO_TOOLS``, when sets to ``ON``, turns the
> project into
>       a statically linked extension
> The review also contains an example of pass plugin,
> `llvm/examples/Bye/Bye.cpp`.
> The associated review is available at https://reviews.llvm.org/D61446,
> Michael
> Kruse has already done a lot of review, I think it's time to gather more
> feedback, so if you're interested... jump in!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200114/1e53a1de/attachment.html>

More information about the llvm-dev mailing list