UMERGE(1-SysV) UMERGE(1-SysV)
umerge - Ucode Inliner
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 ]
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 above basic functions, umerge also does additional
optimizations that naturally belong to it. 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 interpreted 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 only be used
with discretion, since it can create tremendous optimization
Page 1
UMERGE(1-SysV) UMERGE(1-SysV)
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 "-" 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 3 instructions is worthy of each cycle reduction
in execution time. In other words, umerge will inline a
procedure whenever the inlining causes 3 or less additional
instructions in code size for every 1 cycle speedup in execution
time. The value specified in this option does not need to be a
whole number.
-inline_to value
The default value of this parameter is 0. A positive value of
this parameter asks 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 if and
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.
ucode(1), btou(1),
umerge assumes the input ucode file is error-free. Otherwise, there is
no guarantee on its behavior.
PPPPaaaaggggeeee 2222 [ Back ]
|