Add proper getAnalysisUsage() implementations to each Pass.

Change-Id: I2db9201dbfe5e8d705a873212f1f69f1fb7b5c20
diff --git a/lib/Renderscript/RSEmbedInfo.cpp b/lib/Renderscript/RSEmbedInfo.cpp
index 06fe547..fdcaaaf 100644
--- a/lib/Renderscript/RSEmbedInfo.cpp
+++ b/lib/Renderscript/RSEmbedInfo.cpp
@@ -57,6 +57,10 @@
         M(nullptr) {
   }
 
+  virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
+    AU.setPreservesAll();
+  }
+
   static std::string getRSInfoString(const llvm::Module *module) {
     std::string str;
     llvm::raw_string_ostream s(str);
diff --git a/lib/Renderscript/RSForEachExpand.cpp b/lib/Renderscript/RSForEachExpand.cpp
index 6127291..4816b79 100644
--- a/lib/Renderscript/RSForEachExpand.cpp
+++ b/lib/Renderscript/RSForEachExpand.cpp
@@ -348,6 +348,11 @@
 
   }
 
+  virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
+    // This pass does not use any other analysis passes, but it does
+    // add/wrap the existing functions in the module (thus altering the CFG).
+  }
+
   /* Performs the actual optimization on a selected function. On success, the
    * Module will contain a new function of the name "<NAME>.expand" that
    * invokes <NAME>() in a loop with the appropriate parameters.
diff --git a/lib/Renderscript/RSInvokeHelperPass.cpp b/lib/Renderscript/RSInvokeHelperPass.cpp
index a0c7c39..58a1e62 100644
--- a/lib/Renderscript/RSInvokeHelperPass.cpp
+++ b/lib/Renderscript/RSInvokeHelperPass.cpp
@@ -63,6 +63,11 @@
 
     }
 
+  virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
+    // This pass does not use any other analysis passes, but it does
+    // modify the existing functions in the module (thus altering the CFG).
+  }
+
   virtual bool doInitialization(llvm::Module &M) override {
     llvm::FunctionType * SetObjType = nullptr;
     llvm::SmallVector<llvm::Type*, 4> rsBaseObj;
diff --git a/lib/Renderscript/RSScreenFunctionsPass.cpp b/lib/Renderscript/RSScreenFunctionsPass.cpp
index 9830d29..7da5e83 100644
--- a/lib/Renderscript/RSScreenFunctionsPass.cpp
+++ b/lib/Renderscript/RSScreenFunctionsPass.cpp
@@ -71,6 +71,10 @@
       std::sort(whiteList.begin(), whiteList.end());
   }
 
+  virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
+    AU.setPreservesAll();
+  }
+
   bool runOnModule(llvm::Module &M) override {
     bool failed = false;
 
diff --git a/tools/bcc_strip_attr/bcc_strip_attr.cpp b/tools/bcc_strip_attr/bcc_strip_attr.cpp
index 613ac88..521b8f8 100644
--- a/tools/bcc_strip_attr/bcc_strip_attr.cpp
+++ b/tools/bcc_strip_attr/bcc_strip_attr.cpp
@@ -51,6 +51,10 @@
     StripAttributes() : ModulePass(ID) {
     }
 
+    virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
+      AU.setPreservesAll();
+    }
+
     bool runOnFunction(Function &F) {
       // Remove any target-cpu and/or target-features attributes from each
       // Function or Function declaration.