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; ScopPassRegistry()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([] { return ScopAnalysis(); }); 39 FAM.registerPass([] { return ScopInfoAnalysis(); }); 40 FAM.registerPass([this] { return ScopAnalysisManagerFunctionProxy(SAM); }); 41 42 // SAM.registerPass([] { return IslAstAnalysis(); }); 43 // SAM.registerPass([] { return DependenceAnalysis(); }); 44 SAM.registerPass([this] { return FunctionAnalysisManagerScopProxy(FAM); }); 45 46 PB.crossRegisterProxies(LAM, FAM, CGAM, MAM); 47 } 48 }; 49 TEST_F(ScopPassRegistry,PrintScops)50TEST_F(ScopPassRegistry, PrintScops) { 51 FunctionPassManager FPM; 52 FPM.addPass(ScopAnalysisPrinterPass(errs())); 53 } 54 TEST_F(ScopPassRegistry,PrintScopInfo)55TEST_F(ScopPassRegistry, PrintScopInfo) { 56 FunctionPassManager FPM; 57 FPM.addPass(ScopInfoPrinterPass(errs())); 58 } 59 TEST_F(ScopPassRegistry,PrinIslAstInfo)60TEST_F(ScopPassRegistry, PrinIslAstInfo) { 61 FunctionPassManager FPM; 62 ScopPassManager SPM; 63 // SPM.addPass(IslAstPrinterPass(errs())); 64 FPM.addPass(createFunctionToScopPassAdaptor(std::move(SPM))); 65 } 66 } // namespace 67