mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-14 12:12:07 +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 {
|
namespace polly {
|
||||||
void initializePollyPasses(llvm::PassRegistry &Registry);
|
void initializePollyPasses(llvm::PassRegistry &Registry);
|
||||||
void registerPollyPasses(llvm::PassManagerBase &PM);
|
|
||||||
bool shouldEnablePolly();
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -27,45 +27,4 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
static StaticInitializer InitializeEverything;
|
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.
|
} // 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
|
/// 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
|
/// code generator. For the moment, the CLooG code generator is enabled by
|
||||||
/// default.
|
/// default.
|
||||||
void registerPollyPasses(llvm::PassManagerBase &PM) {
|
static void registerPollyPasses(llvm::PassManagerBase &PM) {
|
||||||
registerCanonicalicationPasses(PM, SCEVCodegen);
|
registerCanonicalicationPasses(PM, SCEVCodegen);
|
||||||
|
|
||||||
PM.add(polly::createScopInfoPass());
|
PM.add(polly::createScopInfoPass());
|
||||||
@ -276,7 +276,7 @@ void registerPollyPasses(llvm::PassManagerBase &PM) {
|
|||||||
PM.add(llvm::createCFGPrinterPass());
|
PM.add(llvm::createCFGPrinterPass());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool shouldEnablePolly() {
|
static bool shouldEnablePolly() {
|
||||||
if (PollyOnlyPrinter || PollyPrinter || PollyOnlyViewer || PollyViewer)
|
if (PollyOnlyPrinter || PollyPrinter || PollyOnlyViewer || PollyViewer)
|
||||||
PollyTrackFailures = true;
|
PollyTrackFailures = true;
|
||||||
|
|
||||||
@ -286,4 +286,44 @@ bool shouldEnablePolly() {
|
|||||||
|
|
||||||
return PollyEnabled;
|
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