umerge(1)
umerge - ucode inliner
As shipped in IRIX 6.5.5. 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.