aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/GlobalsModRef.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Analysis/GlobalsModRef.cpp')
-rw-r--r--llvm/lib/Analysis/GlobalsModRef.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/GlobalsModRef.cpp b/llvm/lib/Analysis/GlobalsModRef.cpp
index 14a191e..80989c2 100644
--- a/llvm/lib/Analysis/GlobalsModRef.cpp
+++ b/llvm/lib/Analysis/GlobalsModRef.cpp
@@ -25,6 +25,7 @@
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Module.h"
+#include "llvm/IR/PassManager.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/CommandLine.h"
@@ -1009,6 +1010,24 @@ GlobalsAAResult GlobalsAA::run(Module &M, ModuleAnalysisManager &AM) {
AM.getResult<CallGraphAnalysis>(M));
}
+PreservedAnalyses RecomputeGlobalsAAPass::run(Module &M,
+ ModuleAnalysisManager &AM) {
+ if (auto *G = AM.getCachedResult<GlobalsAA>(M)) {
+ auto &CG = AM.getResult<CallGraphAnalysis>(M);
+ G->NonAddressTakenGlobals.clear();
+ G->UnknownFunctionsWithLocalLinkage = false;
+ G->IndirectGlobals.clear();
+ G->AllocsForIndirectGlobals.clear();
+ G->FunctionInfos.clear();
+ G->FunctionToSCCMap.clear();
+ G->Handles.clear();
+ G->CollectSCCMembership(CG);
+ G->AnalyzeGlobals(M);
+ G->AnalyzeCallGraph(CG, M);
+ }
+ return PreservedAnalyses::all();
+}
+
char GlobalsAAWrapperPass::ID = 0;
INITIALIZE_PASS_BEGIN(GlobalsAAWrapperPass, "globals-aa",
"Globals Alias Analysis", false, true)