User's Manual
$ cc +P -o prog.opt prog.c //Optimize it, but name it prog.opt.
The linker is unable to find the program name prog.opt in the flow.data file and issues the error
message
No profile data found for the program prog.opt in flow.data
To get around this problem, the compilers and linker provide the +pgm name option, which allows
you to specify a program name to look for in the flow.data file. For instance, to make the above
example work properly, you would include +pgm prog.inst on the final compile line:
$ cc +P -o prog.opt +pgm prog.inst prog.c
Like the +df option, the +pgm option is passed directly to the linker.
Selecting an Optimization Level with PBO
When -P is specified, the code generator and linker perform profile-based optimizations on any
I-SOM or regular object files found on the linker command line. In addition, optimizations will be
performed according to the optimization level you specified with a compiler option when you
instrumented the application. Briefly, the compiler optimization options are:
DescriptionOption
Minimal optimization. This is the default.+O0
Basic block level optimization.+O1
Full optimization within each procedure in a file. (Can also be invoked as -O.)+O2
Full optimization across all procedures in an object B file. Includes subprogram inlining.+O3
Full optimization across entire application, performed at link time. (Invokes ld +Ofastaccess
+Oprocelim.) Includes inlining across multiple files.
+O4
NOTE: The +O3 and +O4 options are incompatible with symbolic debugging. The only compiler
optimization levels that allow for symbolic debugging are +O2 and lower.
For more detailed information on compiler optimization levels, see your compiler documentation.
PBO has the greatest impact when it is combined with level 2 or greater optimizations. For instance,
this compile command combines level 2 optimization with PBO (note that the compiler options +O2
and -O are equivalent):
$ cc -v -O +I -c prog.c
/opt/langtools/lbin/cpp prog.c /var/tmp/ctm123
/opt/ansic/lbin/ccom /var/tmp/ctm123 prog.o -O2 -I
$ cc -v -O +I -o prog prog.o
/usr/ccs/bin/ld /opt/langtools/lib/icrt0.o -u main -o prog \
prog.o -I -lc
The optimizations are performed along with instrumentation. However, profile-based optimizations
are not performed until you compile later with +P:
$ cc -v +P -o prog prog.o
/usr/ccs/bin/ld /usr/ccs/lib/crt0.o -u main \
-o prog prog.o -P -lc
Using PBO to Optimize Shared Libraries
Beginning with the HP-UX 10.0 release, the-I linker option can be used with -b to build a shared
library with instrumented code. Also, the -P, +df, and +pgm command-line options are
compatible with the -b option.
212 Improving Your Application Performance