X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FPasses.html;h=bb1a64bd978061edb7fbd999aac2eabf56a76883;hb=e7de7e3574245fe4cdee3ea895c3aeabca04db63;hp=b7f2ca0fc7b16b57ff09f988680c115185ed9b1e;hpb=23a8ce5b958df2d954e7f940f2abf0ed36b0e072;p=oota-llvm.git diff --git a/docs/Passes.html b/docs/Passes.html index b7f2ca0fc7b..bb1a64bd978 100644 --- a/docs/Passes.html +++ b/docs/Passes.html @@ -116,7 +116,7 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print "
\n" if !
\n" if !
\n" if !
\n" if !
\n" if !
\n" if !
@@ -305,6 +307,12 @@ perl -e '$/ = undef; for (split(/\n/, <>)) { s:^ *///? ?::; print "
\n" if ! lexically identical expressions. This does not require any ahead of time analysis, so it is a very fast default implementation.
++ The ValueNumbering analysis passes are mostly deprecated. They are only used + by the Global Common Subexpression Elimination pass, which + is deprecated by the Global Value Numbering pass (which + does its value numbering on its own). +
\n" if !
Correlated Expression Elimination propagates information from conditional - branches to blocks dominated by destinations of the branch. It propagates - information from the condition check itself into the body of the branch, - allowing transformations like these for example:
- -- --if (i == 7) - ... 4*i; // constant propagation - -M = i+1; N = j+1; -if (i == j) - X = M-N; // = M-M == 0; -
This is called Correlated Expression Elimination because we eliminate or - simplify expressions that are correlated with the direction of a branch. In - this way we use static information to give us some information about the - dynamic value of a variable.
+ This pass munges the code in the input function to better prepare it for + SelectionDAG-based code generation. This works around limitations in it's + basic-block-at-a-time approach. It should eventually be removed.This pass is designed to be a very quick global transformation that eliminates global common subexpressions from a function. It does this by - using an existing value numbering implementation to identify the common + using an existing value numbering analysis pass to identify the common subexpressions, eliminating them when possible.
++ This pass is deprecated by the Global Value Numbering pass + (which does a better job with its own value numbering). +
@@ -912,6 +909,10 @@ if (i == j) This pass performs global value numbering to eliminate fully redundant instructions. It also performs simple dead load elimination. ++ Note that this pass does the value numbering itself, it does not use the + ValueNumbering analysis passes. +
@@ -929,6 +930,10 @@ if (i == j) live ranges, and should be used with caution on platforms that are very sensitive to register pressure. ++ Note that this pass does the value numbering itself, it does not use the + ValueNumbering analysis passes. +
@@ -1181,6 +1186,35 @@ if (i == j) + + ++ Jump threading tries to find distinct threads of control flow running through + a basic block. This pass looks at blocks that have multiple predecessors and + multiple successors. If one or more of the predecessors of the block can be + proven to always cause a jump to one of the successors, we forward the edge + from the predecessor to the successor by duplicating the contents of this + block. +
++ An example of when this can occur is code like this: +
+ +if () { ... + X = 4; +} +if (X < 3) {+ +
+ In this case, the unconditional branch at the end of the first if can be + revectored to the false side of the second if. +
++ This file implements the Dead Loop Deletion Pass. This pass is responsible + for eliminating loops with non-infinite computable trip counts that have no + side effects or volatile instructions, and do not contribute to the + computation of the function's return value. +
+- Lowers operations on vector datatypes into operations on more primitive vector - datatypes, and finally to scalar operations. -
-- This file implements lowering for the llvm.gc* intrinsics for targets - that do not natively support them (which includes the C backend). Note that - the code generated is not as efficient as it would be for targets that - natively support the GC intrinsics, but it is useful for getting new targets - up-and-running quickly. -
- -- This pass implements the code transformation described in this paper: -
- --- "Accurate Garbage Collection in an Uncooperative Environment" - Fergus Henderson, ISMM, 2002 -
- Lowers select instructions into conditional branches for targets that do not - have conditional moves or that have not implemented the select instruction - yet. -
- -- Note that this pass could be improved. In particular it turns every select - instruction into a new conditional branch, even though some common cases have - select instructions on the same predicate next to each other. It would be - better to use the same branch for the whole group of selects. -
-+ This pass performs various transformations related to eliminating memcpy + calls, or transforming sets of stores into memset's. +
++ This pass loops over all of the functions in the input module, looking for + dead declarations and removes them. Dead declarations are declarations of + functions for which no implementation is available (i.e., declarations for + unused library functions). +
++ This pass finds functions that return a struct (using a pointer to the struct + as the first argument of the function, marked with the 'sret' attribute) and + replaces them with a new function that simply returns each of the elements of + that struct (using multiple return values). +
+ ++ This pass works under a number of conditions: +
+ +Yet to be written.
++ Ensures that the module is in the form required by the Module Verifier pass. +
+ ++ Running the verifier runs this pass automatically, so there should be no need + to use it directly. +