Commit 94324dae by Eric Botcazou Committed by Eric Botcazou

passes.texi: Standardize spelling of RTL, Tree and Tree SSA.

	* doc/passes.texi: Standardize spelling of RTL, Tree and Tree SSA.
	Remove outdated reference to flow.c and fix nits.
	* doc/gccint.texi: Tweak RTL description.
	* doc/rtl.texi: Likewise.

From-SVN: r147821
parent 22702f93
2009-05-23 Eric Botcazou <ebotcazou@adacore.com>
* doc/passes.texi: Standardize spelling of RTL, Tree and Tree SSA.
Remove outdated reference to flow.c and fix nits.
* doc/gccint.texi: Tweak RTL description.
* doc/rtl.texi: Likewise.
2009-05-23 Denis Chertykov <chertykov@gmail.com> 2009-05-23 Denis Chertykov <chertykov@gmail.com>
* config/avr/avr.c: Change my email address. * config/avr/avr.c: Change my email address.
......
...@@ -109,10 +109,10 @@ Additional tutorial information is linked to from ...@@ -109,10 +109,10 @@ Additional tutorial information is linked to from
* Options:: Option specification files. * Options:: Option specification files.
* Passes:: Order of passes, what they do, and what each file is for. * Passes:: Order of passes, what they do, and what each file is for.
* Trees:: The source representation used by the C and C++ front ends. * Trees:: The source representation used by the C and C++ front ends.
* RTL:: The intermediate representation that most passes work on.
* GENERIC:: Language-independent representation generated by Front Ends * GENERIC:: Language-independent representation generated by Front Ends
* GIMPLE:: Tuple representation used by Tree SSA optimizers * GIMPLE:: Tuple representation used by Tree SSA optimizers
* Tree SSA:: Analysis and optimization of GIMPLE * Tree SSA:: Analysis and optimization of GIMPLE
* RTL:: Machine-dependent low-level intermediate representation.
* Control Flow:: Maintaining and manipulating the control flow graph. * Control Flow:: Maintaining and manipulating the control flow graph.
* Loop Analysis and Representation:: Analysis and representation of loops * Loop Analysis and Representation:: Analysis and representation of loops
* Machine Desc:: How to write machine description instruction patterns. * Machine Desc:: How to write machine description instruction patterns.
......
...@@ -21,7 +21,7 @@ where near complete. ...@@ -21,7 +21,7 @@ where near complete.
* Parsing pass:: The language front end turns text into bits. * Parsing pass:: The language front end turns text into bits.
* Gimplification pass:: The bits are turned into something we can optimize. * Gimplification pass:: The bits are turned into something we can optimize.
* Pass manager:: Sequencing the optimization passes. * Pass manager:: Sequencing the optimization passes.
* Tree-SSA passes:: Optimizations on a high-level representation. * Tree SSA passes:: Optimizations on a high-level representation.
* RTL passes:: Optimizations on a low-level representation. * RTL passes:: Optimizations on a low-level representation.
@end menu @end menu
...@@ -94,8 +94,8 @@ be passed to @code{rest_of_type_compilation}. Each function definition ...@@ -94,8 +94,8 @@ be passed to @code{rest_of_type_compilation}. Each function definition
should be passed to @code{cgraph_finalize_function}. should be passed to @code{cgraph_finalize_function}.
TODO: I know rest_of_compilation currently has all sorts of TODO: I know rest_of_compilation currently has all sorts of
rtl-generation semantics. I plan to move all code generation RTL generation semantics. I plan to move all code generation
bits (both tree and rtl) to compile_function. Should we hide bits (both Tree and RTL) to compile_function. Should we hide
cgraph from the front ends and move back to rest_of_compilation cgraph from the front ends and move back to rest_of_compilation
as the official interface? Possibly we should rename all three as the official interface? Possibly we should rename all three
interfaces such that the names match in some meaningful way and interfaces such that the names match in some meaningful way and
...@@ -172,12 +172,12 @@ dump anything. ...@@ -172,12 +172,12 @@ dump anything.
TODO: describe the global variables set up by the pass manager, TODO: describe the global variables set up by the pass manager,
and a brief description of how a new pass should use it. and a brief description of how a new pass should use it.
I need to look at what info rtl passes use first@enddots{} I need to look at what info RTL passes use first@enddots{}
@node Tree-SSA passes @node Tree SSA passes
@section Tree-SSA passes @section Tree SSA passes
The following briefly describes the tree optimization passes that are The following briefly describes the Tree optimization passes that are
run after gimplification and what source files they are located in. run after gimplification and what source files they are located in.
@itemize @bullet @itemize @bullet
...@@ -401,7 +401,7 @@ and described by @code{pass_loop}. ...@@ -401,7 +401,7 @@ and described by @code{pass_loop}.
The optimizations performed by this pass are: The optimizations performed by this pass are:
Loop invariant motion. This pass moves only invariants that Loop invariant motion. This pass moves only invariants that
would be hard to handle on rtl level (function calls, operations that expand to would be hard to handle on RTL level (function calls, operations that expand to
nontrivial sequences of insns). With @option{-funswitch-loops} it also moves nontrivial sequences of insns). With @option{-funswitch-loops} it also moves
operands of conditions that are invariant out of the loop, so that we can use operands of conditions that are invariant out of the loop, so that we can use
just trivial invariantness analysis in loop unswitching. The pass also includes just trivial invariantness analysis in loop unswitching. The pass also includes
...@@ -422,8 +422,8 @@ Loop unswitching. This pass moves the conditional jumps that are invariant ...@@ -422,8 +422,8 @@ Loop unswitching. This pass moves the conditional jumps that are invariant
out of the loops. To achieve this, a duplicate of the loop is created for out of the loops. To achieve this, a duplicate of the loop is created for
each possible outcome of conditional jump(s). The pass is implemented in each possible outcome of conditional jump(s). The pass is implemented in
@file{tree-ssa-loop-unswitch.c}. This pass should eventually replace the @file{tree-ssa-loop-unswitch.c}. This pass should eventually replace the
rtl-level loop unswitching in @file{loop-unswitch.c}, but currently RTL level loop unswitching in @file{loop-unswitch.c}, but currently
the rtl-level pass is not completely redundant yet due to deficiencies the RTL level pass is not completely redundant yet due to deficiencies
in tree level alias analysis. in tree level alias analysis.
The optimizations also use various utility functions contained in The optimizations also use various utility functions contained in
...@@ -651,8 +651,8 @@ registers don't need to be saved. This pass is located in ...@@ -651,8 +651,8 @@ registers don't need to be saved. This pass is located in
@node RTL passes @node RTL passes
@section RTL passes @section RTL passes
The following briefly describes the rtl generation and optimization The following briefly describes the RTL generation and optimization
passes that are run after tree optimization. passes that are run after the Tree optimization passes.
@itemize @bullet @itemize @bullet
@item RTL generation @item RTL generation
...@@ -679,15 +679,15 @@ generated from the machine description by the programs @code{genflags} ...@@ -679,15 +679,15 @@ generated from the machine description by the programs @code{genflags}
and @code{gencodes}, tell this pass which standard names are available and @code{gencodes}, tell this pass which standard names are available
for use and which patterns correspond to them. for use and which patterns correspond to them.
@item Generate exception handling landing pads @item Generation of exception landing pads
This pass generates the glue that handles communication between the This pass generates the glue that handles communication between the
exception handling library routines and the exception handlers within exception handling library routines and the exception handlers within
the function. Entry points in the function that are invoked by the the function. Entry points in the function that are invoked by the
exception handling library are called @dfn{landing pads}. The code exception handling library are called @dfn{landing pads}. The code
for this pass is located within @file{except.c}. for this pass is located in @file{except.c}.
@item Cleanup control flow graph @item Control flow graph cleanup
This pass removes unreachable code, simplifies jumps to next, jumps to This pass removes unreachable code, simplifies jumps to next, jumps to
jump, jumps across jumps, etc. The pass is run multiple times. jump, jumps across jumps, etc. The pass is run multiple times.
...@@ -702,16 +702,16 @@ This pass attempts to remove redundant computation by substituting ...@@ -702,16 +702,16 @@ This pass attempts to remove redundant computation by substituting
variables that come from a single definition, and variables that come from a single definition, and
seeing if the result can be simplified. It performs copy propagation seeing if the result can be simplified. It performs copy propagation
and addressing mode selection. The pass is run twice, with values and addressing mode selection. The pass is run twice, with values
being propagated into loops only on the second run. It is located in being propagated into loops only on the second run. The code is
@file{fwprop.c}. located in @file{fwprop.c}.
@item Common subexpression elimination @item Common subexpression elimination
This pass removes redundant computation within basic blocks, and This pass removes redundant computation within basic blocks, and
optimizes addressing modes based on cost. The pass is run twice. optimizes addressing modes based on cost. The pass is run twice.
The source is located in @file{cse.c}. The code for this pass is located in @file{cse.c}.
@item Global common subexpression elimination. @item Global common subexpression elimination
This pass performs two This pass performs two
different types of GCSE depending on whether you are optimizing for different types of GCSE depending on whether you are optimizing for
...@@ -755,22 +755,13 @@ This pass attempts to replace conditional branches and surrounding ...@@ -755,22 +755,13 @@ This pass attempts to replace conditional branches and surrounding
assignments with arithmetic, boolean value producing comparison assignments with arithmetic, boolean value producing comparison
instructions, and conditional move instructions. In the very last instructions, and conditional move instructions. In the very last
invocation after reload, it will generate predicated instructions invocation after reload, it will generate predicated instructions
when supported by the target. The pass is located in @file{ifcvt.c}. when supported by the target. The code is located in @file{ifcvt.c}.
@item Web construction @item Web construction
This pass splits independent uses of each pseudo-register. This can This pass splits independent uses of each pseudo-register. This can
improve effect of the other transformation, such as CSE or register improve effect of the other transformation, such as CSE or register
allocation. Its source files are @file{web.c}. allocation. The code for this pass is located in @file{web.c}.
@item Life analysis
This pass computes which pseudo-registers are live at each point in
the program, and makes the first instruction that uses a value point
at the instruction that computed the value. It then deletes
computations whose results are never used, and combines memory
references with add or subtract instructions to make autoincrement or
autodecrement addressing. The pass is located in @file{flow.c}.
@item Instruction combination @item Instruction combination
...@@ -778,23 +769,23 @@ This pass attempts to combine groups of two or three instructions that ...@@ -778,23 +769,23 @@ This pass attempts to combine groups of two or three instructions that
are related by data flow into single instructions. It combines the are related by data flow into single instructions. It combines the
RTL expressions for the instructions by substitution, simplifies the RTL expressions for the instructions by substitution, simplifies the
result using algebra, and then attempts to match the result against result using algebra, and then attempts to match the result against
the machine description. The pass is located in @file{combine.c}. the machine description. The code is located in @file{combine.c}.
@item Register movement @item Register movement
This pass looks for cases where matching constraints would force an This pass looks for cases where matching constraints would force an
instruction to need a reload, and this reload would be a instruction to need a reload, and this reload would be a
register-to-register move. It then attempts to change the registers register-to-register move. It then attempts to change the registers
used by the instruction to avoid the move instruction. used by the instruction to avoid the move instruction. The code is
The pass is located in @file{regmove.c}. located in @file{regmove.c}.
@item Optimize mode switching @item Mode switching optimization
This pass looks for instructions that require the processor to be in a This pass looks for instructions that require the processor to be in a
specific ``mode'' and minimizes the number of mode changes required to specific ``mode'' and minimizes the number of mode changes required to
satisfy all users. What these modes are, and what they apply to are satisfy all users. What these modes are, and what they apply to are
completely target-specific. completely target-specific. The code for this pass is located in
The source is located in @file{mode-switching.c}. @file{mode-switching.c}.
@cindex modulo scheduling @cindex modulo scheduling
@cindex sms, swing, software pipelining @cindex sms, swing, software pipelining
...@@ -802,8 +793,8 @@ The source is located in @file{mode-switching.c}. ...@@ -802,8 +793,8 @@ The source is located in @file{mode-switching.c}.
This pass looks at innermost loops and reorders their instructions This pass looks at innermost loops and reorders their instructions
by overlapping different iterations. Modulo scheduling is performed by overlapping different iterations. Modulo scheduling is performed
immediately before instruction scheduling. immediately before instruction scheduling. The code for this pass is
The pass is located in (@file{modulo-sched.c}). located in @file{modulo-sched.c}.
@item Instruction scheduling @item Instruction scheduling
...@@ -813,7 +804,7 @@ floating point instructions often have this behavior on RISC machines. ...@@ -813,7 +804,7 @@ floating point instructions often have this behavior on RISC machines.
It re-orders instructions within a basic block to try to separate the It re-orders instructions within a basic block to try to separate the
definition and use of items that otherwise would cause pipeline definition and use of items that otherwise would cause pipeline
stalls. This pass is performed twice, before and after register stalls. This pass is performed twice, before and after register
allocation. The pass is located in @file{haifa-sched.c}, allocation. The code for this pass is located in @file{haifa-sched.c},
@file{sched-deps.c}, @file{sched-ebb.c}, @file{sched-rgn.c} and @file{sched-deps.c}, @file{sched-ebb.c}, @file{sched-rgn.c} and
@file{sched-vis.c}. @file{sched-vis.c}.
...@@ -884,13 +875,13 @@ This pass computes where the variables are stored at each ...@@ -884,13 +875,13 @@ This pass computes where the variables are stored at each
position in code and generates notes describing the variable locations position in code and generates notes describing the variable locations
to RTL code. The location lists are then generated according to these to RTL code. The location lists are then generated according to these
notes to debug information if the debugging information format supports notes to debug information if the debugging information format supports
location lists. location lists. The code is located in @file{var-tracking.c}.
@item Delayed branch scheduling @item Delayed branch scheduling
This optional pass attempts to find instructions that can go into the This optional pass attempts to find instructions that can go into the
delay slots of other instructions, usually jumps and calls. The delay slots of other instructions, usually jumps and calls. The code
source file name is @file{reorg.c}. for this pass is located in @file{reorg.c}.
@item Branch shortening @item Branch shortening
...@@ -899,13 +890,14 @@ Thus, longer sequences of instructions must be used for long branches. ...@@ -899,13 +890,14 @@ Thus, longer sequences of instructions must be used for long branches.
In this pass, the compiler figures out what how far each instruction In this pass, the compiler figures out what how far each instruction
will be from each other instruction, and therefore whether the usual will be from each other instruction, and therefore whether the usual
instructions, or the longer sequences, must be used for each branch. instructions, or the longer sequences, must be used for each branch.
The code for this pass is located in @file{final.c}.
@item Register-to-stack conversion @item Register-to-stack conversion
Conversion from usage of some hard registers to usage of a register Conversion from usage of some hard registers to usage of a register
stack may be done at this point. Currently, this is supported only stack may be done at this point. Currently, this is supported only
for the floating-point registers of the Intel 80387 coprocessor. The for the floating-point registers of the Intel 80387 coprocessor. The
source file name is @file{reg-stack.c}. code for this pass is located in @file{reg-stack.c}.
@item Final @item Final
......
...@@ -10,10 +10,10 @@ ...@@ -10,10 +10,10 @@
@cindex representation of RTL @cindex representation of RTL
@cindex Register Transfer Language (RTL) @cindex Register Transfer Language (RTL)
Most of the work of the compiler is done on an intermediate representation The last part of the compiler work is done on a low-level intermediate
called register transfer language. In this language, the instructions to be representation called Register Transfer Language. In this language, the
output are described, pretty much one by one, in an algebraic form that instructions to be output are described, pretty much one by one, in an
describes what the instruction does. algebraic form that describes what the instruction does.
RTL is inspired by Lisp lists. It has both an internal form, made up of RTL is inspired by Lisp lists. It has both an internal form, made up of
structures that point at other structures, and a textual form that is used structures that point at other structures, and a textual form that is used
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment