mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 03:24:09 +00:00
Add a mechanism for optimisation plugins to register passes that all front ends can use without needing to be aware of the plugin (or the plugin be aware of the front end).
Before 3.0, I'd like to add a mechanism for automatically loading a set of plugins from a config file. API suggestions welcome... git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137717 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -25,6 +25,8 @@
|
||||
#include "llvm/Target/TargetLibraryInfo.h"
|
||||
#include "llvm/Transforms/Scalar.h"
|
||||
#include "llvm/Transforms/IPO.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/Support/ManagedStatic.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
@ -43,12 +45,25 @@ PassManagerBuilder::~PassManagerBuilder() {
|
||||
delete Inliner;
|
||||
}
|
||||
|
||||
/// Set of global extensions, automatically added as part of the standard set.
|
||||
static ManagedStatic<SmallVector<std::pair<PassManagerBuilder::ExtensionPointTy,
|
||||
PassManagerBuilder::ExtensionFn>, 8> > GlobalExtensions;
|
||||
|
||||
void PassManagerBuilder::addGlobalExtension(
|
||||
PassManagerBuilder::ExtensionPointTy Ty,
|
||||
PassManagerBuilder::ExtensionFn Fn) {
|
||||
GlobalExtensions->push_back(std::make_pair(Ty, Fn));
|
||||
}
|
||||
|
||||
void PassManagerBuilder::addExtension(ExtensionPointTy Ty, ExtensionFn Fn) {
|
||||
Extensions.push_back(std::make_pair(Ty, Fn));
|
||||
}
|
||||
|
||||
void PassManagerBuilder::addExtensionsToPM(ExtensionPointTy ETy,
|
||||
PassManagerBase &PM) const {
|
||||
for (unsigned i = 0, e = GlobalExtensions->size(); i != e; ++i)
|
||||
if ((*GlobalExtensions)[i].first == ETy)
|
||||
(*GlobalExtensions)[i].second(*this, PM);
|
||||
for (unsigned i = 0, e = Extensions.size(); i != e; ++i)
|
||||
if (Extensions[i].first == ETy)
|
||||
Extensions[i].second(*this, PM);
|
||||
|
Reference in New Issue
Block a user