summaryrefslogtreecommitdiff
path: root/tools/opt/opt.cpp
diff options
context:
space:
mode:
authorEli Bendersky <eliben@google.com>2014-02-12 16:48:02 +0000
committerEli Bendersky <eliben@google.com>2014-02-12 16:48:02 +0000
commita0ea8fafdf83736039de389321cb35cad26c7e53 (patch)
treed6df1ecb71ebd400b86ac15e4217f490874df37a /tools/opt/opt.cpp
parent7580df334e9fd8964bd158d7feeadc4f9cdf43bb (diff)
downloadllvm-a0ea8fafdf83736039de389321cb35cad26c7e53.tar.gz
llvm-a0ea8fafdf83736039de389321cb35cad26c7e53.tar.bz2
llvm-a0ea8fafdf83736039de389321cb35cad26c7e53.tar.xz
Move more self-contained functionality away from tools/opt/opt.cpp
BreakpointPrinter moves to its own module. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201242 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/opt/opt.cpp')
-rw-r--r--tools/opt/opt.cpp63
1 files changed, 2 insertions, 61 deletions
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index 49bb3c3b19..ed87c9b705 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -12,9 +12,9 @@
//
//===----------------------------------------------------------------------===//
+#include "BreakpointPrinter.h"
#include "NewPMDriver.h"
#include "PassPrinters.h"
-#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/Triple.h"
#include "llvm/Analysis/CallGraph.h"
#include "llvm/Analysis/CallGraphSCCPass.h"
@@ -22,7 +22,6 @@
#include "llvm/Analysis/RegionPass.h"
#include "llvm/Bitcode/BitcodeWriterPass.h"
#include "llvm/CodeGen/CommandFlags.h"
-#include "llvm/DebugInfo.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/IRPrintingPasses.h"
#include "llvm/IR/LLVMContext.h"
@@ -184,65 +183,7 @@ DefaultDataLayout("default-data-layout",
cl::desc("data layout string to use if not specified by module"),
cl::value_desc("layout-string"), cl::init(""));
-namespace {
-struct BreakpointPrinter : public ModulePass {
- raw_ostream &Out;
- static char ID;
- DITypeIdentifierMap TypeIdentifierMap;
-
- BreakpointPrinter(raw_ostream &out)
- : ModulePass(ID), Out(out) {
- }
-
- void getContextName(DIDescriptor Context, std::string &N) {
- if (Context.isNameSpace()) {
- DINameSpace NS(Context);
- if (!NS.getName().empty()) {
- getContextName(NS.getContext(), N);
- N = N + NS.getName().str() + "::";
- }
- } else if (Context.isType()) {
- DIType TY(Context);
- if (!TY.getName().empty()) {
- getContextName(TY.getContext().resolve(TypeIdentifierMap), N);
- N = N + TY.getName().str() + "::";
- }
- }
- }
-
- virtual bool runOnModule(Module &M) {
- TypeIdentifierMap.clear();
- NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu");
- if (CU_Nodes)
- TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes);
-
- StringSet<> Processed;
- if (NamedMDNode *NMD = M.getNamedMetadata("llvm.dbg.sp"))
- for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
- std::string Name;
- DISubprogram SP(NMD->getOperand(i));
- assert((!SP || SP.isSubprogram()) &&
- "A MDNode in llvm.dbg.sp should be null or a DISubprogram.");
- if (!SP)
- continue;
- getContextName(SP.getContext().resolve(TypeIdentifierMap), Name);
- Name = Name + SP.getDisplayName().str();
- if (!Name.empty() && Processed.insert(Name)) {
- Out << Name << "\n";
- }
- }
- return false;
- }
-
- virtual void getAnalysisUsage(AnalysisUsage &AU) const {
- AU.setPreservesAll();
- }
-};
-
-} // anonymous namespace
-
-char BreakpointPrinter::ID = 0;
static inline void addPass(PassManagerBase &PM, Pass *P) {
// Add the pass to the pass manager...
@@ -550,7 +491,7 @@ int main(int argc, char **argv) {
return 1;
}
}
- Passes.add(new BreakpointPrinter(Out->os()));
+ Passes.add(createBreakpointPrinter(Out->os()));
NoOutput = true;
}