|
VMS Help CC, /OPTIMIZE *Conan The Librarian |
/OPTIMIZE[=option] (D)
/NOOPTIMIZE
Controls the level of code optimization that the compiler performs.
/OPTIMIZE has the following options:
LEVEL=n Selects the level of optimization. Specify an
integer from 0 (no optimization) to 5 (full
optimization, including pipelining).
[NO]INLINE[=keyword] Provides inline expansion of functions that
yield optimized code when they are expanded. You
can specify one of the following keywords:
NONE No inlining is done, even if requested
by the language syntax.
/OPTIMIZE=INLINE=NONE is equivalent to
/OPTIMIZE=NOINLINE.
MANUAL Inlines only those function calls for
which the program explicitly requests
inlining.
AUTOMATIC Inlines all of the function calls in
the MANUAL category, plus additional
calls that the compiler determines are
appropriate on this platform. On
Alpha systems, this is the same as
SIZE; on I64 systems, this is the same
as SPEED. AUTOMATIC is the default.
SIZE Inlines all of the function calls in
the MANUAL category plus any
additional calls that the compiler
determines would improve run-time
performance without significantly
increasing the size of the program.
SPEED Performs more aggressive inlining for
run-time performance, even when it
might significantly increase the size
of the program.
ALL Inlines every call that can be inlined
while still generating correct code.
Recursive routines, however, will not
cause an infinite loop at compile
time.
Note that /OPT=INLINE=ALL is not
recommended for general use, because
it performs very aggressive inlining
and can cause the compiler to exhaust
virtual memory or take an unacceptably
long time to compile
[NO]INTRINSICS Controls whether or not certain functions are
handled as intrinsic functions without explicitly
enabling each of them as an intrinsic through the
#pragma intrinsic preprocessor directive.
Functions that can be handled as intrinsics are:
Main Group - ANSI:
abs atanl atan2l ceill cosl floorf memcpy sinf
atan atan2 ceil cos fabs floorl memmove sinl
atanf atan2f ceilf cosf floor labs memset strcpy
sin strlen
Main Group - Non-ANSI:
alloca atand2 bzero sind
atand bcopy cosd
Printf functions:
fprintf printf sprintf
Printf non-ANSI:
snprintf
ANSI math functions that set errno,
thereby requiring /ASSUME=NOMATH_ERRNO:
acos asinf coshl log log10f powl sqrt tanf
acosf asinl exp logf log10l sinh sqrtf tanl
acosl cosh expf logl pow sinhf sqrtl tanh
asin coshf expl log10 powf sinhl tan tanhf
tanhl
Non-ANSI math functions that set errno,
thereby requiring /ASSUME=NOMATH_ERRNO:
log2
tand
The /OPTIMZE=INTRINSICS qualifier works together
with /OPTIMIZE=LEVEL=n and some other qualifiers
to determine how intrinsics are handled:
o If the optimization level specified is less
than 4, the intrinsic-function prototypes and
call formats are checked, but normal run-time
calls are still made.
o If the optimization level is 4 or higher,
intrinsic code is generated.
o If /STANDARD=ANSI89 is specified,
non-ANSI-Standard functions are not
automatically intrinsic and do not even have
their prototypes checked. They are only
checked if the non-ANSI-Standard functions
are made intrinsic through #pragma intrinsic.
o Intrinsic code is not generated for math
functions that set the errno variable unless
/ASSUME=NOMATH_ERRNO is specified. Such math
functions, however, do have their prototypes
and call formats checked.
The default is /OPTIMIZE=INTRINSICS, which turns
on this handling.
To turn it off, specify /NOOPTIMIZE or
/OPTIMIZE=NOINTRINSICS.
[NO]PIPELINE Controls Activation of the software pipelining
optimization. The software pipelining
optimization applies instruction scheduling to
certain innermost loops, allowing instructions
within a loop to "wrap around" and execute in a
different iteration of the loop. This can reduce
the impact of long-latency operations, resulting
in faster loop execution.
Software pipelining can be more effective when
you combine /OPTIMIZE=PIPELINE with the
appropriate /OPTIMIZE=TUNE keyword for the target
Alpha processor generation.
Software pipelining also enables the prefetching
of data to reduce the impact of cache misses.
Software pipelining is a subset of the
optimizations activated by optimization level 5.
To determine whether using /OPTIMIZE=PIPELINE
benefits your particular program, you should time
program execution for the same program (or
subprogram) compiled with and without software
pipelining.
For programs that contain loops that exhaust
available registers, longer execution times can
result with optimization level 5, requiring use
of /OPTIMIZE=UNROLL=n to limit loop unrolling.
UNROLL=n Controls loop unrolling done by the optimizer.
UNROLL=n means to unroll loop bodies n times.
The default is UNROLL=0, which means the
optimizer will use its own default unroll amount.
TUNE=keyword Selects processor-specific instruction tuning for
implementations of the Alpha or Itanium
architecture. Regardless of the setting of the
/OPTIMIZE=TUNE flag, the generated code will run
correctly on all implementations of the Alpha
architecture. Tuning for a specific
implementation can provide improvements in
run-time performance. Code tuned for a specific
target might run slower on another target.
For Itanium systems, you can specify the
following keyword:
ITANIUM2 Generates code for the Intel Itanium 2 processor.
The default is /OPTIMIZE, which is equivalent to
/OPTIMIZE=(INLINE=AUTOMATIC,LEVEL=4,UNROLL=0,TUNE=GENERIC).
|
|