<div dir="ltr"><div><div>Hi,<br><br></div>Should AlignmentFromAssumptions.cpp be modified too to preserve AliasAnalysis (and in particular GlobalsAA). I'm using opt with "-std-link-opts" and see that this pass is not preserving GlobalsAA and hence LICM is under-performing. <br><br></div>Thanks,<br></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr">  - Vaivaswatha<br></div></div></div>
<br><div class="gmail_quote">On Thu, Sep 10, 2015 at 3:52 PM, James Molloy via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: jamesm<br>
Date: Thu Sep 10 05:22:12 2015<br>
New Revision: 247263<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=247263&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=247263&view=rev</a><br>
Log:<br>
Add GlobalsAA as preserved to a bunch of transforms<br>
<br>
GlobalsAA must by definition be preserved in function passes, but the passmanager doesn't know that. Make each pass explicitly preserve GlobalsAA.<br>
<br>
Modified:<br>
    llvm/trunk/lib/Transforms/Scalar/ADCE.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/BDCE.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/SCCP.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/SROA.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp<br>
    llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/ADCE.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ADCE.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ADCE.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/ADCE.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/ADCE.cpp Thu Sep 10 05:22:12 2015<br>
@@ -19,6 +19,7 @@<br>
 #include "llvm/ADT/SmallPtrSet.h"<br>
 #include "llvm/ADT/SmallVector.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/IR/BasicBlock.h"<br>
 #include "llvm/IR/CFG.h"<br>
 #include "llvm/IR/InstIterator.h"<br>
@@ -42,6 +43,7 @@ struct ADCE : public FunctionPass {<br>
<br>
   void getAnalysisUsage(AnalysisUsage& AU) const override {<br>
     AU.setPreservesCFG();<br>
+    AU.addPreserved<GlobalsAAWrapperPass>();<br>
   }<br>
 };<br>
 }<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/BDCE.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/BDCE.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/BDCE.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/BDCE.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/BDCE.cpp Thu Sep 10 05:22:12 2015<br>
@@ -17,6 +17,7 @@<br>
 #include "llvm/Transforms/Scalar.h"<br>
 #include "llvm/ADT/SmallVector.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/DemandedBits.h"<br>
 #include "llvm/IR/CFG.h"<br>
 #include "llvm/IR/InstIterator.h"<br>
@@ -45,6 +46,7 @@ struct BDCE : public FunctionPass {<br>
   void getAnalysisUsage(AnalysisUsage& AU) const override {<br>
     AU.setPreservesCFG();<br>
     AU.addRequired<DemandedBits>();<br>
+    AU.addPreserved<GlobalsAAWrapperPass>();<br>
   }<br>
 };<br>
 }<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp Thu Sep 10 05:22:12 2015<br>
@@ -13,6 +13,7 @@<br>
<br>
 #include "llvm/Transforms/Scalar.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/InstructionSimplify.h"<br>
 #include "llvm/Analysis/LazyValueInfo.h"<br>
 #include "llvm/IR/CFG.h"<br>
@@ -54,6 +55,7 @@ namespace {<br>
<br>
     void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
       AU.addRequired<LazyValueInfo>();<br>
+      AU.addPreserved<GlobalsAAWrapperPass>();<br>
     }<br>
   };<br>
 }<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp Thu Sep 10 05:22:12 2015<br>
@@ -16,6 +16,7 @@<br>
 #include "llvm/ADT/Hashing.h"<br>
 #include "llvm/ADT/ScopedHashTable.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/AssumptionCache.h"<br>
 #include "llvm/Analysis/InstructionSimplify.h"<br>
 #include "llvm/Analysis/TargetLibraryInfo.h"<br>
@@ -772,6 +773,7 @@ public:<br>
     AU.addRequired<DominatorTreeWrapperPass>();<br>
     AU.addRequired<TargetLibraryInfoWrapperPass>();<br>
     AU.addRequired<TargetTransformInfoWrapperPass>();<br>
+    AU.addPreserved<GlobalsAAWrapperPass>();<br>
     AU.setPreservesCFG();<br>
   }<br>
 };<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp Thu Sep 10 05:22:12 2015<br>
@@ -28,6 +28,7 @@<br>
 #include "llvm/ADT/DenseMap.h"<br>
 #include "llvm/ADT/SmallVector.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/LoopInfo.h"<br>
 #include "llvm/Analysis/LoopPass.h"<br>
 #include "llvm/Analysis/ScalarEvolutionExpander.h"<br>
@@ -112,6 +113,7 @@ namespace {<br>
       AU.addRequired<ScalarEvolutionWrapperPass>();<br>
       AU.addRequiredID(LoopSimplifyID);<br>
       AU.addRequiredID(LCSSAID);<br>
+      AU.addPreserved<GlobalsAAWrapperPass>();<br>
       AU.addPreserved<ScalarEvolutionWrapperPass>();<br>
       AU.addPreservedID(LoopSimplifyID);<br>
       AU.addPreservedID(LCSSAID);<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Thu Sep 10 05:22:12 2015<br>
@@ -18,6 +18,7 @@<br>
 #include "llvm/ADT/SmallPtrSet.h"<br>
 #include "llvm/ADT/SmallSet.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/CFG.h"<br>
 #include "llvm/Analysis/ConstantFolding.h"<br>
 #include "llvm/Analysis/InstructionSimplify.h"<br>
@@ -114,6 +115,7 @@ namespace {<br>
     void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
       AU.addRequired<LazyValueInfo>();<br>
       AU.addPreserved<LazyValueInfo>();<br>
+      AU.addPreserved<GlobalsAAWrapperPass>();<br>
       AU.addRequired<TargetLibraryInfoWrapperPass>();<br>
     }<br>
<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/LoopDeletion.cpp Thu Sep 10 05:22:12 2015<br>
@@ -17,6 +17,7 @@<br>
 #include "llvm/Transforms/Scalar.h"<br>
 #include "llvm/ADT/SmallVector.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/LoopPass.h"<br>
 #include "llvm/Analysis/ScalarEvolution.h"<br>
 #include "llvm/IR/Dominators.h"<br>
@@ -47,6 +48,7 @@ namespace {<br>
       AU.addPreserved<ScalarEvolutionWrapperPass>();<br>
       AU.addPreserved<DominatorTreeWrapperPass>();<br>
       AU.addPreserved<LoopInfoWrapperPass>();<br>
+      AU.addPreserved<GlobalsAAWrapperPass>();<br>
       AU.addPreservedID(LoopSimplifyID);<br>
       AU.addPreservedID(LCSSAID);<br>
     }<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/LoopUnrollPass.cpp Thu Sep 10 05:22:12 2015<br>
@@ -14,6 +14,7 @@<br>
<br>
 #include "llvm/Transforms/Scalar.h"<br>
 #include "llvm/ADT/SetVector.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/AssumptionCache.h"<br>
 #include "llvm/Analysis/CodeMetrics.h"<br>
 #include "llvm/Analysis/InstructionSimplify.h"<br>
@@ -152,6 +153,7 @@ namespace {<br>
       // loop will receive invalid dom info.<br>
       // For now, recreate dom info, if loop is unrolled.<br>
       AU.addPreserved<DominatorTreeWrapperPass>();<br>
+      AU.addPreserved<GlobalsAAWrapperPass>();<br>
     }<br>
<br>
     // Fill in the UnrollingPreferences parameter with values from the<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp Thu Sep 10 05:22:12 2015<br>
@@ -30,6 +30,7 @@<br>
 #include "llvm/ADT/STLExtras.h"<br>
 #include "llvm/ADT/SmallPtrSet.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/AssumptionCache.h"<br>
 #include "llvm/Analysis/CodeMetrics.h"<br>
 #include "llvm/Analysis/InstructionSimplify.h"<br>
@@ -195,6 +196,7 @@ namespace {<br>
       AU.addPreserved<DominatorTreeWrapperPass>();<br>
       AU.addPreserved<ScalarEvolutionWrapperPass>();<br>
       AU.addRequired<TargetTransformInfoWrapperPass>();<br>
+      AU.addPreserved<GlobalsAAWrapperPass>();<br>
     }<br>
<br>
   private:<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp Thu Sep 10 05:22:12 2015<br>
@@ -26,6 +26,7 @@<br>
 #include "llvm/ADT/STLExtras.h"<br>
 #include "llvm/ADT/SetVector.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/ValueTracking.h"<br>
 #include "llvm/IR/CFG.h"<br>
 #include "llvm/IR/Constants.h"<br>
@@ -173,6 +174,7 @@ namespace {<br>
<br>
     void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
       AU.setPreservesCFG();<br>
+      AU.addPreserved<GlobalsAAWrapperPass>();<br>
     }<br>
   private:<br>
     void BuildRankMap(Function &F);<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Thu Sep 10 05:22:12 2015<br>
@@ -24,6 +24,7 @@<br>
 #include "llvm/ADT/SmallPtrSet.h"<br>
 #include "llvm/ADT/SmallVector.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/ConstantFolding.h"<br>
 #include "llvm/Analysis/TargetLibraryInfo.h"<br>
 #include "llvm/IR/CallSite.h"<br>
@@ -1511,6 +1512,7 @@ namespace {<br>
   struct SCCP : public FunctionPass {<br>
     void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
       AU.addRequired<TargetLibraryInfoWrapperPass>();<br>
+      AU.addPreserved<GlobalsAAWrapperPass>();<br>
     }<br>
     static char ID; // Pass identification, replacement for typeid<br>
     SCCP() : FunctionPass(ID) {<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/SROA.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/SROA.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/SROA.cpp Thu Sep 10 05:22:12 2015<br>
@@ -28,6 +28,7 @@<br>
 #include "llvm/ADT/SetVector.h"<br>
 #include "llvm/ADT/SmallVector.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/AssumptionCache.h"<br>
 #include "llvm/Analysis/Loads.h"<br>
 #include "llvm/Analysis/PtrUseVisitor.h"<br>
@@ -4355,5 +4356,6 @@ bool SROA::runOnFunction(Function &F) {<br>
 void SROA::getAnalysisUsage(AnalysisUsage &AU) const {<br>
   AU.addRequired<AssumptionCacheTracker>();<br>
   AU.addRequired<DominatorTreeWrapperPass>();<br>
+  AU.addPreserved<GlobalsAAWrapperPass>();<br>
   AU.setPreservesCFG();<br>
 }<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp Thu Sep 10 05:22:12 2015<br>
@@ -25,6 +25,7 @@<br>
 #include "llvm/ADT/SmallPtrSet.h"<br>
 #include "llvm/ADT/SmallVector.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/AssumptionCache.h"<br>
 #include "llvm/Analysis/TargetTransformInfo.h"<br>
 #include "llvm/IR/Attributes.h"<br>
@@ -217,6 +218,7 @@ struct CFGSimplifyPass : public Function<br>
   void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
     AU.addRequired<AssumptionCacheTracker>();<br>
     AU.addRequired<TargetTransformInfoWrapperPass>();<br>
+    AU.addPreserved<GlobalsAAWrapperPass>();<br>
   }<br>
 };<br>
 }<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp?rev=247263&r1=247262&r2=247263&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp?rev=247263&r1=247262&r2=247263&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/TailRecursionElimination.cpp Thu Sep 10 05:22:12 2015<br>
@@ -54,6 +54,7 @@<br>
 #include "llvm/ADT/STLExtras.h"<br>
 #include "llvm/ADT/SmallPtrSet.h"<br>
 #include "llvm/ADT/Statistic.h"<br>
+#include "llvm/Analysis/GlobalsModRef.h"<br>
 #include "llvm/Analysis/CFG.h"<br>
 #include "llvm/Analysis/CaptureTracking.h"<br>
 #include "llvm/Analysis/InlineCost.h"<br>
@@ -136,6 +137,7 @@ FunctionPass *llvm::createTailCallElimin<br>
<br>
 void TailCallElim::getAnalysisUsage(AnalysisUsage &AU) const {<br>
   AU.addRequired<TargetTransformInfoWrapperPass>();<br>
+  AU.addPreserved<GlobalsAAWrapperPass>();<br>
 }<br>
<br>
 /// \brief Scan the specified function for alloca instructions.<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>