Copyright Digital Equipment Corp. All rights reserved.

/OPTIMIZE

    /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).