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)50 TEST_F(ScopPassRegistry, PrintScops) {
51   FunctionPassManager FPM;
52   FPM.addPass(ScopAnalysisPrinterPass(errs()));
53 }
54 
TEST_F(ScopPassRegistry,PrintScopInfo)55 TEST_F(ScopPassRegistry, PrintScopInfo) {
56   FunctionPassManager FPM;
57   FPM.addPass(ScopInfoPrinterPass(errs()));
58 }
59 
TEST_F(ScopPassRegistry,PrinIslAstInfo)60 TEST_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