]> granicus.if.org Git - llvm/commitdiff
[MemorySSA] Reinstate the legacy printer and verifier.
authorChad Rosier <mcrosier@codeaurora.org>
Wed, 6 Jul 2016 21:20:47 +0000 (21:20 +0000)
committerChad Rosier <mcrosier@codeaurora.org>
Wed, 6 Jul 2016 21:20:47 +0000 (21:20 +0000)
Differential Revision: http://reviews.llvm.org/D22058

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274679 91177308-0d34-0410-b5e6-96231b3b80d8

19 files changed:
include/llvm/InitializePasses.h
include/llvm/Transforms/Utils/MemorySSA.h
lib/Transforms/Utils/MemorySSA.cpp
lib/Transforms/Utils/Utils.cpp
test/Transforms/Util/MemorySSA/atomic-clobber.ll
test/Transforms/Util/MemorySSA/cyclicphi.ll
test/Transforms/Util/MemorySSA/function-clobber.ll
test/Transforms/Util/MemorySSA/function-mem-attrs.ll
test/Transforms/Util/MemorySSA/livein.ll
test/Transforms/Util/MemorySSA/load-invariant.ll
test/Transforms/Util/MemorySSA/many-dom-backedge.ll
test/Transforms/Util/MemorySSA/many-doms.ll
test/Transforms/Util/MemorySSA/multi-edges.ll
test/Transforms/Util/MemorySSA/multiple-backedges-hal.ll
test/Transforms/Util/MemorySSA/multiple-locations.ll
test/Transforms/Util/MemorySSA/no-disconnected.ll
test/Transforms/Util/MemorySSA/optimize-use.ll
test/Transforms/Util/MemorySSA/phi-translation.ll
test/Transforms/Util/MemorySSA/volatile-clobber.ll

index 67a74e012aa73dc08901580cf986bdb408ca87bb..7ac1e5c9ead845b5f61143b5c09b3f05c6d82a57 100644 (file)
@@ -226,6 +226,7 @@ void initializeMemDepPrinterPass(PassRegistry&);
 void initializeMemDerefPrinterPass(PassRegistry&);
 void initializeMemoryDependenceWrapperPassPass(PassRegistry&);
 void initializeMemorySSAWrapperPassPass(PassRegistry&);
+void initializeMemorySSAPrinterLegacyPassPass(PassRegistry &);
 void initializeMemorySanitizerPass(PassRegistry&);
 void initializeMergeFunctionsPass(PassRegistry&);
 void initializeMergedLoadStoreMotionLegacyPassPass(PassRegistry &);
index cec36a8cc0bb96b3fbd21218693696df82bf9e82..befc34cb80fc29a58b3505e52478702aaeadfd4f 100644 (file)
@@ -626,6 +626,17 @@ private:
   unsigned NextID;
 };
 
+// This pass does eager building and then printing of MemorySSA. It is used by
+// the tests to be able to build, dump, and verify Memory SSA.
+class MemorySSAPrinterLegacyPass : public FunctionPass {
+public:
+  MemorySSAPrinterLegacyPass();
+
+  static char ID;
+  bool runOnFunction(Function &) override;
+  void getAnalysisUsage(AnalysisUsage &AU) const override;
+};
+
 /// An analysis that produces \c MemorySSA for a function.
 ///
 class MemorySSAAnalysis : public AnalysisInfoMixin<MemorySSAAnalysis> {
index d13cfe354703ad29729e563f74f757c282e0e87e..0aed1334571e406d89119cc0672a6123a863c1de 100644 (file)
@@ -54,6 +54,16 @@ INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
 INITIALIZE_PASS_END(MemorySSAWrapperPass, "memoryssa", "Memory SSA", false,
                     true)
 
+INITIALIZE_PASS_BEGIN(MemorySSAPrinterLegacyPass, "print-memoryssa",
+                      "Memory SSA Printer", false, false)
+INITIALIZE_PASS_DEPENDENCY(MemorySSAWrapperPass)
+INITIALIZE_PASS_END(MemorySSAPrinterLegacyPass, "print-memoryssa",
+                    "Memory SSA Printer", false, false)
+
+static cl::opt<bool>
+    VerifyMemorySSA("verify-memoryssa", cl::init(false), cl::Hidden,
+                    cl::desc("Verify MemorySSA in legacy printer pass."));
+
 namespace llvm {
 /// \brief An assembly annotator class to print Memory SSA information in
 /// comments.
@@ -894,6 +904,26 @@ void MemoryAccess::dump() const {
   dbgs() << "\n";
 }
 
+char MemorySSAPrinterLegacyPass::ID = 0;
+
+MemorySSAPrinterLegacyPass::MemorySSAPrinterLegacyPass() : FunctionPass(ID) {
+  initializeMemorySSAPrinterLegacyPassPass(*PassRegistry::getPassRegistry());
+}
+
+void MemorySSAPrinterLegacyPass::getAnalysisUsage(AnalysisUsage &AU) const {
+  AU.setPreservesAll();
+  AU.addRequired<MemorySSAWrapperPass>();
+  AU.addPreserved<MemorySSAWrapperPass>();
+}
+
+bool MemorySSAPrinterLegacyPass::runOnFunction(Function &F) {
+  auto &MSSA = getAnalysis<MemorySSAWrapperPass>().getMSSA();
+  MSSA.print(dbgs());
+  if (VerifyMemorySSA)
+    MSSA.verifyMemorySSA();
+  return false;
+}
+
 char MemorySSAAnalysis::PassID;
 
 MemorySSA MemorySSAAnalysis::run(Function &F, AnalysisManager<Function> &AM) {
index e363dd40da7f1d83b1e197d7fa3c2cafba3e791e..8f85f19efe38b22cbedcec50b6c0f609c59aeda4 100644 (file)
@@ -34,6 +34,7 @@ void llvm::initializeTransformUtils(PassRegistry &Registry) {
   initializeInstSimplifierPass(Registry);
   initializeMetaRenamerPass(Registry);
   initializeMemorySSAWrapperPassPass(Registry);
+  initializeMemorySSAPrinterLegacyPassPass(Registry);
 }
 
 /// LLVMInitializeTransformUtils - C binding for initializeTransformUtilsPasses.
index 84c079af3fe0dbb6bc4e4130b6fa14d5437ec823..217d5f65d787c0036b93f46b05e47e8fb7ce969b 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 ;
 ; Ensures that atomic loads count as MemoryDefs
index 357ed7d08cf96d2c1c8b1d8cb2d6d2ee7423f589..c9a5422e0a18be0ee3a62b3bf6e8e8ba673b065f 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 
 %struct.hoge = type { i32, %struct.widget }
index 869f7d7871324d7a04858dd63fa996e2d941beab..a01893a5b954f461f24ffb1c99e8cabef9c16eda 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 ;
 ; Ensuring that external functions without attributes are MemoryDefs
index e3328d9257e8ff16631f5f2837c34746191ebd17..11383771a41324b3a6be27ccf3aa92bea423909c 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 ;
 ; Test that various function attributes give us sane results.
index 704121a98332e5f11135bde4bd4688ea08bbde55..93072ea97daf4949a7b48bb2726136412ea243ce 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 define void @F(i8*) {
   br i1 true, label %left, label %right
index 669fc88599c5da95b0a9d3a91b057f2e02d07136..e387ff4c5302ce51b4840915eb13d2a89127b923 100644 (file)
@@ -1,5 +1,5 @@
 ; XFAIL: *
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>' -verify-memoryssa -disable-output < %s 2>&1 | FileCheck %s
 ;
 ; Invariant loads should be considered live on entry, because, once the
index 9db660b84bfb209974cc7040eb7f2822f74bd935..3d76f4af2d619fd0f8d2db21c1c8c72251cbd373 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 ;
 ; many-dom.ll, with an added back-edge back into the switch.
index 44f64b5126b5c306e503f48f80fea7f321746867..d2e6c6fa1e43cf27a85ea8d7a9ec12c00a5fe88e 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 ;
 ; Testing many dominators, specifically from a switch statement in C.
index 68830e6bf3b728f07705e2acfd0a755d3141f43b..c13fc016b2c77d8e04ea959bf2e7e834d6bc2cd7 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 ;
 ; Makes sure we have a sane model if both successors of some block is the same
index 554e9d144e01efdf35b2fd86c54ea4d4c9028c3a..473b3685801c91cd62aec8b194b403835e1e9bf8 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 
 ; hfinkel's case
index b70eaf200f625da9ea2553a7b31e95178a797616..9a3e87e4ab6d693f8cbbfd1aae30591d05c5870b 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 ;
 ; Checks that basicAA is doing some amount of disambiguation for us
index 7562ca21af78c0f3d246ac5b2b29bc9599d4d412..d1dcb15893adb791700f0ec2b552c9a620d83b91 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 ;
 ; This test ensures we don't end up with multiple reaching defs for a single
index 0ac07b0f0d035fdd7d01be5d3c0cdeedd0ddb265..8a8f2dd509593c78255953e88a3294be50deef6d 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 
 ; Function Attrs: ssp uwtable
index f2019fc119ff013a858461ade8585263f0c67929..30cd011a119ce9e651630fd427ac8908eac073bc 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 
 ; %ptr can't alias %local, so we should be able to optimize the use of %local to
index 2a8af317699a6e9fcd1c865ebcb30d5759aa59e9..baad8d8c2d14cac52b491edc7437f31fff39ab1a 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: opt -basicaa -memoryssa -analyze < %s 2>&1 | FileCheck %s
+; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s 2>&1 | FileCheck %s
 ; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
 ;
 ; Ensures that volatile stores/loads count as MemoryDefs