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