diff options
author | Jush Lu <jush.msn@gmail.com> | 2011-04-09 11:27:00 +0800 |
---|---|---|
committer | Jush Lu <jush.msn@gmail.com> | 2011-04-09 11:27:00 +0800 |
commit | 8feda7ee332f1f91e4d3a42d9f7ad729012ed174 (patch) | |
tree | a2c1041fd0aad673c2ea522b68a0078fd1a90b2d /tools/opt | |
parent | 12c27e38e875ae53f47e4a1b1c00a601457c20f2 (diff) | |
parent | 2c44a80d991df258a45e2f5fa76d5ada9e99015c (diff) | |
download | external_llvm-8feda7ee332f1f91e4d3a42d9f7ad729012ed174.zip external_llvm-8feda7ee332f1f91e4d3a42d9f7ad729012ed174.tar.gz external_llvm-8feda7ee332f1f91e4d3a42d9f7ad729012ed174.tar.bz2 |
Merge upstream r129128
Diffstat (limited to 'tools/opt')
-rw-r--r-- | tools/opt/GraphPrinters.cpp | 4 | ||||
-rw-r--r-- | tools/opt/opt.cpp | 65 |
2 files changed, 43 insertions, 26 deletions
diff --git a/tools/opt/GraphPrinters.cpp b/tools/opt/GraphPrinters.cpp index 791caf5..30361f5 100644 --- a/tools/opt/GraphPrinters.cpp +++ b/tools/opt/GraphPrinters.cpp @@ -18,7 +18,7 @@ #include "llvm/Pass.h" #include "llvm/Value.h" #include "llvm/Analysis/CallGraph.h" -#include "llvm/Analysis/DominanceFrontier.h" +#include "llvm/Analysis/Dominators.h" #include "llvm/Support/ToolOutputFile.h" using namespace llvm; @@ -103,13 +103,11 @@ namespace { virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); AU.addRequired<DominatorTree>(); - AU.addRequired<DominanceFrontier>(); } virtual bool runOnFunction(Function &F) { getAnalysis<DominatorTree>().dump(); - getAnalysis<DominanceFrontier>().dump(); return false; } }; diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index e55b4b3..25474c4 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -26,6 +26,7 @@ #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetLibraryInfo.h" #include "llvm/Target/TargetMachine.h" +#include "llvm/ADT/StringSet.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/PassNameParser.h" #include "llvm/Support/Signals.h" @@ -132,11 +133,11 @@ static cl::opt<bool> AnalyzeOnly("analyze", cl::desc("Only perform analysis, no optimization")); static cl::opt<bool> -PrintBreakpoints("print-breakpoints-for-testing", +PrintBreakpoints("print-breakpoints-for-testing", cl::desc("Print select breakpoints location for testing")); static cl::opt<std::string> -DefaultDataLayout("default-data-layout", +DefaultDataLayout("default-data-layout", cl::desc("data layout string to use if not specified by module"), cl::value_desc("layout-string"), cl::init("")); @@ -327,7 +328,7 @@ struct BasicBlockPassPrinter : public BasicBlockPass { << "': Pass " << PassToPrint->getPassName() << ":\n"; // Get and print pass... - getAnalysisID<Pass>(PassToPrint->getTypeInfo()).print(Out, + getAnalysisID<Pass>(PassToPrint->getTypeInfo()).print(Out, BB.getParent()->getParent()); return false; } @@ -342,28 +343,43 @@ struct BasicBlockPassPrinter : public BasicBlockPass { char BasicBlockPassPrinter::ID = 0; -struct BreakpointPrinter : public FunctionPass { +struct BreakpointPrinter : public ModulePass { raw_ostream &Out; static char ID; BreakpointPrinter(raw_ostream &out) - : FunctionPass(ID), Out(out) { + : ModulePass(ID), Out(out) { } - virtual bool runOnFunction(Function &F) { - BasicBlock &EntryBB = F.getEntryBlock(); - BasicBlock::const_iterator BI = EntryBB.end(); - --BI; - do { - const Instruction *In = BI; - const DebugLoc DL = In->getDebugLoc(); - if (!DL.isUnknown()) { - DIScope S(DL.getScope(getGlobalContext())); - Out << S.getFilename() << " " << DL.getLine() << "\n"; - break; + 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(), N); + N = N + TY.getName().str() + "::"; + } + } + } + + virtual bool runOnModule(Module &M) { + 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)); + if (SP.Verify()) + getContextName(SP.getContext(), Name); + Name = Name + SP.getDisplayName().str(); + if (!Name.empty() && Processed.insert(Name)) { + Out << Name << "\n"; + } } - --BI; - } while (BI != EntryBB.begin()); return false; } @@ -463,7 +479,7 @@ int main(int argc, char **argv) { llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. LLVMContext &Context = getGlobalContext(); - + // Initialize passes PassRegistry &Registry = *PassRegistry::getPassRegistry(); initializeCore(Registry); @@ -475,7 +491,7 @@ int main(int argc, char **argv) { initializeInstCombine(Registry); initializeInstrumentation(Registry); initializeTarget(Registry); - + cl::ParseCommandLineOptions(argc, argv, "llvm .bc -> .bc modular optimizer and analysis printer\n"); @@ -533,12 +549,12 @@ int main(int argc, char **argv) { // Add an appropriate TargetLibraryInfo pass for the module's triple. TargetLibraryInfo *TLI = new TargetLibraryInfo(Triple(M->getTargetTriple())); - + // The -disable-simplify-libcalls flag actually disables all builtin optzns. if (DisableSimplifyLibCalls) TLI->disableAllFunctions(); Passes.add(TLI); - + // Add an appropriate TargetData instance for this module. TargetData *TD = 0; const std::string &ModuleDataLayout = M.get()->getDataLayout(); @@ -562,7 +578,7 @@ int main(int argc, char **argv) { if (!Out) { if (OutputFilename.empty()) OutputFilename = "-"; - + std::string ErrorInfo; Out.reset(new tool_output_file(OutputFilename.c_str(), ErrorInfo, raw_fd_ostream::F_Binary)); @@ -685,6 +701,9 @@ int main(int argc, char **argv) { Passes.add(createBitcodeWriterPass(Out->os())); } + // Before executing passes, print the final values of the LLVM options. + cl::PrintOptionValues(); + // Now that we have all of the passes ready, run them. Passes.run(*M.get()); |