1*16879be0SChandler Carruth #include "llvm/IR/PassManager.h" 2762ec5a3SPhilip Pfaffe #include "polly/CodeGen/IslAst.h" 3762ec5a3SPhilip Pfaffe #include "polly/DependenceInfo.h" 4762ec5a3SPhilip Pfaffe #include "polly/ScopPass.h" 5762ec5a3SPhilip Pfaffe #include "llvm/Analysis/AliasAnalysis.h" 6762ec5a3SPhilip Pfaffe #include "llvm/Analysis/CGSCCPassManager.h" 7762ec5a3SPhilip Pfaffe #include "llvm/Passes/PassBuilder.h" 8762ec5a3SPhilip Pfaffe #include "llvm/Transforms/Scalar/LoopPassManager.h" 9762ec5a3SPhilip Pfaffe #include "gtest/gtest.h" 10762ec5a3SPhilip Pfaffe 11762ec5a3SPhilip Pfaffe using namespace polly; 12762ec5a3SPhilip Pfaffe using namespace llvm; 13762ec5a3SPhilip Pfaffe 14762ec5a3SPhilip Pfaffe namespace { 15762ec5a3SPhilip Pfaffe class ScopPassRegistry : public ::testing::Test { 16762ec5a3SPhilip Pfaffe protected: 17762ec5a3SPhilip Pfaffe ModuleAnalysisManager MAM; 18762ec5a3SPhilip Pfaffe FunctionAnalysisManager FAM; 19762ec5a3SPhilip Pfaffe LoopAnalysisManager LAM; 20762ec5a3SPhilip Pfaffe CGSCCAnalysisManager CGAM; 21762ec5a3SPhilip Pfaffe ScopAnalysisManager SAM; 22762ec5a3SPhilip Pfaffe AAManager AM; 23762ec5a3SPhilip Pfaffe 24762ec5a3SPhilip Pfaffe public: 25762ec5a3SPhilip Pfaffe ScopPassRegistry(ScopPassRegistry &&) = delete; 26762ec5a3SPhilip Pfaffe ScopPassRegistry(const ScopPassRegistry &) = delete; 27762ec5a3SPhilip Pfaffe ScopPassRegistry &operator=(ScopPassRegistry &&) = delete; 28762ec5a3SPhilip Pfaffe ScopPassRegistry &operator=(const ScopPassRegistry &) = delete; ScopPassRegistry()29762ec5a3SPhilip Pfaffe ScopPassRegistry() { 30762ec5a3SPhilip Pfaffe PassBuilder PB; 31762ec5a3SPhilip Pfaffe 32762ec5a3SPhilip Pfaffe AM = PB.buildDefaultAAPipeline(); 33762ec5a3SPhilip Pfaffe PB.registerModuleAnalyses(MAM); 34762ec5a3SPhilip Pfaffe PB.registerFunctionAnalyses(FAM); 35762ec5a3SPhilip Pfaffe PB.registerLoopAnalyses(LAM); 36762ec5a3SPhilip Pfaffe PB.registerCGSCCAnalyses(CGAM); 37762ec5a3SPhilip Pfaffe 38762ec5a3SPhilip Pfaffe FAM.registerPass([] { return ScopAnalysis(); }); 39762ec5a3SPhilip Pfaffe FAM.registerPass([] { return ScopInfoAnalysis(); }); 40762ec5a3SPhilip Pfaffe FAM.registerPass([this] { return ScopAnalysisManagerFunctionProxy(SAM); }); 41762ec5a3SPhilip Pfaffe 42762ec5a3SPhilip Pfaffe // SAM.registerPass([] { return IslAstAnalysis(); }); 43762ec5a3SPhilip Pfaffe // SAM.registerPass([] { return DependenceAnalysis(); }); 44762ec5a3SPhilip Pfaffe SAM.registerPass([this] { return FunctionAnalysisManagerScopProxy(FAM); }); 45762ec5a3SPhilip Pfaffe 46762ec5a3SPhilip Pfaffe PB.crossRegisterProxies(LAM, FAM, CGAM, MAM); 47762ec5a3SPhilip Pfaffe } 48762ec5a3SPhilip Pfaffe }; 49762ec5a3SPhilip Pfaffe TEST_F(ScopPassRegistry,PrintScops)50762ec5a3SPhilip PfaffeTEST_F(ScopPassRegistry, PrintScops) { 51762ec5a3SPhilip Pfaffe FunctionPassManager FPM; 52762ec5a3SPhilip Pfaffe FPM.addPass(ScopAnalysisPrinterPass(errs())); 53762ec5a3SPhilip Pfaffe } 54762ec5a3SPhilip Pfaffe TEST_F(ScopPassRegistry,PrintScopInfo)55762ec5a3SPhilip PfaffeTEST_F(ScopPassRegistry, PrintScopInfo) { 56762ec5a3SPhilip Pfaffe FunctionPassManager FPM; 57762ec5a3SPhilip Pfaffe FPM.addPass(ScopInfoPrinterPass(errs())); 58762ec5a3SPhilip Pfaffe } 59762ec5a3SPhilip Pfaffe TEST_F(ScopPassRegistry,PrinIslAstInfo)60762ec5a3SPhilip PfaffeTEST_F(ScopPassRegistry, PrinIslAstInfo) { 61762ec5a3SPhilip Pfaffe FunctionPassManager FPM; 62762ec5a3SPhilip Pfaffe ScopPassManager SPM; 63762ec5a3SPhilip Pfaffe // SPM.addPass(IslAstPrinterPass(errs())); 64762ec5a3SPhilip Pfaffe FPM.addPass(createFunctionToScopPassAdaptor(std::move(SPM))); 65762ec5a3SPhilip Pfaffe } 66762ec5a3SPhilip Pfaffe } // namespace 67