umerge(1)

umerge - ucode inliner

As shipped in IRIX 6.5.7. Added in IRIX 6.5.5.

NAME
     umerge - ucode inliner

SYNOPSIS
     umerge input_file -o inlined_file [-t sym_file -i control_file
     -space_time value -inline_to value] [-v -noinline -inline_all
     -no_init_to_ass -no_promotion]

IMPLEMENTATION
     IRIX systems

DESCRIPTION
     umerge, the ucode inliner, reads the input binary ucode file into an
     input ucode buffer.  An output ucode buffer is then allocated.  umerge
     then makes a pass over the input ucode buffer to collect information
     and build data structures, including the program call graph.  This
     pass also copies all top-level non-procedure ucode to the output
     buffer.  It then analyzes the data structures to decide what to do for
     the output ucode.  Finally, it copies the code from the input buffer
     to the output buffer according to a depth-first, post-order traversal
     of the program call graph.  In this process, procedure bodies are
     conditionally integrated at their points of calls.  When inlining
     procedures, the procedure code is taken from the output buffer.  This
     allows the output of integrating procedure A into B to be used when
     procedure B is later integrated into procedure C.

     Apart from the previously described basic functions, umerge also
     performs additional optimizations.  For FORTRAN programs, it promotes
     reference parameters to value parameters whenever this can safely be
     performed.  When the actual parameter is a constant, it fetches the
     constant value from the INIT ucode and passes the constants directly.
     When the actual parameter is an initialized variable that is never
     written in the whole program, it also looks up the initialized value
     and passes the constant value directly.

     umerge also recognizes initialized variables that are never written
     into and converts the initializations to run-time assignments at the
     beginning of the procedures.  This allows the later global optimizer
     to perform constant propagation, constant folding and dead store
     elimination to further improve the code.

     The following options are accepted by umerge:

     -v      Turns on verbose mode.  In this mode, umerge will print the
             name of the procedure it is currently copying to the output
             buffer.  It also prints the name of the procedure it is
             inlining at each call site.

     -noinline
             Suppresses the inlining functionality.  All other
             optimizations are still performed.

     -inline_all
             Inline all calls in the program.  This option should be used
             with discretion, because it can create tremendous optimization
             overhead in the later optimization phases.

     -no_init_to_ass
             Turns off umerge's initialization to run-time assignment
             conversion.

     -no_promotion
             Turns off reference parameter to value parameter promotion.

     -t sym_file
             Tells umerge the name of the symbol table file.  This is
             necessary for umerge to know the names of all the procedures.

     -i control_file
             Gives direct control over umerge on the inlining of specific
             procedures.  The control file must be made up of lines that
             start with a + or a - symbol in the first column, followed by
             a procedure name.  The procedures can be listed in arbitrary
             order in the file.  Procedures marked with + are always
             inlined, and those marked with - are never inlined.

     -space_time value
             Uses the given value for this parameter.  umerge's inlining
             decision is based on this parameter that represents space/time
             tradeoff.  The default value is 3.0.  This tells umerge that a
             size increase of three instructions is worthy of each cycle
             reduction in execution time.  In other words, umerge will
             inline a procedure whenever the inlining causes three or less
             additional instructions in code size for every one cycle
             speedup in execution time.  The value specified in this option
             does not have to be a whole number.

     -inline_to value
             The default value of this parameter is 0.  A positive value of
             this parameter requests umerge to perform additional inlining
             of calls to leaf routines up to the specified level, in
             addition to its automatic decision mechanism.  A value of 1
             will cause all calls to leaf procedures to be inlined.  A
             value of 2 will additionally cause all calls to procedures
             that became leaves due to level 1 inlining to be inlined, etc.
             Under this option, a procedure will become a leaf in the
             inlined output code only if the procedure's maximum distance
             from a leaf in the call graph is less than or equal to the
             value of this parameter.  This option is not affected by the
             -noinline option.

DIAGNOSTICS
     umerge assumes the input ucode file is error-free.  Otherwise, there
     is no guarantee on its behavior.

SEE ALSO
     ucode(1), btou(1)

     This man page is available only online.