| 1 | #include "llvm/IR/PassManager.h" |
|---|---|
| 2 | #include "polly/CodeGen/IslAst.h" |
| 3 | #include "polly/DependenceInfo.h" |
| 4 | #include "polly/ScopPass.h" |
| 5 | #include "llvm/Analysis/AliasAnalysis.h" |
| 6 | #include "llvm/Analysis/CGSCCPassManager.h" |
| 7 | #include "llvm/Passes/PassBuilder.h" |
| 8 | #include "llvm/Transforms/Scalar/LoopPassManager.h" |
| 9 | #include "gtest/gtest.h" |
| 10 | |
| 11 | using namespace polly; |
| 12 | using namespace llvm; |
| 13 | |
| 14 | namespace { |
| 15 | class ScopPassRegistry : public ::testing::Test { |
| 16 | protected: |
| 17 | ModuleAnalysisManager MAM; |
| 18 | FunctionAnalysisManager FAM; |
| 19 | LoopAnalysisManager LAM; |
| 20 | CGSCCAnalysisManager CGAM; |
| 21 | ScopAnalysisManager SAM; |
| 22 | AAManager AM; |
| 23 | |
| 24 | public: |
| 25 | ScopPassRegistry(ScopPassRegistry &&) = delete; |
| 26 | ScopPassRegistry(const ScopPassRegistry &) = delete; |
| 27 | ScopPassRegistry &operator=(ScopPassRegistry &&) = delete; |
| 28 | ScopPassRegistry &operator=(const ScopPassRegistry &) = delete; |
| 29 | ScopPassRegistry() { |
| 30 | PassBuilder PB; |
| 31 | |
| 32 | AM = PB.buildDefaultAAPipeline(); |
| 33 | PB.registerModuleAnalyses(MAM); |
| 34 | PB.registerFunctionAnalyses(FAM); |
| 35 | PB.registerLoopAnalyses(LAM); |
| 36 | PB.registerCGSCCAnalyses(CGAM); |
| 37 | |
| 38 | FAM.registerPass(PassBuilder: [] { return ScopAnalysis(); }); |
| 39 | FAM.registerPass(PassBuilder: [] { return ScopInfoAnalysis(); }); |
| 40 | FAM.registerPass(PassBuilder: [this] { return ScopAnalysisManagerFunctionProxy(SAM); }); |
| 41 | |
| 42 | // SAM.registerPass([] { return IslAstAnalysis(); }); |
| 43 | // SAM.registerPass([] { return DependenceAnalysis(); }); |
| 44 | SAM.registerPass(PassBuilder: [this] { return FunctionAnalysisManagerScopProxy(FAM); }); |
| 45 | |
| 46 | PB.crossRegisterProxies(LAM, FAM, CGAM, MAM); |
| 47 | } |
| 48 | }; |
| 49 | |
| 50 | TEST_F(ScopPassRegistry, PrintScops) { |
| 51 | FunctionPassManager FPM; |
| 52 | FPM.addPass(Pass: ScopAnalysisPrinterPass(errs())); |
| 53 | } |
| 54 | |
| 55 | TEST_F(ScopPassRegistry, PrintScopInfo) { |
| 56 | FunctionPassManager FPM; |
| 57 | FPM.addPass(Pass: ScopInfoPrinterPass(errs())); |
| 58 | } |
| 59 | |
| 60 | TEST_F(ScopPassRegistry, PrinIslAstInfo) { |
| 61 | FunctionPassManager FPM; |
| 62 | ScopPassManager SPM; |
| 63 | // SPM.addPass(IslAstPrinterPass(errs())); |
| 64 | FPM.addPass(Pass: createFunctionToScopPassAdaptor(Pass: std::move(SPM))); |
| 65 | } |
| 66 | } // namespace |
| 67 |
