gccint: Pass manager

1 
1 9.3 Pass manager
1 ================
1 
1 The pass manager is located in 'passes.c', 'tree-optimize.c' and
1 'tree-pass.h'.  It processes passes as described in 'passes.def'.  Its
1 job is to run all of the individual passes in the correct order, and
1 take care of standard bookkeeping that applies to every pass.
1 
1  The theory of operation is that each pass defines a structure that
1 represents everything we need to know about that pass--when it should be
1 run, how it should be run, what intermediate language form or
1 on-the-side data structures it needs.  We register the pass to be run in
1 some particular order, and the pass manager arranges for everything to
1 happen in the correct order.
1 
1  The actuality doesn't completely live up to the theory at present.
1 Command-line switches and 'timevar_id_t' enumerations must still be
1 defined elsewhere.  The pass manager validates constraints but does not
1 attempt to (re-)generate data structures or lower intermediate language
1 form based on the requirements of the next pass.  Nevertheless, what is
1 present is useful, and a far sight better than nothing at all.
1 
1  Each pass should have a unique name.  Each pass may have its own dump
1 file (for GCC debugging purposes).  Passes with a name starting with a
1 star do not dump anything.  Sometimes passes are supposed to share a
1 dump file / option name.  To still give these unique names, you can use
1 a prefix that is delimited by a space from the part that is used for the
1 dump file / option name.  E.g.  When the pass name is "ud dce", the name
1 used for dump file/options is "dce".
1 
1  TODO: describe the global variables set up by the pass manager, and a
1 brief description of how a new pass should use it.  I need to look at
1 what info RTL passes use first...
1