diff options
author | Ted Kremenek <kremenek@apple.com> | 2007-08-29 21:56:09 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2007-08-29 21:56:09 +0000 |
commit | 7dba8607e59096014b7139ff20ef00870041d518 (patch) | |
tree | 28ae4b88293b6e9a3f9d2d4cf0c95f1fd1141704 /Driver/clang.cpp | |
parent | 9b3d3a9f3d60eff7b7c8d383203ff348527e3874 (diff) |
Added GraphTraits to source-level CFGs (CFG and CFGBlock) to allow
(LLVM-provided) graph algorithms such as DFS and graph visualization
to work effortless on source-level CFGs.
Further cleanup on pretty printing of CFGs. CFGBlock::dump and
CFGBlock::print now take the parent CFG as an argument. This allows
CFGBlocks to print their own appropriate label indicating whether or
not they are the Entry/Exit/IndirectGotoBlock without the CFG::print
routine doing it instead.
Added Graphviz visualization for CFGs: CFG::viewCFG. This employs the
GraphTraits just implemented.
Added "-view-cfg" mode the to clang driver. This is identical to
"-dump-cfg" except that it calls Graphviz to visualize the CFGs
instead of dumping them to the terminal.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41580 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Driver/clang.cpp')
-rw-r--r-- | Driver/clang.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/Driver/clang.cpp b/Driver/clang.cpp index 14f48870e5..2bb4422b75 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -53,6 +53,7 @@ enum ProgActions { ParseASTCheck, // Parse ASTs and check diagnostics. ParseAST, // Parse ASTs. ParseCFGDump, // Parse ASTS. Build CFGs. Print CFGs. + ParseCFGView, // Parse ASTS. Build CFGs. View CFGs (Graphviz). ParsePrintCallbacks, // Parse and print each callback. ParseSyntaxOnly, // Parse and perform semantic analysis. ParseNoop, // Parse with noop callbacks. @@ -86,7 +87,9 @@ ProgAction(llvm::cl::desc("Choose output type:"), llvm::cl::ZeroOrMore, clEnumValN(ParseASTCheck, "parse-ast-check", "Run parser, build ASTs, then check diagnostics"), clEnumValN(ParseCFGDump, "dump-cfg", - "Run parser, build ASTs, then build and print CFGs."), + "Run parser, then build and print CFGs."), + clEnumValN(ParseCFGView, "view-cfg", + "Run parser, then build and view CFGs with Graphviz."), clEnumValN(EmitLLVM, "emit-llvm", "Build ASTs then convert to LLVM, emit .ll file"), clEnumValEnd)); @@ -840,6 +843,9 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID, case ParseCFGDump: DumpCFGs(PP, MainFileID, Stats); break; + case ParseCFGView: + DumpCFGs(PP, MainFileID, Stats, true); + break; case EmitLLVM: EmitLLVMFromASTs(PP, MainFileID, Stats); break; |