xref: /llvm-project/polly/unittests/ScopPassManager/PassManagerTest.cpp (revision 16879be0da18554b205f1d24de1fd1d3a4f02168)
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 Pfaffe TEST_F(ScopPassRegistry, PrintScops) {
51762ec5a3SPhilip Pfaffe   FunctionPassManager FPM;
52762ec5a3SPhilip Pfaffe   FPM.addPass(ScopAnalysisPrinterPass(errs()));
53762ec5a3SPhilip Pfaffe }
54762ec5a3SPhilip Pfaffe 
TEST_F(ScopPassRegistry,PrintScopInfo)55762ec5a3SPhilip Pfaffe TEST_F(ScopPassRegistry, PrintScopInfo) {
56762ec5a3SPhilip Pfaffe   FunctionPassManager FPM;
57762ec5a3SPhilip Pfaffe   FPM.addPass(ScopInfoPrinterPass(errs()));
58762ec5a3SPhilip Pfaffe }
59762ec5a3SPhilip Pfaffe 
TEST_F(ScopPassRegistry,PrinIslAstInfo)60762ec5a3SPhilip Pfaffe TEST_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