umerge(1)

umerge - ucode inliner

As shipped in IRIX 6.5.30. Last changed in IRIX 6.5.19.

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]

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)