uopt(1)

uopt - MIPS ucode global optimizer

Showing IRIX 6.5.30 (default release). Last changed in IRIX 6.5.19.

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]

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)