Rationalize the names of passes that print information:

-callgraph => print-callgraph
    -callscc   => print-callgraph-sccs
    -cfgscc    => print-cfg-sccs
    -externalfnconstants => print-externalfnconstants
    -print               => print-function
    -print-alias-sets (no change)
    -print-callgraph     => dot-callgraph
    -print-cfg           => dot-cfg
    -print-cfg-only      => dot-cfg-only
    -print-dom-info (no change)
    -printm              => print-module
    -printusedtypes      => print-used-types


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56487 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan Sands 2008-09-23 12:47:39 +00:00
parent 1de42e8374
commit 3ee8fc9649
14 changed files with 123 additions and 119 deletions

View File

@ -79,15 +79,14 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<tr><td><a href="#basicaa">-basicaa</a></td><td>Basic Alias Analysis (default AA impl)</td></tr> <tr><td><a href="#basicaa">-basicaa</a></td><td>Basic Alias Analysis (default AA impl)</td></tr>
<tr><td><a href="#basiccg">-basiccg</a></td><td>Basic CallGraph Construction</td></tr> <tr><td><a href="#basiccg">-basiccg</a></td><td>Basic CallGraph Construction</td></tr>
<tr><td><a href="#basicvn">-basicvn</a></td><td>Basic Value Numbering (default GVN impl)</td></tr> <tr><td><a href="#basicvn">-basicvn</a></td><td>Basic Value Numbering (default GVN impl)</td></tr>
<tr><td><a href="#callgraph">-callgraph</a></td><td>Print a call graph</td></tr>
<tr><td><a href="#callscc">-callscc</a></td><td>Print SCCs of the Call Graph</td></tr>
<tr><td><a href="#cfgscc">-cfgscc</a></td><td>Print SCCs of each function CFG</td></tr>
<tr><td><a href="#codegenprepare">-codegenprepare</a></td><td>Optimize for code generation</td></tr> <tr><td><a href="#codegenprepare">-codegenprepare</a></td><td>Optimize for code generation</td></tr>
<tr><td><a href="#count-aa">-count-aa</a></td><td>Count Alias Analysis Query Responses</td></tr> <tr><td><a href="#count-aa">-count-aa</a></td><td>Count Alias Analysis Query Responses</td></tr>
<tr><td><a href="#debug-aa">-debug-aa</a></td><td>AA use debugger</td></tr> <tr><td><a href="#debug-aa">-debug-aa</a></td><td>AA use debugger</td></tr>
<tr><td><a href="#domfrontier">-domfrontier</a></td><td>Dominance Frontier Construction</td></tr> <tr><td><a href="#domfrontier">-domfrontier</a></td><td>Dominance Frontier Construction</td></tr>
<tr><td><a href="#domtree">-domtree</a></td><td>Dominator Tree Construction</td></tr> <tr><td><a href="#domtree">-domtree</a></td><td>Dominator Tree Construction</td></tr>
<tr><td><a href="#externalfnconstants">-externalfnconstants</a></td><td>Print external fn callsites passed constants</td></tr> <tr><td><a href="#dot-callgraph">-dot-callgraph</a></td><td>Print Call Graph to 'dot' file</td></tr>
<tr><td><a href="#dot-cfg">-dot-cfg</a></td><td>Print CFG of function to 'dot' file</td></tr>
<tr><td><a href="#dot-cfg-only">-dot-cfg-only</a></td><td>Print CFG of function to 'dot' file (with no function bodies)</td></tr>
<tr><td><a href="#globalsmodref-aa">-globalsmodref-aa</a></td><td>Simple mod/ref analysis for globals</td></tr> <tr><td><a href="#globalsmodref-aa">-globalsmodref-aa</a></td><td>Simple mod/ref analysis for globals</td></tr>
<tr><td><a href="#instcount">-instcount</a></td><td>Counts the various types of Instructions</td></tr> <tr><td><a href="#instcount">-instcount</a></td><td>Counts the various types of Instructions</td></tr>
<tr><td><a href="#intervals">-intervals</a></td><td>Interval Partition Construction</td></tr> <tr><td><a href="#intervals">-intervals</a></td><td>Interval Partition Construction</td></tr>
@ -98,13 +97,14 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<tr><td><a href="#no-profile">-no-profile</a></td><td>No Profile Information</td></tr> <tr><td><a href="#no-profile">-no-profile</a></td><td>No Profile Information</td></tr>
<tr><td><a href="#postdomfrontier">-postdomfrontier</a></td><td>Post-Dominance Frontier Construction</td></tr> <tr><td><a href="#postdomfrontier">-postdomfrontier</a></td><td>Post-Dominance Frontier Construction</td></tr>
<tr><td><a href="#postdomtree">-postdomtree</a></td><td>Post-Dominator Tree Construction</td></tr> <tr><td><a href="#postdomtree">-postdomtree</a></td><td>Post-Dominator Tree Construction</td></tr>
<tr><td><a href="#print">-print</a></td><td>Print function to stderr</td></tr>
<tr><td><a href="#print-alias-sets">-print-alias-sets</a></td><td>Alias Set Printer</td></tr> <tr><td><a href="#print-alias-sets">-print-alias-sets</a></td><td>Alias Set Printer</td></tr>
<tr><td><a href="#print-callgraph">-print-callgraph</a></td><td>Print Call Graph to 'dot' file</td></tr> <tr><td><a href="#print-callgraph">-print-callgraph</a></td><td>Print a call graph</td></tr>
<tr><td><a href="#print-cfg">-print-cfg</a></td><td>Print CFG of function to 'dot' file</td></tr> <tr><td><a href="#print-callgraph-sccs">-print-callgraph-sccs</a></td><td>Print SCCs of the Call Graph</td></tr>
<tr><td><a href="#print-cfg-only">-print-cfg-only</a></td><td>Print CFG of function to 'dot' file (with no function bodies)</td></tr> <tr><td><a href="#print-cfg-sccs">-print-cfg-sccs</a></td><td>Print SCCs of each function CFG</td></tr>
<tr><td><a href="#printm">-printm</a></td><td>Print module to stderr</td></tr> <tr><td><a href="#print-externalfnconstants">-print-externalfnconstants</a></td><td>Print external fn callsites passed constants</td></tr>
<tr><td><a href="#printusedtypes">-printusedtypes</a></td><td>Find Used Types</td></tr> <tr><td><a href="#print-function">-print-function</a></td><td>Print function to stderr</td></tr>
<tr><td><a href="#print-module">-print-module</a></td><td>Print module to stderr</td></tr>
<tr><td><a href="#print-used-types">-print-used-types</a></td><td>Find Used Types</td></tr>
<tr><td><a href="#profile-loader">-profile-loader</a></td><td>Load profile information from llvmprof.out</td></tr> <tr><td><a href="#profile-loader">-profile-loader</a></td><td>Load profile information from llvmprof.out</td></tr>
<tr><td><a href="#scalar-evolution">-scalar-evolution</a></td><td>Scalar Evolution Analysis</td></tr> <tr><td><a href="#scalar-evolution">-scalar-evolution</a></td><td>Scalar Evolution Analysis</td></tr>
<tr><td><a href="#targetdata">-targetdata</a></td><td>Target Data Layout</td></tr> <tr><td><a href="#targetdata">-targetdata</a></td><td>Target Data Layout</td></tr>
@ -315,39 +315,6 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
</p> </p>
</div> </div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="callgraph">Print a call graph</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the call graph to
standard output in a human-readable form.
</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="callscc">Print SCCs of the Call Graph</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the SCCs of the call
graph to standard output in a human-readable form.
</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="cfgscc">Print SCCs of each function CFG</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the SCCs of each
function CFG to standard output in a human-readable form.
</p>
</div>
<!-------------------------------------------------------------------------- --> <!-------------------------------------------------------------------------- -->
<div class="doc_subsection"> <div class="doc_subsection">
<a name="codegenprepare">Optimize for code generation</a> <a name="codegenprepare">Optimize for code generation</a>
@ -412,14 +379,38 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<!-------------------------------------------------------------------------- --> <!-------------------------------------------------------------------------- -->
<div class="doc_subsection"> <div class="doc_subsection">
<a name="externalfnconstants">Print external fn callsites passed constants</a> <a name="dot-callgraph">Print Call Graph to 'dot' file</a>
</div> </div>
<div class="doc_text"> <div class="doc_text">
<p> <p>
This pass, only available in <code>opt</code>, prints out call sites to This pass, only available in <code>opt</code>, prints the call graph into a
external functions that are called with constant arguments. This can be <code>.dot</code> graph. This graph can then be processed with the "dot" tool
useful when looking for standard library functions we should constant fold to convert it to postscript or some other suitable format.
or handle in alias analyses. </p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="dot-cfg">Print CFG of function to 'dot' file</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the control flow graph
into a <code>.dot</code> graph. This graph can then be processed with the
"dot" tool to convert it to postscript or some other suitable format.
</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="dot-cfg-only">Print CFG of function to 'dot' file (with no function bodies)</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the control flow graph
into a <code>.dot</code> graph, omitting the function bodies. This graph can
then be processed with the "dot" tool to convert it to postscript or some
other suitable format.
</p> </p>
</div> </div>
@ -557,7 +548,61 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<!-------------------------------------------------------------------------- --> <!-------------------------------------------------------------------------- -->
<div class="doc_subsection"> <div class="doc_subsection">
<a name="print">Print function to stderr</a> <a name="print-alias-sets">Alias Set Printer</a>
</div>
<div class="doc_text">
<p>Yet to be written.</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="print-callgraph">Print a call graph</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the call graph to
standard output in a human-readable form.
</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="print-callgraph-sccs">Print SCCs of the Call Graph</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the SCCs of the call
graph to standard output in a human-readable form.
</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="print-cfg-sccs">Print SCCs of each function CFG</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the SCCs of each
function CFG to standard output in a human-readable form.
</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="print-externalfnconstants">Print external fn callsites passed constants</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints out call sites to
external functions that are called with constant arguments. This can be
useful when looking for standard library functions we should constant fold
or handle in alias analyses.
</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="print-function">Print function to stderr</a>
</div> </div>
<div class="doc_text"> <div class="doc_text">
<p> <p>
@ -569,52 +614,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<!-------------------------------------------------------------------------- --> <!-------------------------------------------------------------------------- -->
<div class="doc_subsection"> <div class="doc_subsection">
<a name="print-alias-sets">Alias Set Printer</a> <a name="print-module">Print module to stderr</a>
</div>
<div class="doc_text">
<p>Yet to be written.</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="print-callgraph">Print Call Graph to 'dot' file</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the call graph into a
<code>.dot</code> graph. This graph can then be processed with the "dot" tool
to convert it to postscript or some other suitable format.
</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="print-cfg">Print CFG of function to 'dot' file</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the control flow graph
into a <code>.dot</code> graph. This graph can then be processed with the
"dot" tool to convert it to postscript or some other suitable format.
</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="print-cfg-only">Print CFG of function to 'dot' file (with no function bodies)</a>
</div>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the control flow graph
into a <code>.dot</code> graph, omitting the function bodies. This graph can
then be processed with the "dot" tool to convert it to postscript or some
other suitable format.
</p>
</div>
<!-------------------------------------------------------------------------- -->
<div class="doc_subsection">
<a name="printm">Print module to stderr</a>
</div> </div>
<div class="doc_text"> <div class="doc_text">
<p> <p>
@ -624,7 +624,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if !
<!-------------------------------------------------------------------------- --> <!-------------------------------------------------------------------------- -->
<div class="doc_subsection"> <div class="doc_subsection">
<a name="printusedtypes">Find Used Types</a> <a name="print-used-types">Find Used Types</a>
</div> </div>
<div class="doc_text"> <div class="doc_text">
<p> <p>

View File

@ -7,7 +7,7 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// This file defines a '-print-cfg' analysis pass, which emits the // This file defines a '-dot-cfg' analysis pass, which emits the
// cfg.<fnname>.dot file for each function in the program, with a graph of the // cfg.<fnname>.dot file for each function in the program, with a graph of the
// CFG for that function. // CFG for that function.
// //
@ -165,7 +165,7 @@ namespace {
char CFGPrinter::ID = 0; char CFGPrinter::ID = 0;
static RegisterPass<CFGPrinter> static RegisterPass<CFGPrinter>
P1("print-cfg", "Print CFG of function to 'dot' file", false, true); P1("dot-cfg", "Print CFG of function to 'dot' file", false, true);
namespace { namespace {
struct VISIBILITY_HIDDEN CFGOnlyPrinter : public CFGPrinter { struct VISIBILITY_HIDDEN CFGOnlyPrinter : public CFGPrinter {
@ -188,7 +188,7 @@ namespace {
char CFGOnlyPrinter::ID = 0; char CFGOnlyPrinter::ID = 0;
static RegisterPass<CFGOnlyPrinter> static RegisterPass<CFGOnlyPrinter>
P2("print-cfg-only", P2("dot-cfg-only",
"Print CFG of function to 'dot' file (with no function bodies)", false, true); "Print CFG of function to 'dot' file (with no function bodies)", false, true);
/// viewCFG - This function is meant for use from the debugger. You can just /// viewCFG - This function is meant for use from the debugger. You can just

View File

@ -23,7 +23,7 @@ using namespace llvm;
char FindUsedTypes::ID = 0; char FindUsedTypes::ID = 0;
static RegisterPass<FindUsedTypes> static RegisterPass<FindUsedTypes>
X("printusedtypes", "Find Used Types", false, true); X("print-used-types", "Find Used Types", false, true);
// IncorporateType - Incorporate one type and all of its subtypes into the // IncorporateType - Incorporate one type and all of its subtypes into the
// collection of used types. // collection of used types.

View File

@ -41,10 +41,10 @@ AssemblyAnnotationWriter::~AssemblyAnnotationWriter() {}
char PrintModulePass::ID = 0; char PrintModulePass::ID = 0;
static RegisterPass<PrintModulePass> static RegisterPass<PrintModulePass>
X("printm", "Print module to stderr"); X("print-module", "Print module to stderr");
char PrintFunctionPass::ID = 0; char PrintFunctionPass::ID = 0;
static RegisterPass<PrintFunctionPass> static RegisterPass<PrintFunctionPass>
Y("print","Print function to stderr"); Y("print-function","Print function to stderr");
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//

View File

@ -1,4 +1,5 @@
; RUN: llvm-as < %s | opt -callgraph -disable-output |& grep {Calls function 'callee'} | count 2 ; RUN: llvm-as < %s | opt -print-callgraph -disable-output |& \
; RUN: grep {Calls function 'callee'} | count 2
define internal void @callee(...) { define internal void @callee(...) {
entry: entry:

View File

@ -1,4 +1,5 @@
; RUN: llvm-as < %s | opt -callgraph -disable-output |& grep {Calls function} ; RUN: llvm-as < %s | opt -print-callgraph -disable-output |& \
; RUN: grep {Calls function}
@a = global void ()* @f ; <void ()**> [#uses=0] @a = global void ()* @f ; <void ()**> [#uses=0]

View File

@ -1,6 +1,6 @@
; Call graph construction crash: Not handling indirect calls right ; Call graph construction crash: Not handling indirect calls right
; ;
; RUN: llvm-as < %s | opt -analyze -callgraph >& /dev/null ; RUN: llvm-as < %s | opt -analyze -print-callgraph >& /dev/null
; ;
%FunTy = type i32 (i32) %FunTy = type i32 (i32)

View File

@ -1,4 +1,4 @@
;RUN: llvm-as < %s | opt -analyze -print-cfg-only -disable-output 2>/dev/null ;RUN: llvm-as < %s | opt -analyze -dot-cfg-only -disable-output 2>/dev/null
;PR 1497 ;PR 1497
define void @foo() { define void @foo() {

View File

@ -1,4 +1,4 @@
; RUN: llvm-as < %s | opt -block-placement -disable-output -print 2> /dev/null ; RUN: llvm-as < %s | opt -block-placement -disable-output -print-function 2> /dev/null
define i32 @test() { define i32 @test() {
br i1 true, label %X, label %Y br i1 true, label %X, label %Y

View File

@ -1,4 +1,4 @@
; RUN: llvm-as < %s | opt -inline -disable-output -print 2> /dev/null ; RUN: llvm-as < %s | opt -inline -disable-output -print-function 2> /dev/null
define i32 @func(i32 %i) { define i32 @func(i32 %i) {
ret i32 %i ret i32 %i

View File

@ -1,4 +1,5 @@
; RUN: llvm-as < %s | opt -prune-eh -inline -callgraph -disable-output |& \ ; RUN: llvm-as < %s | opt -prune-eh -inline -print-callgraph \
; RUN: -disable-output |& \
; RUN: grep {Calls.*ce3806g__fxio__put__put_int64__4.1339} | count 2 ; RUN: grep {Calls.*ce3806g__fxio__put__put_int64__4.1339} | count 2
%struct.FRAME.ce3806g = type { %struct.string___XUB, %struct.string___XUB, %struct.string___XUB, %struct.string___XUB } %struct.FRAME.ce3806g = type { %struct.string___XUB, %struct.string___XUB, %struct.string___XUB, %struct.string___XUB }
%struct.FRAME.ce3806g__fxio__put__4 = type { i32, i32, i32, %struct.system__file_control_block__pstring*, i32, i32, i8 } %struct.FRAME.ce3806g__fxio__put__4 = type { i32, i32, i32, %struct.system__file_control_block__pstring*, i32, i32, i8 }

View File

@ -65,7 +65,8 @@ namespace {
char ExternalFunctionsPassedConstants::ID = 0; char ExternalFunctionsPassedConstants::ID = 0;
RegisterPass<ExternalFunctionsPassedConstants> RegisterPass<ExternalFunctionsPassedConstants>
P1("externalfnconstants", "Print external fn callsites passed constants"); P1("print-externalfnconstants",
"Print external fn callsites passed constants");
struct CallGraphPrinter : public ModulePass { struct CallGraphPrinter : public ModulePass {
static char ID; // Pass ID, replacement for typeid static char ID; // Pass ID, replacement for typeid
@ -83,5 +84,5 @@ namespace {
char CallGraphPrinter::ID = 0; char CallGraphPrinter::ID = 0;
RegisterPass<CallGraphPrinter> RegisterPass<CallGraphPrinter>
P2("callgraph", "Print a call graph"); P2("print-callgraph", "Print a call graph");
} }

View File

@ -79,7 +79,7 @@ namespace {
}; };
char CallGraphPrinter::ID = 0; char CallGraphPrinter::ID = 0;
RegisterPass<CallGraphPrinter> P2("print-callgraph", RegisterPass<CallGraphPrinter> P2("dot-callgraph",
"Print Call Graph to 'dot' file"); "Print Call Graph to 'dot' file");
} }

View File

@ -14,12 +14,12 @@
// //
// (1) As a reference for how to use the scc_iterator. // (1) As a reference for how to use the scc_iterator.
// (2) To print out the SCCs for a CFG or a CallGraph: // (2) To print out the SCCs for a CFG or a CallGraph:
// analyze -cfgscc to print the SCCs in each CFG of a module. // analyze -print-cfg-sccs to print the SCCs in each CFG of a module.
// analyze -cfgscc -stats to print the #SCCs and the maximum SCC size. // analyze -print-cfg-sccs -stats to print the #SCCs and the maximum SCC size.
// analyze -cfgscc -debug > /dev/null to watch the algorithm in action. // analyze -print-cfg-sccs -debug > /dev/null to watch the algorithm in action.
// //
// and similarly: // and similarly:
// analyze -callscc [-stats] [-debug] to print SCCs in the CallGraph // analyze -print-callgraph-sccs [-stats] [-debug] to print SCCs in the CallGraph
// //
// (3) To test the scc_iterator. // (3) To test the scc_iterator.
// //
@ -64,11 +64,11 @@ namespace {
char CFGSCC::ID = 0; char CFGSCC::ID = 0;
RegisterPass<CFGSCC> RegisterPass<CFGSCC>
Y("cfgscc", "Print SCCs of each function CFG"); Y("print-cfg-sccs", "Print SCCs of each function CFG");
char CallGraphSCC::ID = 0; char CallGraphSCC::ID = 0;
RegisterPass<CallGraphSCC> RegisterPass<CallGraphSCC>
Z("callscc", "Print SCCs of the Call Graph"); Z("print-callgraph-sccs", "Print SCCs of the Call Graph");
} }
bool CFGSCC::runOnFunction(Function &F) { bool CFGSCC::runOnFunction(Function &F) {