mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-14 03:45:33 +00:00
Move Pass registration into polly library
This ensures that the polly passes get properly registered both, when using polly as a loadable module and when directly linking it into clang/opt/bugpoint. llvm-svn: 204255
This commit is contained in:
parent
3a520a9373
commit
806e9fff60
@ -24,7 +24,5 @@ class PassManagerBase;
|
||||
|
||||
namespace polly {
|
||||
void initializePollyPasses(llvm::PassRegistry &Registry);
|
||||
void registerPollyPasses(llvm::PassManagerBase &PM);
|
||||
bool shouldEnablePolly();
|
||||
}
|
||||
#endif
|
||||
|
@ -27,45 +27,4 @@ public:
|
||||
}
|
||||
};
|
||||
static StaticInitializer InitializeEverything;
|
||||
|
||||
static void
|
||||
registerPollyEarlyAsPossiblePasses(const llvm::PassManagerBuilder &Builder,
|
||||
llvm::PassManagerBase &PM) {
|
||||
|
||||
if (!polly::shouldEnablePolly())
|
||||
return;
|
||||
|
||||
polly::registerPollyPasses(PM);
|
||||
}
|
||||
|
||||
/// @brief Register Polly to be available as an optimizer
|
||||
///
|
||||
/// We currently register Polly such that it runs as early as possible. This has
|
||||
/// several implications:
|
||||
///
|
||||
/// 1) We need to schedule more canonicalization passes
|
||||
///
|
||||
/// As nothing is run before Polly, it is necessary to run a set of preparing
|
||||
/// transformations before Polly to canonicalize the LLVM-IR and to allow
|
||||
/// Polly to detect and understand the code.
|
||||
///
|
||||
/// 2) LICM and LoopIdiom pass have not yet been run
|
||||
///
|
||||
/// Loop invariant code motion as well as the loop idiom recognition pass make
|
||||
/// it more difficult for Polly to transform code. LICM may introduce
|
||||
/// additional data dependences that are hard to eliminate and the loop idiom
|
||||
/// recognition pass may introduce calls to memset that we currently do not
|
||||
/// understand. By running Polly early enough (meaning before these passes) we
|
||||
/// avoid difficulties that may be introduced by these passes.
|
||||
///
|
||||
/// 3) We get the full -O3 optimization sequence after Polly
|
||||
///
|
||||
/// The LLVM-IR that is generated by Polly has been optimized on a high level,
|
||||
/// but it may be rather inefficient on the lower/scalar level. By scheduling
|
||||
/// Polly before all other passes, we have the full sequence of -O3
|
||||
/// optimizations behind us, such that inefficiencies on the low level can
|
||||
/// be optimized away.
|
||||
static llvm::RegisterStandardPasses
|
||||
RegisterPollyOptimizer(llvm::PassManagerBuilder::EP_EarlyAsPossible,
|
||||
registerPollyEarlyAsPossiblePasses);
|
||||
} // end of anonymous namespace.
|
||||
|
@ -210,7 +210,7 @@ void initializePollyPasses(PassRegistry &Registry) {
|
||||
/// Polly supports both CLooG (http://www.cloog.org) as well as the isl internal
|
||||
/// code generator. For the moment, the CLooG code generator is enabled by
|
||||
/// default.
|
||||
void registerPollyPasses(llvm::PassManagerBase &PM) {
|
||||
static void registerPollyPasses(llvm::PassManagerBase &PM) {
|
||||
registerCanonicalicationPasses(PM, SCEVCodegen);
|
||||
|
||||
PM.add(polly::createScopInfoPass());
|
||||
@ -276,7 +276,7 @@ void registerPollyPasses(llvm::PassManagerBase &PM) {
|
||||
PM.add(llvm::createCFGPrinterPass());
|
||||
}
|
||||
|
||||
bool shouldEnablePolly() {
|
||||
static bool shouldEnablePolly() {
|
||||
if (PollyOnlyPrinter || PollyPrinter || PollyOnlyViewer || PollyViewer)
|
||||
PollyTrackFailures = true;
|
||||
|
||||
@ -286,4 +286,44 @@ bool shouldEnablePolly() {
|
||||
|
||||
return PollyEnabled;
|
||||
}
|
||||
|
||||
static void
|
||||
registerPollyEarlyAsPossiblePasses(const llvm::PassManagerBuilder &Builder,
|
||||
llvm::PassManagerBase &PM) {
|
||||
if (!polly::shouldEnablePolly())
|
||||
return;
|
||||
|
||||
polly::registerPollyPasses(PM);
|
||||
}
|
||||
|
||||
/// @brief Register Polly to be available as an optimizer
|
||||
///
|
||||
/// We currently register Polly such that it runs as early as possible. This has
|
||||
/// several implications:
|
||||
///
|
||||
/// 1) We need to schedule more canonicalization passes
|
||||
///
|
||||
/// As nothing is run before Polly, it is necessary to run a set of preparing
|
||||
/// transformations before Polly to canonicalize the LLVM-IR and to allow
|
||||
/// Polly to detect and understand the code.
|
||||
///
|
||||
/// 2) LICM and LoopIdiom pass have not yet been run
|
||||
///
|
||||
/// Loop invariant code motion as well as the loop idiom recognition pass make
|
||||
/// it more difficult for Polly to transform code. LICM may introduce
|
||||
/// additional data dependences that are hard to eliminate and the loop idiom
|
||||
/// recognition pass may introduce calls to memset that we currently do not
|
||||
/// understand. By running Polly early enough (meaning before these passes) we
|
||||
/// avoid difficulties that may be introduced by these passes.
|
||||
///
|
||||
/// 3) We get the full -O3 optimization sequence after Polly
|
||||
///
|
||||
/// The LLVM-IR that is generated by Polly has been optimized on a high level,
|
||||
/// but it may be rather inefficient on the lower/scalar level. By scheduling
|
||||
/// Polly before all other passes, we have the full sequence of -O3
|
||||
/// optimizations behind us, such that inefficiencies on the low level can
|
||||
/// be optimized away.
|
||||
static llvm::RegisterStandardPasses
|
||||
RegisterPollyOptimizer(llvm::PassManagerBuilder::EP_EarlyAsPossible,
|
||||
registerPollyEarlyAsPossiblePasses);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user