mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-21 19:20:50 +00:00
[CG] Add a new pass manager printer pass for the old call graph and
actually finish wiring up the old call graph. There were bugs in the old call graph that hadn't been caught because it wasn't being tested. It wasn't being tested because it wasn't in the pipeline system and we didn't have a printing pass to run in tests. This fixes all of that. As for why I'm still keeping the old call graph alive its so that I can port GlobalsAA to the new pass manager with out forking it to work with the lazy call graph. That's clearly the right eventual design, but it seems pragmatic to defer that until its necessary. The old call graph works just fine for GlobalsAA. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263104 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c9fd7655a0
commit
f1b2c7b945
@ -303,7 +303,16 @@ public:
|
||||
/// \brief Compute the \c CallGraph for the module \c M.
|
||||
///
|
||||
/// The real work here is done in the \c CallGraph constructor.
|
||||
CallGraph run(Module *M) { return CallGraph(*M); }
|
||||
CallGraph run(Module &M) { return CallGraph(M); }
|
||||
};
|
||||
|
||||
/// \brief Printer pass for the \c CallGraphAnalysis results.
|
||||
class CallGraphPrinterPass : public PassBase<CallGraphPrinterPass> {
|
||||
raw_ostream &OS;
|
||||
|
||||
public:
|
||||
explicit CallGraphPrinterPass(raw_ostream &OS) : OS(OS) {}
|
||||
PreservedAnalyses run(Module &M, AnalysisManager<Module> *AM);
|
||||
};
|
||||
|
||||
/// \brief The \c ModulePass which wraps up a \c CallGraph and the logic to
|
||||
|
@ -259,6 +259,12 @@ void CallGraphNode::replaceCallEdge(CallSite CS,
|
||||
}
|
||||
}
|
||||
|
||||
PreservedAnalyses CallGraphPrinterPass::run(Module &M,
|
||||
AnalysisManager<Module> *AM) {
|
||||
AM->getResult<CallGraphAnalysis>(M).print(OS);
|
||||
return PreservedAnalyses::all();
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Out-of-line definitions of CallGraphAnalysis class members.
|
||||
//
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "llvm/Analysis/BasicAliasAnalysis.h"
|
||||
#include "llvm/Analysis/CFLAliasAnalysis.h"
|
||||
#include "llvm/Analysis/CGSCCPassManager.h"
|
||||
#include "llvm/Analysis/CallGraph.h"
|
||||
#include "llvm/Analysis/DominanceFrontier.h"
|
||||
#include "llvm/Analysis/LazyCallGraph.h"
|
||||
#include "llvm/Analysis/LoopInfo.h"
|
||||
|
@ -19,6 +19,7 @@
|
||||
#ifndef MODULE_ANALYSIS
|
||||
#define MODULE_ANALYSIS(NAME, CREATE_PASS)
|
||||
#endif
|
||||
MODULE_ANALYSIS("callgraph", CallGraphAnalysis())
|
||||
MODULE_ANALYSIS("lcg", LazyCallGraphAnalysis())
|
||||
MODULE_ANALYSIS("no-op-module", NoOpModuleAnalysis())
|
||||
MODULE_ANALYSIS("targetlibinfo", TargetLibraryAnalysis())
|
||||
@ -32,6 +33,7 @@ MODULE_PASS("inferattrs", InferFunctionAttrsPass())
|
||||
MODULE_PASS("invalidate<all>", InvalidateAllAnalysesPass())
|
||||
MODULE_PASS("no-op-module", NoOpModulePass())
|
||||
MODULE_PASS("print", PrintModulePass(dbgs()))
|
||||
MODULE_PASS("print-callgraph", CallGraphPrinterPass(dbgs()))
|
||||
MODULE_PASS("print-lcg", LazyCallGraphPrinterPass(dbgs()))
|
||||
MODULE_PASS("strip-dead-prototypes", StripDeadPrototypesPass())
|
||||
MODULE_PASS("verify", VerifierPass())
|
||||
|
@ -1,4 +1,5 @@
|
||||
; RUN: opt < %s -print-callgraph -disable-output 2>&1 | FileCheck %s
|
||||
; RUN: opt < %s -passes=print-callgraph -disable-output 2>&1 | FileCheck %s
|
||||
|
||||
; Check that intrinsics aren't added to the call graph
|
||||
|
||||
|
@ -323,6 +323,14 @@
|
||||
; CHECK-MEMDEP: Running analysis: MemoryDependenceAnalysis
|
||||
; CHECK-MEMDEP: Finished llvm::Module pass manager run
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
|
||||
; RUN: -passes='require<callgraph>' \
|
||||
; RUN: | FileCheck %s --check-prefix=CHECK-CALLGRAPH
|
||||
; CHECK-CALLGRAPH: Starting llvm::Module pass manager run
|
||||
; CHECK-CALLGRAPH: Running pass: RequireAnalysisPass
|
||||
; CHECK-CALLGRAPH: Running analysis: CallGraphAnalysis
|
||||
; CHECK-CALLGRAPH: Finished llvm::Module pass manager run
|
||||
|
||||
; RUN: opt -disable-output -disable-verify -debug-pass-manager \
|
||||
; RUN: -passes='default<O0>' %s 2>&1 \
|
||||
; RUN: | FileCheck %s --check-prefix=CHECK-O2
|
||||
|
Loading…
x
Reference in New Issue
Block a user