[PM] Teach PreservedAnalyses to have an `allInSet` static factory
authorChandler Carruth <chandlerc@gmail.com>
Sun, 9 Jul 2017 07:23:27 +0000 (07:23 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sun, 9 Jul 2017 07:23:27 +0000 (07:23 +0000)
function template to simplify building a quick object with a set marked
as preserved.

llvm-svn: 307493

llvm/include/llvm/IR/PassManager.h
llvm/unittests/IR/PassManagerTest.cpp

index d03b7b6..ab9b1e8 100644 (file)
@@ -162,6 +162,14 @@ public:
     return PA;
   }
 
+  /// \brief Construct a preserved analyses object with a single preserved set.
+  template <typename AnalysisSetT>
+  static PreservedAnalyses allInSet() {
+    PreservedAnalyses PA;
+    PA.preserveSet<AnalysisSetT>();
+    return PA;
+  }
+
   /// Mark an analysis as preserved.
   template <typename AnalysisT> void preserve() { preserve(AnalysisT::ID()); }
 
index ad06cc4..0131bce 100644 (file)
@@ -210,6 +210,13 @@ TEST(PreservedAnalysesTest, Basic) {
     EXPECT_FALSE(PAC.preserved());
     EXPECT_FALSE(PAC.preservedSet<AllAnalysesOn<Function>>());
   }
+  auto PA5 = PreservedAnalyses::allInSet<AllAnalysesOn<Function>>();
+  {
+    auto PAC = PA5.getChecker<TestFunctionAnalysis>();
+    EXPECT_FALSE(PAC.preserved());
+    EXPECT_TRUE(PAC.preservedSet<AllAnalysesOn<Function>>());
+    EXPECT_FALSE(PAC.preservedSet<AllAnalysesOn<Module>>());
+  }
 }
 
 TEST(PreservedAnalysesTest, Preserve) {