5858
5959#include " llvm/IR/PassManager.h"
6060#include " llvm/Support/CommandLine.h"
61+ #include " llvm/Transforms/Utils/ExtraPassManager.h"
6162#include < functional>
6263
6364namespace llvm {
@@ -80,38 +81,6 @@ class TargetTransformInfo;
8081extern cl::opt<bool > EnableLoopInterleaving;
8182extern cl::opt<bool > EnableLoopVectorization;
8283
83- // / A marker to determine if extra passes after loop vectorization should be
84- // / run.
85- struct ShouldRunExtraVectorPasses
86- : public AnalysisInfoMixin<ShouldRunExtraVectorPasses> {
87- static AnalysisKey Key;
88- struct Result {
89- bool invalidate (Function &F, const PreservedAnalyses &PA,
90- FunctionAnalysisManager::Invalidator &) {
91- // Check whether the analysis has been explicitly invalidated. Otherwise,
92- // it remains preserved.
93- auto PAC = PA.getChecker <ShouldRunExtraVectorPasses>();
94- return !PAC.preservedWhenStateless ();
95- }
96- };
97-
98- Result run (Function &F, FunctionAnalysisManager &FAM) { return Result (); }
99- };
100-
101- // / A pass manager to run a set of extra function simplification passes after
102- // / vectorization, if requested. LoopVectorize caches the
103- // / ShouldRunExtraVectorPasses analysis to request extra simplifications, if
104- // / they could be beneficial.
105- struct ExtraVectorPassManager : public FunctionPassManager {
106- PreservedAnalyses run (Function &F, FunctionAnalysisManager &AM) {
107- auto PA = PreservedAnalyses::all ();
108- if (AM.getCachedResult <ShouldRunExtraVectorPasses>(F))
109- PA.intersect (FunctionPassManager::run (F, AM));
110- PA.abandon <ShouldRunExtraVectorPasses>();
111- return PA;
112- }
113- };
114-
11584struct LoopVectorizeOptions {
11685 // / If false, consider all loops for interleaving.
11786 // / If true, only loops that explicitly request interleaving are considered.
@@ -201,6 +170,13 @@ void reportVectorizationFailure(const StringRef DebugMsg,
201170 const StringRef OREMsg, const StringRef ORETag,
202171 OptimizationRemarkEmitter *ORE, Loop *TheLoop, Instruction *I = nullptr );
203172
173+ // / A marker analyss to determine if extra passes should be run after loop
174+ // / vectorization.
175+ struct ShouldRunExtraVectorPasses
176+ : public ShouldRunExtraPasses<ShouldRunExtraVectorPasses>,
177+ public AnalysisInfoMixin<ShouldRunExtraVectorPasses> {
178+ static AnalysisKey Key;
179+ };
204180} // end namespace llvm
205181
206182#endif // LLVM_TRANSFORMS_VECTORIZE_LOOPVECTORIZE_H
0 commit comments