diff options
author | serge_sans_paille <sguelton@redhat.com> | 2019-06-08 17:37:47 +0200 |
---|---|---|
committer | serge-sans-paille <sguelton@redhat.com> | 2020-01-02 16:45:31 +0100 |
commit | 24ab9b537e61b3fe5e6a1019492ff6530d82a3ee (patch) | |
tree | a44734fd73e2789f7817cf49b5a30f638a1a4a63 /clang/lib/CodeGen | |
parent | 8d7ecc16291ff415da0d5bfccb6363590a1310ad (diff) | |
download | bcm5719-llvm-24ab9b537e61b3fe5e6a1019492ff6530d82a3ee.tar.gz bcm5719-llvm-24ab9b537e61b3fe5e6a1019492ff6530d82a3ee.zip |
Generalize the pass registration mechanism used by Polly to any third-party tool
There's quite a lot of references to Polly in the LLVM CMake codebase. However
the registration pattern used by Polly could be useful to other external
projects: thanks to that mechanism it would be possible to develop LLVM
extension without touching the LLVM code base.
This patch has two effects:
1. Remove all code specific to Polly in the llvm/clang codebase, replaicing it
with a generic mechanism
2. Provide a generic mechanism to register compiler extensions.
A compiler extension is similar to a pass plugin, with the notable difference
that the compiler extension can be configured to be built dynamically (like
plugins) or statically (like regular passes).
As a result, people willing to add extra passes to clang/opt can do it using a
separate code repo, but still have their pass be linked in clang/opt as built-in
passes.
Differential Revision: https://reviews.llvm.org/D61446
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/BackendUtil.cpp | 7 | ||||
-rw-r--r-- | clang/lib/CodeGen/CMakeLists.txt | 2 |
2 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 645ef0165a5..ed881f2ddf6 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -75,6 +75,10 @@ using namespace clang; using namespace llvm; +#define HANDLE_EXTENSION(Ext) \ + llvm::PassPluginLibraryInfo get##Ext##PluginInfo(); +#include "llvm/Support/Extension.def" + namespace { // Default filename used for profile generation. @@ -1076,6 +1080,9 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager( << PluginFN << toString(PassPlugin.takeError()); } } +#define HANDLE_EXTENSION(Ext) \ + get##Ext##PluginInfo().RegisterPassBuilderCallbacks(PB); +#include "llvm/Support/Extension.def" LoopAnalysisManager LAM(CodeGenOpts.DebugPassManager); FunctionAnalysisManager FAM(CodeGenOpts.DebugPassManager); diff --git a/clang/lib/CodeGen/CMakeLists.txt b/clang/lib/CodeGen/CMakeLists.txt index a3980637c59..d8b3c234a1e 100644 --- a/clang/lib/CodeGen/CMakeLists.txt +++ b/clang/lib/CodeGen/CMakeLists.txt @@ -96,6 +96,8 @@ add_clang_library(clangCodeGen TargetInfo.cpp VarBypassDetector.cpp + ENABLE_PLUGINS + DEPENDS ${codegen_deps} |