diff options
author | Duncan Sands <baldrick@free.fr> | 2010-07-06 15:52:15 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2010-07-06 15:52:15 +0000 |
commit | 5c60386dbc74f1e5e30ead158708fac02fedbb40 (patch) | |
tree | 7380094d3218bf6e1fe93562f02e272b368704ec | |
parent | 258c58cc6257cf61c9bdbb9c4cea67ba2691adf0 (diff) |
Bring the list of passes and their descriptions up to date.
Patch by Kenneth Hoste.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107669 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/Passes.html | 701 |
1 files changed, 539 insertions, 162 deletions
diff --git a/docs/Passes.html b/docs/Passes.html index 8b9bd07f11..fb3bc9474b 100644 --- a/docs/Passes.html +++ b/docs/Passes.html @@ -27,7 +27,7 @@ while (<HELP>) { my $o = $order{$1}; $o = "000" unless defined $o; push @x, "$o<tr><td><a href=\"#$1\">-$1</a></td><td>$2</td></tr>\n"; - push @y, "$o <a name=\"$1\">$2</a>\n"; + push @y, "$o <a name=\"$1\">-$1: $2</a>\n"; } @x = map { s/^\d\d\d//; $_ } sort @x; @y = map { s/^\d\d\d//; $_ } sort @y; @@ -91,29 +91,46 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <tr><td><a href="#dot-postdom-only">-dot-postdom-only</a></td><td>Print post dominator tree 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="#instcount">-instcount</a></td><td>Counts the various types of Instructions</td></tr> +<tr><td><a href="#interprocedural-aa-eval">-interprocedural-aa-eval</a></td><td>Exhaustive Interprocedural Alias Analysis Precision Evaluator</td></tr> +<tr><td><a href="#interprocedural-basic-aa">-interprocedural-basic-aa</a></td><td>Interprocedural Basic Alias Analysis</td></tr> <tr><td><a href="#intervals">-intervals</a></td><td>Interval Partition Construction</td></tr> -<tr><td><a href="#loops">-loops</a></td><td>Natural Loop Construction</td></tr> +<tr><td><a href="#iv-users">-iv-users</a></td><td>Induction Variable Users</td></tr> +<tr><td><a href="#lazy-value-info">-lazy-value-info</a></td><td>Lazy Value Information Analysis</td></tr> +<tr><td><a href="#lda">-lda</a></td><td>Loop Dependence Analysis</td></tr> +<tr><td><a href="#libcall-aa">-libcall-aa</a></td><td>LibCall Alias Analysis</td></tr> +<tr><td><a href="#lint">-lint</a></td><td>Check for common errors in LLVM IR</td></tr> +<tr><td><a href="#live-values">-live-values</a></td><td>Value Liveness Analysis</td></tr> +<tr><td><a href="#loops">-loops</a></td><td>Natural Loop Information</td></tr> <tr><td><a href="#memdep">-memdep</a></td><td>Memory Dependence Analysis</td></tr> +<tr><td><a href="#module-debuginfo">-module-debuginfo</a></td><td>Prints module debug info metadata</td></tr> <tr><td><a href="#no-aa">-no-aa</a></td><td>No Alias Analysis (always returns 'may' alias)</td></tr> <tr><td><a href="#no-profile">-no-profile</a></td><td>No Profile Information</td></tr> +<tr><td><a href="#pointertracking">-pointertracking</a></td><td>Track pointer bounds</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="#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 a call graph</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-sccs">-print-cfg-sccs</a></td><td>Print SCCs of each function CFG</td></tr> +<tr><td><a href="#print-dbginfo">-print-dbginfo</a></td><td>Print debug info in human readable form</td></tr> +<tr><td><a href="#print-dom-info">-print-dom-info</a></td><td>Dominator Info Printer</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="#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-estimator">-profile-estimator</a></td><td>Estimate profiling information</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-verifier">-profile-verifier</a></td><td>Verify profiling information</td></tr> <tr><td><a href="#scalar-evolution">-scalar-evolution</a></td><td>Scalar Evolution Analysis</td></tr> +<tr><td><a href="#scev-aa">-scev-aa</a></td><td>ScalarEvolution-based Alias Analysis</td></tr> <tr><td><a href="#targetdata">-targetdata</a></td><td>Target Data Layout</td></tr> <tr><th colspan="2"><b>TRANSFORM PASSES</b></th></tr> <tr><th>Option</th><th>Name</th></tr> +<tr><td><a href="#abcd">-abcd</a></td><td>Remove redundant conditional branches</td></tr> <tr><td><a href="#adce">-adce</a></td><td>Aggressive Dead Code Elimination</td></tr> +<tr><td><a href="#always-inline">-always-inline</a></td><td>Inliner for always_inline functions</td></tr> <tr><td><a href="#argpromotion">-argpromotion</a></td><td>Promote 'by reference' arguments to scalars</td></tr> <tr><td><a href="#block-placement">-block-placement</a></td><td>Profile Guided Basic Block Placement</td></tr> <tr><td><a href="#break-crit-edges">-break-crit-edges</a></td><td>Break critical edges in CFG</td></tr> @@ -125,16 +142,14 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <tr><td><a href="#deadtypeelim">-deadtypeelim</a></td><td>Dead Type Elimination</td></tr> <tr><td><a href="#die">-die</a></td><td>Dead Instruction Elimination</td></tr> <tr><td><a href="#dse">-dse</a></td><td>Dead Store Elimination</td></tr> +<tr><td><a href="#functionattrs">-functionattrs</a></td><td>Deduce function attributes</td></tr> <tr><td><a href="#globaldce">-globaldce</a></td><td>Dead Global Elimination</td></tr> <tr><td><a href="#globalopt">-globalopt</a></td><td>Global Variable Optimizer</td></tr> <tr><td><a href="#gvn">-gvn</a></td><td>Global Value Numbering</td></tr> <tr><td><a href="#indvars">-indvars</a></td><td>Canonicalize Induction Variables</td></tr> <tr><td><a href="#inline">-inline</a></td><td>Function Integration/Inlining</td></tr> -<tr><td><a href="#insert-block-profiling">-insert-block-profiling</a></td><td>Insert instrumentation for block profiling</td></tr> <tr><td><a href="#insert-edge-profiling">-insert-edge-profiling</a></td><td>Insert instrumentation for edge profiling</td></tr> -<tr><td><a href="#insert-function-profiling">-insert-function-profiling</a></td><td>Insert instrumentation for function profiling</td></tr> -<tr><td><a href="#insert-null-profiling-rs">-insert-null-profiling-rs</a></td><td>Measure profiling framework overhead</td></tr> -<tr><td><a href="#insert-rs-profiling-framework">-insert-rs-profiling-framework</a></td><td>Insert random sampling instrumentation framework</td></tr> +<tr><td><a href="#insert-optimal-edge-profiling">-insert-optimal-edge-profiling</a></td><td>Insert optimal instrumentation for edge profiling</td></tr> <tr><td><a href="#instcombine">-instcombine</a></td><td>Combine redundant instructions</td></tr> <tr><td><a href="#internalize">-internalize</a></td><td>Internalize Global Symbols</td></tr> <tr><td><a href="#ipconstprop">-ipconstprop</a></td><td>Interprocedural constant propagation</td></tr> @@ -156,16 +171,27 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <tr><td><a href="#lowerswitch">-lowerswitch</a></td><td>Lower SwitchInst's to branches</td></tr> <tr><td><a href="#mem2reg">-mem2reg</a></td><td>Promote Memory to Register</td></tr> <tr><td><a href="#memcpyopt">-memcpyopt</a></td><td>Optimize use of memcpy and friends</td></tr> +<tr><td><a href="#mergefunc">-mergefunc</a></td><td>Merge Functions</td></tr> <tr><td><a href="#mergereturn">-mergereturn</a></td><td>Unify function exit nodes</td></tr> +<tr><td><a href="#partial-inliner">-partial-inliner</a></td><td>Partial Inliner</td></tr> +<tr><td><a href="#partialspecialization">-partialspecialization</a></td><td>Partial Specialization</td></tr> <tr><td><a href="#prune-eh">-prune-eh</a></td><td>Remove unused exception handling info</td></tr> <tr><td><a href="#reassociate">-reassociate</a></td><td>Reassociate expressions</td></tr> <tr><td><a href="#reg2mem">-reg2mem</a></td><td>Demote all values to stack slots</td></tr> <tr><td><a href="#scalarrepl">-scalarrepl</a></td><td>Scalar Replacement of Aggregates</td></tr> <tr><td><a href="#sccp">-sccp</a></td><td>Sparse Conditional Constant Propagation</td></tr> +<tr><td><a href="#sink">-sink</a></td><td>Code Sinking</td></tr> <tr><td><a href="#simplify-libcalls">-simplify-libcalls</a></td><td>Simplify well-known library calls</td></tr> +<tr><td><a href="#simplify-libcalls-halfpowr">-simplify-libcalls-halfpowr</a></td><td>Simplify half_powr library calls</td></tr> <tr><td><a href="#simplifycfg">-simplifycfg</a></td><td>Simplify the CFG</td></tr> +<tr><td><a href="#split-geps">-split-geps</a></td><td>Split complex GEPs into simple GEPs</td></tr> +<tr><td><a href="#ssi">-ssi</a></td><td>Static Single Information Construction</td></tr> +<tr><td><a href="#ssi-everything">-ssi-everything</a></td><td>Static Single Information Construction (everything, intended for debugging)</td></tr> <tr><td><a href="#strip">-strip</a></td><td>Strip all symbols from a module</td></tr> +<tr><td><a href="#strip-dead-debug-info">-strip-dead-debug-info</a></td><td>Strip debug info for unused symbols</td></tr> <tr><td><a href="#strip-dead-prototypes">-strip-dead-prototypes</a></td><td>Remove unused function declarations</td></tr> +<tr><td><a href="#strip-debug-declare">-strip-debug-declare</a></td><td>Strip all llvm.dbg.declare intrinsics</td></tr> +<tr><td><a href="#strip-nondebug">-strip-nondebug</a></td><td>Strip all symbols, except dbg symbols, from a module</td></tr> <tr><td><a href="#sretpromotion">-sretpromotion</a></td><td>Promote sret arguments</td></tr> <tr><td><a href="#tailcallelim">-tailcallelim</a></td><td>Tail Call Elimination</td></tr> <tr><td><a href="#tailduplicate">-tailduplicate</a></td><td>Tail Duplication</td></tr> @@ -175,6 +201,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <tr><th>Option</th><th>Name</th></tr> <tr><td><a href="#deadarghaX0r">-deadarghaX0r</a></td><td>Dead Argument Hacking (BUGPOINT USE ONLY; DO NOT USE)</td></tr> <tr><td><a href="#extract-blocks">-extract-blocks</a></td><td>Extract Basic Blocks From Module (for bugpoint use)</td></tr> +<tr><td><a href="#instnamer">-instnamer</a></td><td>Assign names to anonymous instructions</td></tr> <tr><td><a href="#preverify">-preverify</a></td><td>Preliminary module verification</td></tr> <tr><td><a href="#verify">-verify</a></td><td>Module Verifier</td></tr> <tr><td><a href="#view-cfg">-view-cfg</a></td><td>View CFG of function</td></tr> @@ -194,7 +221,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="aa-eval">Exhaustive Alias Analysis Precision Evaluator</a> + <a name="aa-eval">-aa-eval: Exhaustive Alias Analysis Precision Evaluator</a> </div> <div class="doc_text"> <p>This is a simple N^2 alias analysis accuracy evaluator. @@ -208,7 +235,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="basicaa">Basic Alias Analysis (default AA impl)</a> + <a name="basicaa">-basicaa: Basic Alias Analysis (default AA impl)</a> </div> <div class="doc_text"> <p> @@ -220,7 +247,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="basiccg">Basic CallGraph Construction</a> + <a name="basiccg">-basiccg: Basic CallGraph Construction</a> </div> <div class="doc_text"> <p>Yet to be written.</p> @@ -228,7 +255,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="codegenprepare">Optimize for code generation</a> + <a name="codegenprepare">-codegenprepare: Optimize for code generation</a> </div> <div class="doc_text"> <p> @@ -240,7 +267,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="count-aa">Count Alias Analysis Query Responses</a> + <a name="count-aa">-count-aa: Count Alias Analysis Query Responses</a> </div> <div class="doc_text"> <p> @@ -251,7 +278,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="debug-aa">AA use debugger</a> + <a name="debug-aa">-debug-aa: AA use debugger</a> </div> <div class="doc_text"> <p> @@ -268,7 +295,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="domfrontier">Dominance Frontier Construction</a> + <a name="domfrontier">-domfrontier: Dominance Frontier Construction</a> </div> <div class="doc_text"> <p> @@ -279,7 +306,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="domtree">Dominator Tree Construction</a> + <a name="domtree">-domtree: Dominator Tree Construction</a> </div> <div class="doc_text"> <p> @@ -290,7 +317,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="dot-callgraph">Print Call Graph to 'dot' file</a> + <a name="dot-callgraph">-dot-callgraph: Print Call Graph to 'dot' file</a> </div> <div class="doc_text"> <p> @@ -302,7 +329,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="dot-cfg">Print CFG of function to 'dot' file</a> + <a name="dot-cfg">-dot-cfg: Print CFG of function to 'dot' file</a> </div> <div class="doc_text"> <p> @@ -314,7 +341,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="dot-cfg-only">Print CFG of function to 'dot' file (with no function bodies)</a> + <a name="dot-cfg-only">-dot-cfg-only: Print CFG of function to 'dot' file (with no function bodies)</a> </div> <div class="doc_text"> <p> @@ -327,7 +354,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="dot-dom">Print dominator tree of function to 'dot' file</a> + <a name="dot-dom">-dot-dom: Print dominator tree of function to 'dot' file</a> </div> <div class="doc_text"> <p> @@ -339,7 +366,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="dot-dom-only">Print dominator tree of function to 'dot' file (with no + <a name="dot-dom-only">-dot-dom-only: Print dominator tree of function to 'dot' file (with no function bodies)</a> </div> <div class="doc_text"> @@ -353,7 +380,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="dot-postdom">Print post dominator tree of function to 'dot' file</a> + <a name="dot-postdom">dot-postdom: Print post dominator tree of function to 'dot' file</a> </div> <div class="doc_text"> <p> @@ -365,7 +392,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="dot-postdom-only">Print post dominator tree of function to 'dot' file + <a name="dot-postdom-only">dot-postdom-only: Print post dominator tree of function to 'dot' file (with no function bodies)</a> </div> <div class="doc_text"> @@ -379,7 +406,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="globalsmodref-aa">Simple mod/ref analysis for globals</a> + <a name="globalsmodref-aa">-globalsmodref-aa: Simple mod/ref analysis for globals</a> </div> <div class="doc_text"> <p> @@ -392,7 +419,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="instcount">Counts the various types of Instructions</a> + <a name="instcount">-instcount: Counts the various types of Instructions</a> </div> <div class="doc_text"> <p> @@ -402,7 +429,30 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="intervals">Interval Partition Construction</a> + <a name="interprocedural-aa-eval">-interprocedural-aa-eval: Exhaustive Interprocedural Alias Analysis Precision Evaluator</a> +</div> +<div class="doc_text"> + <p>This pass implements a simple N^2 alias analysis accuracy evaluator. + Basically, for each function in the program, it simply queries to see how the + alias analysis implementation answers alias queries between each pair of + pointers in the function. + </p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="interprocedural-basic-aa">-interprocedural-basic-aa: Interprocedural Basic Alias Analysis</a> +</div> +<div class="doc_text"> + <p>This pass defines the default implementation of the Alias Analysis interface + that simply implements a few identities (two different globals cannot alias, + etc), but otherwise does no analysis. + </p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="intervals">-intervals: Interval Partition Construction</a> </div> <div class="doc_text"> <p> @@ -418,7 +468,80 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="loops">Natural Loop Construction</a> + <a name="iv-users">-iv-users: Induction Variable Users</a> +</div> +<div class="doc_text"> + <p>Bookkeeping for "interesting" users of expressions computed from + induction variables.</p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="lazy-value-info">-lazy-value-info: Lazy Value Information Analysis</a> +</div> +<div class="doc_text"> + <p>Interface for lazy computation of value constraint information.</p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="lda">-lda: Loop Dependence Analysis</a> +</div> +<div class="doc_text"> + <p>Loop dependence analysis framework, which is used to detect dependences in + memory accesses in loops.</p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="libcall-aa">-libcall-aa: LibCall Alias Analysis</a> +</div> +<div class="doc_text"> + <p>LibCall Alias Analysis.</p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="lint">-lint: Check for common errors in LLVM IR</a> +</div> +<div class="doc_text"> + <p>This pass statically checks for common and easily-identified constructs + which produce undefined or likely unintended behavior in LLVM IR.</p> + + <p>It is not a guarantee of correctness, in two ways. First, it isn't + comprehensive. There are checks which could be done statically which are + not yet implemented. Some of these are indicated by TODO comments, but + those aren't comprehensive either. Second, many conditions cannot be + checked statically. This pass does no dynamic instrumentation, so it + can't check for all possible problems.</p> + + <p>Another limitation is that it assumes all code will be executed. A store + through a null pointer in a basic block which is never reached is harmless, + but this pass will warn about it anyway.</p> + + <p>Optimization passes may make conditions that this pass checks for more or + less obvious. If an optimization pass appears to be introducing a warning, + it may be that the optimization pass is merely exposing an existing + condition in the code.</p> + + <p>This code may be run before instcombine. In many cases, instcombine checks + for the same kinds of things and turns instructions with undefined behavior + into unreachable (or equivalent). Because of this, this pass makes some + effort to look through bitcasts and so on. + </p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="live-values">-live-values: Values Liveness Analysis</a> +</div> +<div class="doc_text"> + <p>LLVM IR Value liveness analysis pass.</p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="loops">-loops: Natural Loop Construction</a> </div> <div class="doc_text"> <p> @@ -431,7 +554,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="memdep">Memory Dependence Analysis</a> + <a name="memdep">-memdep: Memory Dependence Analysis</a> </div> <div class="doc_text"> <p> @@ -444,7 +567,20 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="no-aa">No Alias Analysis (always returns 'may' alias)</a> + <a name="module-debuginfo">-module-debuginfo: Prints module debug info metadata</a> +</div> +<div class="doc_text"> + <p>This pass decodes the debug info metadata in a module and prints in a + (sufficiently-prepared-) human-readable form. + + For example, run this pass from opt along with the -analyze option, and + it'll print to standard output. + </p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="no-aa">-no-aa: No Alias Analysis (always returns 'may' alias)</a> </div> <div class="doc_text"> <p> @@ -456,7 +592,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="no-profile">No Profile Information</a> + <a name="no-profile">-no-profile: No Profile Information</a> </div> <div class="doc_text"> <p> @@ -467,7 +603,16 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="postdomfrontier">Post-Dominance Frontier Construction</a> + <a name="pointertracking">-pointertracking: Track pointer bounds.</a> +</div> +<div class="doc_text"> + <p>Tracking of pointer bounds. + </p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="postdomfrontier">-postdomfrontier: Post-Dominance Frontier Construction</a> </div> <div class="doc_text"> <p> @@ -478,7 +623,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="postdomtree">Post-Dominator Tree Construction</a> + <a name="postdomtree">-postdomtree: Post-Dominator Tree Construction</a> </div> <div class="doc_text"> <p> @@ -489,7 +634,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="print-alias-sets">Alias Set Printer</a> + <a name="print-alias-sets">-print-alias-sets: Alias Set Printer</a> </div> <div class="doc_text"> <p>Yet to be written.</p> @@ -497,7 +642,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="print-callgraph">Print a call graph</a> + <a name="print-callgraph">-print-callgraph: Print a call graph</a> </div> <div class="doc_text"> <p> @@ -508,7 +653,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="print-callgraph-sccs">Print SCCs of the Call Graph</a> + <a name="print-callgraph-sccs">-print-callgraph-sccs: Print SCCs of the Call Graph</a> </div> <div class="doc_text"> <p> @@ -519,7 +664,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="print-cfg-sccs">Print SCCs of each function CFG</a> + <a name="print-cfg-sccs">-print-cfg-sccs: Print SCCs of each function CFG</a> </div> <div class="doc_text"> <p> @@ -530,7 +675,31 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="print-externalfnconstants">Print external fn callsites passed constants</a> + <a name="print-dbginfo">-print-dbginfo: Print debug info in human readable form</a> +</div> +<div class="doc_text"> + <p>Pass that prints instructions, and associated debug info: + <ul> + + <li>source/line/col information</li> + <li>original variable name</li> + <li>original type name</li> + </ul> + + </p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="print-dom-info">-print-dom-info: Dominator Info Printer</a> +</div> +<div class="doc_text"> + <p>Dominator Info Printer.</p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="print-externalfnconstants">-print-externalfnconstants: Print external fn callsites passed constants</a> </div> <div class="doc_text"> <p> @@ -543,7 +712,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="print-function">Print function to stderr</a> + <a name="print-function">-print-function: Print function to stderr</a> </div> <div class="doc_text"> <p> @@ -555,7 +724,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="print-module">Print module to stderr</a> + <a name="print-module">-print-module: Print module to stderr</a> </div> <div class="doc_text"> <p> @@ -565,7 +734,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="print-used-types">Find Used Types</a> + <a name="print-used-types">-print-used-types: Find Used Types</a> </div> <div class="doc_text"> <p> @@ -576,7 +745,17 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="profile-loader">Load profile information from llvmprof.out</a> + <a name="profile-estimator">-profile-estimator: Estimate profiling information</a> +</div> +<div class="doc_text"> + <p>Profiling information that estimates the profiling information + in a very crude and unimaginative way. + </p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="profile-loader">-profile-loader: Load profile information from llvmprof.out</a> </div> <div class="doc_text"> <p> @@ -587,7 +766,15 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="scalar-evolution">Scalar Evolution Analysis</a> + <a name="profile-verifier">-profile-verifier: Verify profiling information</a> +</div> +<div class="doc_text"> + <p>Pass that checks profiling information for plausibility.</p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="scalar-evolution">-scalar-evolution: Scalar Evolution Analysis</a> </div> <div class="doc_text"> <p> @@ -606,7 +793,45 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="targetdata">Target Data Layout</a> + <a name="scev-aa">-scev-aa: </a> +</div> +<div class="doc_text"> + <p>Simple alias analysis implemented in terms of ScalarEvolution queries. + + This differs from traditional loop dependence analysis in that it tests + for dependencies within a single iteration of a loop, rather than + dependencies between different iterations. + + ScalarEvolution has a more complete understanding of pointer arithmetic + than BasicAliasAnalysis' collection of ad-hoc analyses. + </p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="strip-dead-debug-info">-strip-dead-debug-info: Strip debug info for unused symbols</a> +</div> +<div class="doc_text"> + <p> + performs code stripping. this transformation can delete: + </p> + + <ol> + <li>names for virtual registers</li> + <li>symbols for internal globals and functions</li> + <li>debug information</li> + </ol> + + <p> + note that this transformation makes code much less readable, so it should + only be used in situations where the <tt>strip</tt> utility would be used, + such as reducing code size or making it harder to reverse engineer code. + </p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="targetdata">-targetdata: Target Data Layout</a> </div> <div class="doc_text"> <p>Provides other passes access to information on how the size and alignment @@ -621,7 +846,22 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="adce">Aggressive Dead Code Elimination</a> + <a name="abcd">-abcd: Remove redundant conditional branches</a> +</div> +<div class="doc_text"> + <p>ABCD removes conditional branch instructions that can be proved redundant. + With the SSI representation, each variable has a constraint. By analyzing these + constraints we can prove that a branch is redundant. When a branch is proved + redundant it means that one direction will always be taken; thus, we can change + this branch into an unconditional jump.</p> + <p>It is advisable to run <a href="#simplifycfg">SimplifyCFG</a> and + <a href="#adce">Aggressive Dead Code Elimination</a> after ABCD + to clean up the code.</p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="adce">-adce: Aggressive Dead Code Elimination</a> </div> <div class="doc_text"> <p>ADCE aggressively tries to eliminate code. This pass is similar to @@ -632,7 +872,16 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="argpromotion">Promote 'by reference' arguments to scalars</a> + <a name="always-inline">-always-inline: Inliner for always_inline functions</a> +</div> +<div class="doc_text"> + <p>A custom inliner that handles only functions that are marked as + "always inline".</p> +</div> + +<!-------------------------------------------------------------------------- --> +<div class="doc_subsection"> + <a name="argpromotion">-argpromotion: Promote 'by reference' arguments to scalars</a> </div> <div class="doc_text"> <p> @@ -663,7 +912,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------------------------------------------------------------- --> <div class="doc_subsection"> - <a name="block-placement">Profile Guided Basic Block Placement</a> + <a name="block-placement">-block-placement: Profile Guided Basic Block Placement</a> </div> <div class="doc_text"> <p>This pass is a very simple profile guided basic block placement algorithm. @@ -675,7 +924,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print " <p>\n" if ! <!-------------------- |