uopt(1)

uopt - MIPS ucode global optimizer

As shipped in IRIX 6.5.15. Last changed in IRIX 6.5.5.

NAME
     uopt - MIPS ucode global optimizer

SYNOPSIS
     uopt unopt_file opt_file [string_file] [-t sym_file -i ignore_file -l
     list_file -Olimit count -loopunroll count] [-v -w -bb -O3 -EL -EB
     -doassoc -f77alias -pic2 -nokpicopt -kpicopt -no_r23 -nomultibbunroll
     -zdbug:n]

IMPLEMENTATION
     IRIX systems

DESCRIPTION
     uopt, the MIPS ucode optimizer, reads the input binary ucode file,
     performs optimization on an intra-procedural, global basis and outputs
     the optimized binary ucode file.  It checks the version stamp of the
     ucode file, and if it does not correspond to its own stamp, a warning
     message will be issued.  By convention, unoptimized binary ucode files
     have the extension .B and optimized binary ucode files have the
     extension .O, but uopt does not force this convention on the user.
     The string file is used for storing string and floating-point
     constants in each procedure during optimization, to save memory space.
     If this file name is omitted, the file name uoptstring is used.  uopt
     first conducts a quick pre-pass over the entire program.  In the main
     optimization pass, it reads, optimizes and writes out the procedures
     one by one in the same order that they appear in the input file.

     The complexity of global optimization is some exponential function of
     the size of the procedure (in number of basic blocks).  Thus, large
     procedures take enormous amount of time to optimize.  Also, if the
     host machine has only a small amount of memory, excessive swapping of
     memory pages between disk physical memory further lengthens the
     optimization time for large procedures.  uopt will skip optimizing a
     procedure if the number of basic blocks it contains exceeds 500.  A
     warning message if issued so that the user is aware that the procedure
     is not optimized.  The default value of 500 can be overridden using
     the -Olimit option.

     The following options are accepted by uopt:

     -v      Turns on verbose mode.  In this mode, uopt will print the name
             of the procedure it is currently optimizing, plus a number
             enclosed in parentheses that tells the number of basic blocks
             in that procedure.  Optimization time is usually some
             exponential function of the number of basic blocks in the
             procedure.  Under -O3 optimization, an i after the number
             indicates that inter-procedural register allocation is
             performed for that procedure.

     -w      Suppresses warning messages.

     -bb     Writes out the basic block number as ucode comments in the
             output ucode.  This is useful in debugging uopt.

     -O3     Uses the inter-procedural technique when performing register
             allocation.

     -EL     Tells uopt that the target machine is little-endian.

     -EB     Tells uopt.  that the target machine is big-endian.

     -doassoc
             Performs the re-association optimization for floating-point
             expressions even when the language is FORTRAN.  This violates
             the FORTRAN Standard.

     -f77alias
             Assumes that there can be aliasing among the parameters to a
             procedure when the language is FORTRAN.  The FORTRAN Standard
             allows the assumption by compilers that there is never any
             aliasing among parameters.  This assumption allows the
             compiler to get better performance for the program.  If a
             program violates this rule, the program may not run correctly
             after default optimization; using this flag will still allow
             the program to run correctly after optimization, but at a
             reduced performance level.

     -pic2   Tells uopt that the program is being compiled for execution
             with dynamic shared objects.

     -nokpicopt
             Asks uopt to not perform the special treatment for global
             variables to optimize their program accesses under shared
             compilation.

     -kpicopt
             Asks uopt to perform the special treatment for global
             variables to optimize their program accesses regardless of the
             shared/non-shared compilation mode.

     -no_r23 Tells uopt that it should not use register 23.

     -nomultibbunroll
             Disables unrolling for loops containing branches.

     -zdbug:n
             Tells uopt to print different debugging traces, depending on
             the value of n.  Traces are printed on a per-procedure basis,
             and output to the list file specified in the -l option.  The
             traces always begin with the control flow graph of the
             procedure.  For value 1, the local hash table and the global
             hash table are printed.  For value 2, the local hash table,
             the global hash table are printed; the bit vectors for the
             local attributes are then printed on a per-basic-block basis.
             For value 3, the global hash table is printed, followed by the
             bit vectors for the partial redundancy data flow analysis.
             For value 4, the global hash table is printed, followed by the
             bit vectors to determine the live ranges of global common
             subexpressions.  For value 5, the global hash table is
             printed, followed by the live range information for all the
             register-residing candidates, followed by the bit vectors
             related to register allocation.  For value 6, a trace of the
             global register allocation via priority-based coloring is
             printed.  For value 7, the inter-procedural register
             allocation information is printed.

     -t sym_file
             Tells uopt the name of the symbol table file.

     -i ignore_file
             Tells uopt to ignore specific procedures and leave them
             unoptimized.  The procedures whose optimization is to be
             suppressed are listed in arbitrary order in the given file,
             with each line containing one procedure name starting at the
             first column.

     -l list_file
             Uses list_file to print diagnostic information during
             optimization.

     -Olimit count
             Sets this parameter to the value count.  uopt will not
             optimize a procedure whose size in terms of number of basic
             blocks exceeds this value.

     -loopunroll count
             Sets the maximum number of times that a loop will be unrolled.
             The default value is 4.  Setting it to 0 or 1 will disable
             loop unrolling.

DIAGNOSTICS
     uopt assumes the input ucode file is error-free.  However, it does
     issue warning messages when it runs into special situations during
     optimization.

SEE ALSO
     ucode(1), btou(1), ppu(1)

     This man page is available only online.