mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 05:29:24 +00:00
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:
parent
1de42e8374
commit
3ee8fc9649
192
docs/Passes.html
192
docs/Passes.html
@ -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>
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -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");
|
||||||
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
@ -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:
|
||||||
|
@ -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]
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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() {
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
; RUN: llvm-as < %s | opt -prune-eh -inline -callgraph -disable-output |& \
|
; RUN: llvm-as < %s | opt -prune-eh -inline -print-callgraph \
|
||||||
; RUN: grep {Calls.*ce3806g__fxio__put__put_int64__4.1339} | count 2
|
; RUN: -disable-output |& \
|
||||||
|
; 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 }
|
||||||
%struct.RETURN = type { i8, i32 }
|
%struct.RETURN = type { i8, i32 }
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user