re PR tree-optimization/26242 (VRP is not documented in passes.texi)
PR 26242 * doc/passes.texi: Add documentation for pass_vrp, pass_ipa_pta, pass_fre, pass_store_ccp, pass_copy_prop, pass_store_copy_prop, pass_merge_phi, pass_nrv, pass_return_slot, pass_object_size, pass_lim, pass_linear_transform, pass_empty_loop, pass_complete_unroll, pass_loop_prefetch and pass_stdarg. From-SVN: r114200
This commit is contained in:
parent
6614f9f559
commit
a6719dc6ad
@ -1,3 +1,13 @@
|
||||
2006-05-29 Diego Novillo <dnovillo@redhat.com>
|
||||
|
||||
PR 26242
|
||||
* doc/passes.texi: Add documentation for pass_vrp, pass_ipa_pta,
|
||||
pass_fre, pass_store_ccp, pass_copy_prop,
|
||||
pass_store_copy_prop, pass_merge_phi, pass_nrv,
|
||||
pass_return_slot, pass_object_size, pass_lim,
|
||||
pass_linear_transform, pass_empty_loop, pass_complete_unroll,
|
||||
pass_loop_prefetch and pass_stdarg.
|
||||
|
||||
2005-05-29 Bernd Schmidt <bernd.schmidt@analog.com>
|
||||
|
||||
* config/bfin/bfin.opt (mfdpic): New option.
|
||||
|
@ -265,7 +265,7 @@ and is described by @code{pass_referenced_vars}.
|
||||
This pass rewrites the function such that it is in SSA form. After
|
||||
this pass, all @code{is_gimple_reg} variables will be referenced by
|
||||
@code{SSA_NAME}, and all occurrences of other variables will be
|
||||
annotated with @code{VDEFS} and @code{VUSES}; phi nodes will have
|
||||
annotated with @code{VDEFS} and @code{VUSES}; PHI nodes will have
|
||||
been inserted as necessary for each basic block. This pass is
|
||||
located in @file{tree-ssa.c} and is described by @code{pass_build_ssa}.
|
||||
|
||||
@ -295,9 +295,9 @@ expression simplification, and jump threading. It is run multiple times
|
||||
throughout the optimization process. It it located in @file{tree-ssa-dom.c}
|
||||
and is described by @code{pass_dominator}.
|
||||
|
||||
@item Redundant phi elimination
|
||||
@item Redundant PHI elimination
|
||||
|
||||
This pass removes phi nodes for which all of the arguments are the same
|
||||
This pass removes PHI nodes for which all of the arguments are the same
|
||||
value, excluding feedback. Such degenerate forms are typically created
|
||||
by removing unreachable code. The pass is run multiple times throughout
|
||||
the optimization process. It is located in @file{tree-ssa.c} and is
|
||||
@ -321,7 +321,7 @@ located in @file{tree-ssa-copyrename.c} and is described by
|
||||
|
||||
@item PHI node optimizations
|
||||
|
||||
This pass recognizes forms of phi inputs that can be represented as
|
||||
This pass recognizes forms of PHI inputs that can be represented as
|
||||
conditional expressions and rewrites them into straight line code.
|
||||
It is located in @file{tree-ssa-phiopt.c} and is described by
|
||||
@code{pass_phiopt}.
|
||||
@ -336,6 +336,9 @@ update the @code{VDEF}/@code{VUSE} memory tags for non-renamable
|
||||
aggregates so that we get fewer false kills. The pass is located
|
||||
in @file{tree-ssa-alias.c} and is described by @code{pass_may_alias}.
|
||||
|
||||
Interprocedural points-to information is located in
|
||||
@file{tree-ssa-structalias.c} and described by @code{pass_ipa_pta}.
|
||||
|
||||
@item Profiling
|
||||
|
||||
This pass rewrites the function in order to collect runtime block
|
||||
@ -387,6 +390,12 @@ divisions to multiplications by the reciprocal. The pass is located
|
||||
in @file{tree-ssa-math-opts.c} and is described by
|
||||
@code{pass_cse_reciprocal}.
|
||||
|
||||
@item Full redundancy elimination
|
||||
|
||||
This is a simpler form of PRE that only eliminate redundancies that
|
||||
occur an all paths. It is located in @file{tree-ssa-pre.c} and
|
||||
described by @code{pass_fre}.
|
||||
|
||||
@item Loop optimization
|
||||
|
||||
The main driver of the pass is placed in @file{tree-ssa-loop.c}
|
||||
@ -440,11 +449,12 @@ Analysis of data references is in @file{tree-data-ref.c}.
|
||||
@item Tree level if-conversion for vectorizer
|
||||
|
||||
This pass applies if-conversion to simple loops to help vectorizer.
|
||||
We identify if convertable loops, if-convert statements and merge
|
||||
We identify if convertible loops, if-convert statements and merge
|
||||
basic blocks in one big block. The idea is to present loop in such
|
||||
form so that vectorizer can have one to one mapping between statements
|
||||
and available vector operations. This patch re-introduces COND_EXPR
|
||||
at GIMPLE level. This pass is located in @file{tree-if-conv.c}.
|
||||
at GIMPLE level. This pass is located in @file{tree-if-conv.c} and is
|
||||
described by @code{pass_if_conversion}.
|
||||
|
||||
@item Conditional constant propagation
|
||||
|
||||
@ -453,9 +463,38 @@ that must be constant even in the presence of conditional branches.
|
||||
The pass is located in @file{tree-ssa-ccp.c} and is described
|
||||
by @code{pass_ccp}.
|
||||
|
||||
@item Folding builtin functions
|
||||
A related pass that works on memory loads and stores, and not just
|
||||
register values, is located in @file{tree-ssa-ccp.c} and described by
|
||||
@code{pass_store_ccp}.
|
||||
|
||||
This pass simplifies builtin functions, as applicable, with constant
|
||||
@item Conditional copy propagation
|
||||
|
||||
This is similar to constant propagation but the lattice of values is
|
||||
the ``copy-of'' relation. It eliminates redundant copies from the
|
||||
code. The pass is located in @file{tree-ssa-copy.c} and described by
|
||||
@code{pass_copy_prop}.
|
||||
|
||||
A related pass that works on memory copies, and not just register
|
||||
copies, is located in @file{tree-ssa-copy.c} and described by
|
||||
@code{pass_store_copy_prop}.
|
||||
|
||||
@item Value range propagation
|
||||
|
||||
This transformation is similar to constant propagation but
|
||||
instead of propagating single constant values, it propagates
|
||||
known value ranges. The implementation is based on Patterson's
|
||||
range propagation algorithm (Accurate Static Branch Prediction by
|
||||
Value Range Propagation, J. R. C. Patterson, PLDI '95). In
|
||||
contrast to Patterson's algorithm, this implementation does not
|
||||
propagate branch probabilities nor it uses more than a single
|
||||
range per SSA name. This means that the current implementation
|
||||
cannot be used for branch prediction (though adapting it would
|
||||
not be difficult). The pass is located in @file{tree-vrp.c} and is
|
||||
described by @code{pass_vrp}.
|
||||
|
||||
@item Folding built-in functions
|
||||
|
||||
This pass simplifies built-in functions, as applicable, with constant
|
||||
arguments or with inferrable string lengths. It is located in
|
||||
@file{tree-ssa-ccp.c} and is described by @code{pass_fold_builtins}.
|
||||
|
||||
@ -465,12 +504,6 @@ This pass identifies critical edges and inserts empty basic blocks
|
||||
such that the edge is no longer critical. The pass is located in
|
||||
@file{tree-cfg.c} and is described by @code{pass_split_crit_edges}.
|
||||
|
||||
@item Partial redundancy elimination
|
||||
|
||||
This pass answers the question ``given a hypothetical temporary
|
||||
variable, what expressions could we eliminate?'' It is located
|
||||
in @file{tree-ssa-pre.c} and is described by @code{pass_pre}.
|
||||
|
||||
@item Control dependence dead code elimination
|
||||
|
||||
This pass is a stronger form of dead code elimination that can
|
||||
@ -514,7 +547,94 @@ is described by @code{pass_mudflap_2}.
|
||||
This pass rewrites the function such that it is in normal form. At
|
||||
the same time, we eliminate as many single-use temporaries as possible,
|
||||
so the intermediate language is no longer GIMPLE, but GENERIC@. The
|
||||
pass is located in @file{tree-ssa.c} and is described by @code{pass_del_ssa}.
|
||||
pass is located in @file{tree-outof-ssa.c} and is described by
|
||||
@code{pass_del_ssa}.
|
||||
|
||||
@item Merge PHI nodes that feed into one another
|
||||
|
||||
This is part of the CFG cleanup passes. It attempts to join PHI nodes
|
||||
from a forwarder CFG block into another block with PHI nodes. The
|
||||
pass is located in @file{tree-cfgcleanup.c} and is described by
|
||||
@code{pass_merge_phi}.
|
||||
|
||||
@item Return value optimization
|
||||
|
||||
If a function always returns the same local variable, and that local
|
||||
variable is an aggregate type, then the variable is replaced with the
|
||||
return value for the function (i.e., the function's DECL_RESULT). This
|
||||
is equivalent to the C++ named return value optimization applied to
|
||||
GIMPLE. The pass is located in @file{tree-nrv.c} and is described by
|
||||
@code{pass_nrv}.
|
||||
|
||||
@item Return slot optimization
|
||||
|
||||
If a function returns a memory object and is called as @code{var =
|
||||
foo()}, this pass tries to change the call so that the address of
|
||||
@code{var} is sent to the caller to avoid an extra memory copy. This
|
||||
pass is located in @code{tree-nrv.c} and is described by
|
||||
@code{pass_return_slot}.
|
||||
|
||||
@item Optimize calls to @code{__builtin_object_size}
|
||||
|
||||
This is a propagation pass similar to CCP that tries to remove calls
|
||||
to @code{__builtin_object_size} when the size of the object can be
|
||||
computed at compile-time. This pass is located in
|
||||
@file{tree-object-size.c} and is described by
|
||||
@code{pass_object_sizes}.
|
||||
|
||||
@item Loop invariant motion
|
||||
|
||||
This pass removes expensive loop-invariant computations out of loops.
|
||||
The pass is located in @file{tree-ssa-loop.c} and described by
|
||||
@code{pass_lim}.
|
||||
|
||||
@item Loop nest optimizations
|
||||
|
||||
This is a family of loop transformations that works on loop nests. It
|
||||
includes loop interchange, scaling, skewing and reversal and they are
|
||||
all geared to the optimization of data locality in array traversals
|
||||
and the removal of dependencies that hamper optimizations such as loop
|
||||
parallelization and vectorization. The pass is located in
|
||||
@file{tree-loop-linear.c} and described by
|
||||
@code{pass_linear_transform}.
|
||||
|
||||
@item Removal of empty loops
|
||||
|
||||
This pass removes loops with no code in them. The pass is located in
|
||||
@file{tree-ssa-loop-ivcanon.c} and described by
|
||||
@code{pass_empty_loop}.
|
||||
|
||||
@item Unrolling of small loops
|
||||
|
||||
This pass completely unrolls loops with few iterations. The pass
|
||||
is located in @file{tree-ssa-loop-ivcanon.c} and described by
|
||||
@code{pass_complete_unroll}.
|
||||
|
||||
@item Array prefetching
|
||||
|
||||
This pass issues prefetch instructions for array references inside
|
||||
loops. The pass is located in @file{tree-ssa-loop-prefetch.c} and
|
||||
described by @code{pass_loop_prefetch}.
|
||||
|
||||
@item Reassociation
|
||||
|
||||
This pass rewrites arithmetic expressions to enable optimizations that
|
||||
operate on them, like redundancy elimination and vectorization. The
|
||||
pass is located in @file{tree-ssa-reassoc.c} and described by
|
||||
@code{pass_reassoc}.
|
||||
|
||||
@item Optimization of @code{stdarg} functions
|
||||
|
||||
This pass tries to avoid the saving of register arguments into the
|
||||
stack on entry to @code{stdarg} functions. If the function doesn't
|
||||
use any @code{va_start} macros, no registers need to be saved. If
|
||||
@code{va_start} macros are used, the @code{va_list} variables don't
|
||||
escape the function, it is only necessary to save registers that will
|
||||
be used in @code{va_arg} macros. For instance, if @code{va_arg} is
|
||||
only used with integral types in the function, floating point
|
||||
registers don't need to be saved. This pass is located in
|
||||
@code{tree-stdarg.c} and described by @code{pass_stdarg}.
|
||||
|
||||
@end itemize
|
||||
|
||||
@node RTL passes
|
||||
|
Loading…
x
Reference in New Issue
Block a user