ICC(1) Intel(R) C++ Compiler Options ICC(1) icc - invokes the Intel(R) C++ Compiler SYNOPSIS icc [options] file1 [file2 ...] where: · options represents zero or more compiler options. · fileN represents a C/C++ source (.C .c .cc .cp .cpp .cxx .c++ .i), assembly (.s), object (.o), static library (.a), or other linkable file. NOTE: The icpc command uses the same compiler options as the icc command. Invoking the compiler using icpc compiles .c, and .i files as C++. Invoking the compiler using icc compiles .c and .i files as C. Using icpc always links in C++ libraries. Using icc only links in C++ libraries if C++ source is provided on the com- mand line. Description - icc The Intel(R) C++ Compiler is designed to process C and C++ pro- grams on Intel architecture based systems. You can preprocess, compile, assemble, and link these programs. This document explains how information and instructions apply differently to IA-32 architectures, Intel(R) 64 architectures, and IA-64 architectures. If a description does not explicitly state a specific architecture, assume the description is applica- ble to all. See the Intel C++ Compiler Documentation for more detailed information than what is presented here. Most language features are available on all supported systems; however, some language features are only available on certain processors or a certain operating system. Such language features are labeled within parenthesis as follows: i32 Means the feature is available on IA-32 architecture. i64em Means the feature is available on Intel(R) 64 architec- ture. i64 Means the feature is available on IA-64 architecture. L*X Means the feature is available on Linux* systems. M*X Means the feature is available on all Intel(R)-based sys- tems running Mac OS* X. In a few circumstances, the under- lying architecture has bearing, so in those cases: M*X32 -- Means the feature is available on sys- tems based on IA-32 architecture that are running Mac OS* X. M*X64 -- Means the feature is available on sys- tems using Intel(R) 64 architecture that are running Mac OS* X. If a labeled feature is only available on certain processors or operating systems, you will see the word (only) within the label along with the appropriate abbreviation(s). If a labeled feature is not available on a certain processor or operating system, you will see the words (not on) within the label along with the appropriate abbreviation. If no label appears, the feature is available on all supported architectures and operating systems. GNU gcc* Interoperability C++ compilers are interoperable if they can link object files and libraries generated by one compiler with object files and libraries generated by the second compiler, and the resulting executable runs successfully. Some GNU gcc* versions are not interoperable, some versions are interoperable. By default, the Intel compiler will generate code that is interoperable with the version of gcc it finds on your system. The Intel(R) C++ Compiler options that affect GNU gcc* interoper- ability include: · -cxxlib · -gcc-name · -gcc-version · -gxx-name · -fabi-version · -no-gcc (see gcc Predefined Macros for more information) The Intel(R) C++ Compiler is interoperable with GNU gcc* compiler versions greater than or equal to 3.2. See the Intel(R) C++ Com- piler Documentation for more information. OPTION SUMMARIES Option Alphabetic Summary This section includes an alphabetic listing of available Intel(R) C++Compiler options. After each listing is a reference to the Functional area where a detailed description of the option appears. See Deprecated and Removed Options for additional information. -Aname[(value)] Specifies an identifier for an assertion. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Assertions have no identifiers or symbol names. Description: This option specifies an identifier (symbol name) for an assertion. It is equivalent to an #assert preprocessing directive. Note that this option is not the positive form of the C++ /QA- option. -alias-const -no-alias-const Determines whether the compiler assumes a parameter of type pointer-to-const does not alias with a parameter of type pointer-to-non-const. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-alias-const The compiler uses standard C/C++ rules for the interpretation of const. Description: This option determines whether the compiler assumes a parameter of type pointer-to-const does not alias with a parameter of type pointer-to-non-const. It implies an additional attribute for const. This functionality complies with the input/output buffer rule, which assumes that input and output buffer arguments do not overlap. This option allows the compiler to do some additional optimizations with those parameters. In C99, you can also get the same result if you addition- ally declare your pointer parameters with the restrict keyword. -align -noalign Determines whether variables and arrays are naturally aligned. Architectures: IA-32, Intel® 64 architectures Default: OFF Variables and arrays are aligned accord- ing to the gcc model, which means they are aligned to 4-byte boundaries. Description: This option determines whether variables and arrays are naturally aligned.Option -align forces the following natu- ral alignment: Type Alignment double 8 bytes long long 8 bytes long double 16 bytes If you are not interacting with system libraries or other libraries that are compiled without -align, this option can improve performance by reducing misaligned accesses. CAUTION: If you are interacting with system libraries or other libraries that are compiled without -align, your application may not perform as expected. -ansi Enables language compatibility with the gcc option -ansi. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF GNU C++ is more strongly supported than ANSI C. Description: This option enables language compatibility with the gcc option -ansi and provides the same level of ANSI standard conformance as that option. This option sets option fmath-errno. If you want strict ANSI conformance, use the -strict-ansi option. -ansi-alias -no-ansi-alias Enable use of ANSI aliasing rules in optimizations. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-ansi-alias Disable use of ANSI aliasing rules in optimizations. Description: This option tells the compiler to assume that the program adheres to ISO C Standard aliasability rules. If your program adheres to these rules, then this option allows the compiler to optimize more aggressively. If it doesn't adhere to these rules, then it can cause the com- piler to generate incorrect code. -auto-ilp32 Instructs the compiler to analyze the program to determine if there are 64-bit pointers which can be safely shrunk into 32-bit pointers. Architectures: Intel® 64 architecture, IA-64 architecture Default: OFF The optimization is not attempted. Description: This option instructs the compiler to analyze and transform the program so that 64-bit pointers are shrunk to 32-bit pointers, and 64-bit longs (on Linux) are shrunk into 32-bit longs wherever it is legal and safe to do so. In order for this option to be effective the compiler must be able to optimize using the -ipo/-Qipo option and must be able to analyze all library/external calls the program makes. This option requires that the size of the program exe- cutable never exceeds 232 bytes and all data values can be represented within 32 bits. If the program can run cor- rectly in a 32-bit system, these requirements are implic- itly satisfied. If the program violates these size restrictions, unpredictable behavior might occur. -axprocessor Tells the compiler to generate multiple, processor-spe- cific auto-dispatch code paths for Intel processors if there is a performance benefit. Architectures: IA-32, Intel® 64 architectures Default: OFF No auto-dispatch code is generated. Pro- cessor-specific code is generated and is controlled by the setting of compiler option -m (Linux) or compiler option -x (Mac OS* X). Description: Arguments SSE4.2, SSE4.1, SSSE3, SSE3, and SSE2 are allowed. For more information, see the compiler documenta- tion. This option tells the compiler to generate multiple, pro- cessor-specific auto-dispatch code paths for Intel proces- sors if there is a performance benefit. It also generates a baseline code path. The baseline code is usually slower than the specialized code. The baseline code path is determined by the architecture specified by the -x (Linux and Mac OS X) or /Qx (Windows) option. While there are defaults for the -x or /Qx option that depend on the operating system being used, you can specify an architecture for the baseline code that is higher or lower than the default. The specified architec- ture becomes the effective minimum architecture for the baseline code path. If you specify both the -ax and -x options (Linux and Mac OS X) or the /Qax and /Qx options (Windows), the baseline code will only execute on processors compatible with the processor type specified by the -x or /Qx option. This option tells the compiler to find opportunities to generate separate versions of functions that take advan- tage of features of the specified Intel® processor. If the compiler finds such an opportunity, it first checks whether generating a processor-specific version of a func- tion is likely to result in a performance gain. If this is the case, the compiler generates both a processor-specific version of a function and a baseline version of the func- tion. At run time, one of the versions is chosen to exe- cute, depending on the Intel processor in use. In this way, the program can benefit from performance gains on more advanced Intel processors, while still working prop- erly on older processors. You can use more than one of the processor values by com- bining them. For example, you can specify -axSSE4.1,SSSE3 (Linux and Mac OS X) or /QaxSSE4.1,SSSE3 (Windows). You cannot combine the old style, deprecated options and the new options. For example, you cannot specify -axSSE4.1,T (Linux and Mac OS X) or /QaxSSE4.1,T (Windows). Previous values W and K are deprecated. The details on replacements are as follows: · Mac OS X systems: On these systems, there is no exact replacement for W or K. You can upgrade to the default option -msse3 (IA-32 architecture) or option -mssse3 (Intel® 64 architecture). · Windows and Linux systems: The replacement for W is -msse2 (Linux) or /arch:SSE2 (Windows). There is no exact replacement for K. However, on Windows sys- tems, /QaxK is interpreted as /arch:IA32; on Linux systems, -axK is interpreted as -mia32. You can also do one of the following: · Upgrade to option -msse2 (Linux) or option /arch:SSE2 (Windows). This will produce one code path that is specialized for Intel® SSE2. It will not run on earlier processors · Specify the two option combination -mia32 -axSSE2 (Linux) or /arch:IA32 /QaxSSE2 (Windows). This com- bination will produce an executable that runs on any processor with IA-32 architecture but with an additional specialized Intel® SSE2 code path. The -ax and /Qax options enable additional optimizations not enabled with option -m or option /arch. -Bdir Specifies a directory that can be used to find include files, libraries, and executables. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler looks for files in the directories specified in your PATH envi- ronment variable. Description: This option specifies a directory that can be used to find include files, libraries, and executables. The compiler uses dir as a prefix. For include files, the dir is converted to -I/dir/include. This command is added to the front of the includes passed to the preprocessor. For libraries, the dir is converted to -L/dir. This com- mand is added to the front of the standard -L inclusions before system libraries are added. For executables, if dir contains the name of a tool, such as ld or as, the compiler will use it instead of those found in the default directories. The compiler looks for include files in dir /include while library files are looked for in dir. Another way to get the behavior of this option is to use the environment variable GCC_EXEC_PREFIX. -Bdynamic (L*X only) Enables dynamic linking of libraries at run time. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Limited dynamic linking occurs. Description: This option enables dynamic linking of libraries at run time. Smaller executables are created than with static linking. This option is placed in the linker command line corre- sponding to its location on the user command line. It con- trols the linking behavior of any library that is passed using the command line. All libraries on the command line following option -Bdy- namic are linked dynamically until the end of the command line or until a -Bstatic option is encountered. The -Bstatic option enables static linking of libraries. -Bstatic (L*X only) Enables static linking of a user's library. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Default static linking occurs. Description: This option enables static linking of a user's library. This option is placed in the linker command line corre- sponding to its location on the user command line. It con- trols the linking behavior of any library that is passed using the command line. All libraries on the command line following option -Bstatic are linked statically until the end of the com- mand line or until a -Bdynamic option is encountered. The -Bdynamic option enables dynamic linking of libraries. -c Prevents linking. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Linking is performed. Description: This option prevents linking. Compilation stops after the object file is generated. The compiler generates an object file for each C or C++ source file or preprocessed source file. It also takes an assembler file and invokes the assembler to generate an object file. -C Places comments in preprocessed source output. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No comments are placed in preprocessed source output. Description: This option places (or preserves) comments in preprocessed source output. Comments following preprocessing directives, however, are not preserved. -check-uninit -no-check-uninit Determines whether checking occurs for uninitialized vari- ables. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-check-uninit Description: Enables run-time checking for uninitialized variables. If a variable is read before it is written, a run-time error routine will be called. Run-time checking of undefined variables is only implemented on local, scalar variables. It is not implemented on dynamically allocated variables, extern variables or static variables. It is not imple- mented on structs, classes, unions or arrays. -complex-limited-range -no-complex-limited-range Determines whether the use of basic algebraic expansions of some arithmetic operations involving data of type COM- PLEX is enabled. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-complex-limited-range Basic algebraic expansions of some arithmetic operations involving data of type COMPLEX are disabled. Description: This option determines whether the use of basic algebraic expansions of some arithmetic operations involving data of type COMPLEX is enabled. When the option is enabled, this can cause performance improvements in programs that use a lot of COMPLEX arith- metic. However, values at the extremes of the exponent range may not compute correctly. -cxxlib[=dir] -cxxlib-nostd -no-cxxlib Determines whether the compile links using the C++ run-time libraries and header files provided by gcc. Architectures: IA-32, Intel® 64, IA-64 architectures Default: C++: -cxxlibC: -no-cxxlib For C++, the compiler uses the run-time libraries and headers provided by gcc.For C, the compiler uses the default run-time libraries and headers and does not link to any additional C++ run-time libraries and headers. However, if you specify compiler option -std=gnu++98, the default is -cxxlib. Description: This option determines whether the compile links using the C++ run-time libraries and header files provided by gcc. Option -cxxlib-nostd prevents the compiler from linking with the standard C++ library. -Dname[=value] Defines a macro name that can be associated with an optional value. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Only default symbols or macros are defined. Description: Defines a macro name that can be associated with an optional value.This option is equivalent to a #define pre- processor directive. If a value is not specified, name is defined as "1". If you specify noD, all preprocessor definitions apply only to fpp and not to Intel® Fortran conditional compila- tion directives. To use this option, you must also specify option fpp. CAUTION: On Linux and Mac OS X systems, if you are not specifying a value, do not use D for name, because it will conflict with the -DD option. -dD Same as -dM, but outputs #define directives in prepro- cessed source. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not output #define directives. Description: Same as -dM, but outputs #define directives in prepro- cessed source. To use this option, you must also specify the E option. -debug[keyword] Enables or disables generation of debugging information. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -debug none No debugging information is generated. Description: This option enables or disables generation of debugging information. Note that if you turn debugging on, optimization is turned off. Keywords semantic-stepping, inline-debug-info, vari- able-locations, and extended can be used in combination with each other. If conflicting keywords are used in com- bination, the last one specified on the command line has precedence. Option Description -debug none Disables generation of debug- ging information. -debug full or -debug all Generates complete debugging information. It is the same as specifying -debug with no key- word. -debug minimal Generates line number informa- tion for debugging. -debug emit_column Generates column number infor- mation for debugging. -debug expr-source-pos Generates source position information at the statement level of granularity. -debug inline-debug-info Generates enhanced debug infor- mation for inlined code. It provides more information to debuggers for function call traceback. -debug semantic-stepping Generates enhanced debug infor- mation useful for breakpoints and stepping. It tells the debugger to stop only at machine instructions that achieve the final effect of a source statement. For example, in the case of an assignment statement, this might be a store instruction that assigns a value to a program variable; for a function call, it might be the machine instruction that executes the call. Other instructions generated for those source statements are not displayed during stepping. This option has no impact unless optimizations have also been enabled. -debug variable-locations Generates enhanced debug infor- mation useful in finding scalar local variables. It uses a fea- ture of the Dwarf object module known as "location lists". This feature allows the run-time locations of local scalar variables to be speci- fied more accurately; that is, whether, at a given position in the code, a variable value is found in memory or a machine register. -debug extended Sets keyword values seman- tic-stepping and variable-loca- tions. It also tells the com- piler to include column numbers in the line information. -debug parallel(Linux only) Generates parallel debug code instrumentations needed for the thread data sharing and reen- trant call detection of the Intel® Parallel Debugger Exten- sion. This option is only available on IA-32 and Intel® 64 architectures. On Linux* systems, debuggers read debug information from executable images. As a result, information is written to object files and then added to the executable by the linker. On Mac OS* X systems, debuggers read debug infor- mation from object files. As a result, the executables don't contain any debug information. Therefore, if you want to be able to debug on these systems, you must retain the object files. -diag-type diag-list Controls the display of diagnostic information. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler issues certain diagnostic messages by default. Description: This option controls the display of diagnostic informa- tion. Diagnostic messages are output to stderr unless com- piler option -diag-file (Linux and Mac OS X) or /Qdiag-file (Windows) is specified. When diag-list value "warn" is used with the Source Checker (sc) diagnostics, the following behavior occurs: · Option -diag-enable warn (Linux and Mac OS X) and /Qdiag-enable:warn (Windows) enable all Source Checker diagnostics except those that have an "error" severity level. They enable all Source Checker warnings, cautions, and remarks. · Option -diag-disable warn (Linux and Mac OS X) and /Qdiag-disable:warn (Windows) disable all Source Checker diagnostics except those that have an "error" severity level. They suppress all Source Checker warnings, cautions, and remarks. The following table shows more information on values you can specify for diag-list item sc. To control the diagnostic information reported by the vec- torizer, use the -vec-report (Linux and Mac OS X) or /Qvec-report (Windows) option. To control the diagnostic information reported by the auto-parallelizer, use the -par-report (Linux and Mac OS X) or /Qpar-report (Windows) option. -diag-dump Tells the compiler to print all enabled diagnostic mes- sages and stop compilation. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler issues certain diagnostic messages by default. Description: This option tells the compiler to print all enabled diag- nostic messages and stop compilation. The diagnostic mes- sages are output to stdout. This option prints the enabled diagnostics from all possi- ble diagnostics that the compiler can issue, including any default diagnostics. If -diag-enable diag-list (Linux and Mac OS X) or /Qdiag-enable diag-list (Windows) is specified, the print out will include the diag-list diagnostics. -diag-enable sc-include Tells a source code analyzer to process include files and source files when issuing diagnostic messages. Architectures: IA-32, Intel® 64 architectures Default: OFF The compiler issues certain diagnostic messages by default. If the Source Checker is enabled, include files are not analyzed by default. Description: This option tells a source code analyzer (Source Checker) to process include files and source files when issuing diagnostic messages. Normally, when Source Checker diag- nostics are enabled, only source files are analyzed. To use this option, you must also specify -diag-enable sc (Linux and Mac OS X) or /Qdiag-enable:sc (Windows) to enable the Source Checker diagnostics, or -diag-enable sc-parallel (Linux and Mac OS X) or /Qdiag-enable:sc-par- allel (Windows) to enable parallel lint. -diag-error-limitn -no-diag-error-limit Specifies the maximum number of errors allowed before com- pilation stops. Architectures: IA-32, Intel® 64, IA-64 architectures Default: 30 A maximum of 30 error-level and fatal-level messages are allowed. Description: This option specifies the maximum number of errors allowed before compilation stops. It indicates the maximum number of error-level or fatal-level compiler errors allowed for a file specified on the command line. If you specify -no-diag-error-limit (Linux and Mac OS X) or /Qdiag-error-limit- (Windows) on the command line, there is no limit on the number of errors that are allowed. If the maximum number of errors is reached, a warning mes- sage is issued and the next file (if any) on the command line is compiled. -diag-file[=file] Causes the results of diagnostic analysis to be output to a file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Diagnostic messages are output to stderr. Description: This option causes the results of diagnostic analysis to be output to a file. The file is placed in the current working directory. If file is specified, the name of the file is file.diag. The file can include a file extension; for example, if file.ext is specified, the name of the file is file.ext. If file is not specified, the name of the file is name-of-the-first-source-file.diag. This is also the name of the file if the name specified for file conflicts with a source file name provided in the command line. NOTE: If you specify -diag-file (Linux and Mac OS X) or /Qdiag-file (Windows) and you also specify -diag-file-append (Linux and Mac OS X) or /Qdiag-file-append (Windows), the last option specified on the command line takes precedence. -diag-file-append[=file] Causes the results of diagnostic analysis to be appended to a file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Diagnostic messages are output to stderr. Description: This option causes the results of diagnostic analysis to be appended to a file. If you do not specify a path, the driver will look for file in the current working direc- tory. If file is not found, then a new file with that name is created in the current working directory. If the name specified for file conflicts with a source file name pro- vided in the command line. the name of the file is name-of-the-first-source-file.diag. NOTE: If you specify -diag-file-append (Linux and Mac OS X) or /Qdiag-file-append (Windows) and you also specify -diag-file (Linux and Mac OS X) or /Qdiag-file (Windows), the last option specified on the command line takes prece- dence. -diag-id-numbers -no-diag-id-numbers Determines whether the compiler displays diagnostic mes- sages by using their ID number values. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -diag-id-numbers The compiler displays diagnostic mes- sages by using their ID number values. Description: This option determines whether the compiler displays diag- nostic messages by using their ID number values. If you specify -no-diag-id-numbers (Linux and Mac OS X) or /Qdiag-id-numbers- (Windows), mnemonic names are output for driver diagnostics only. -diag-onceid[,id,...] Tells the compiler to issue one or more diagnostic mes- sages only once. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler issues certain diagnostic messages by default. Description: This option tells the compiler to issue one or more diag- nostic messages only once. -dM Tells the compiler to output macro definitions in effect after preprocessing. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not output macro defi- nitions after preprocessing. Description: This option tells the compiler to output macro definitions in effect after preprocessing. To use this option, you must also specify the E option. -dN Same as -dD, but output #define directives contain only macro names. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not output #define directives. Description: Same as -dD, but output #define directives contain only macro names. To use this option, you must also specify the E option. -dryrun Specifies that driver tool commands should be shown but not executed. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No tool commands are shown, but they are executed. Description: This option specifies that driver tool commands should be shown but not executed. -dumpmachine Displays the target machine and operating system configu- ration. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not display target machine or operating system information. Description: This option displays the target machine and operating system configuration. No compilation is performed. -dumpversion Displays the version number of the compiler. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not display the com- piler version number. Description: This option displays the version number of the compiler. It does not compile your source files. -dynamic-linker file (L*X only) Specifies a dynamic linker other than the default. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The default dynamic linker is used. Description: This option lets you specify a dynamic linker other than the default. -dynamiclib (M*X only) Invokes the libtool command to generate dynamic libraries. Architectures: IA-32, Intel® 64 architectures Default: OFF The compiler produces an executable. Description: This option invokes the libtool command to generate dynamic libraries. When passed this option, the compiler uses the libtool command to produce a dynamic library instead of an exe- cutable when linking. To build static libraries, you should specify option -staticlib or libtool -static -E Causes the preprocessor to send output to stdout. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Preprocessed source files are output to the compiler. Description: This option causes the preprocessor to send output to std- out. Compilation stops when the files have been prepro- cessed. When you specify this option, the compiler's preprocessor expands your source module and writes the result to std- out. The preprocessed source contains #line directives, which the compiler uses to determine the source file and line number. -early-template-check -no-early-template-check Lets you semantically check template function template prototypes before instantiation. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-early-template-check The prototype instantiation of function templates and function members of class templates is deferred. Description: Lets you semantically check template function template prototypes before instantiation. On Linux* OS platforms, gcc 3.4 (or newer) compatibilty modes (i.e. -gcc-ver- sion=340 and later) must be in effect. For all Mac OS* X platforms, gcc 4.0 (or newer) is required. -EP Causes the preprocessor to send output to stdout, omitting #line directives. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Preprocessed source files are output to the compiler. Description: This option causes the preprocessor to send output to std- out, omitting #line directives. If you also specify option P or Linux option F, the pre- processor will write the results (without #line direc- tives) to a file instead of stdout. -export Enables support for the C++ export template feature. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The export template feature is not enabled. Description: This option enables support for the C++ export template feature. This option is supported only in C++ mode. -export-dir dir Specifies a directory name for the exported template search path. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not recognize exported templates. Description: This option specifies a directory name for the exported template search path. To use this option, you must also specify the -export option. Directories in the search path are used to find the defi- nitions of exported templates and are searched in the order in which they are specified on the command-line. The current directory is always the first entry in the search path. -fabi-version=n Instructs the compiler to select a specific ABI implemen- tation. Architectures: IA-32, Intel® 64, IA-64 architectures Default: Varies The compiler uses the ABI implementation that corresponds to the installed ver- sion of gcc. Description: This option tells the compiler to select a specific ABI implementation. This option is compatible with gcc option -fabi-version. If you have multiple versions of gcc installed, the compiler may change the value of n depend- ing on which gcc is detected in your path. NOTE: gcc 3.2 and 3.3 are not fully ABI-compliant, but gcc 3.4 is highly ABI-compliant. CAUTION: Do not mix different values for -fabi-version in one link. -falias -fno-alias Determines whether aliasing should be assumed in the pro- gram. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -falias Aliasing is assumed in the program. Description: This option determines whether aliasing should be assumed in the program. If you do not want aliasing to be assumed in the program, specify -fno-alias. -falign-functions[=n] -fno-align-functions Tells the compiler to align functions on an optimal byte boundary. Architectures: IA-32, Intel® 64 architectures Default: -fno-align-functions The compiler aligns functions on 2-byte boundaries. This is the same as specify- ing -falign-functions=2 (Linux and Mac OS X). Description: This option tells the compiler to align functions on an optimal byte boundary. If you do not specify n, the com- piler aligns the start of functions on 16-byte boundaries. -falign-stack=mode Tells the compiler the stack alignment to use on entry to routines. Architectures: IA-32 architecture Default: -falign-stack=default The compiler uses default heuristics for stack alignment. Description: This option tells the compiler the stack alignment to use on entry to routines. -fargument-alias -fargument-noalias Determines whether function arguments can alias each other. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fargument-alias Function arguments can alias each other and can alias global storage. Description: This option determines whether function arguments can alias each other. If you specify –fargument-noalias or /Qalias-args-, function arguments cannot alias each other, but they can alias global storage. On Linux and Mac OS X systems, you can also disable alias- ing for global storage, by specifying option -fargu- ment-noalias-global. -fargument-noalias-global Tells the compiler that function arguments cannot alias each other and cannot alias global storage. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Function arguments can alias each other and can alias global storage. Description: This option tells the compiler that function arguments cannot alias each other and they cannot alias global stor- age. If you only want to prevent function arguments from being able to alias each other, specify option -fargu- ment-noalias. -fast Maximizes speed across the entire program. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The optimizations that maximize speed are not enabled. Description: This option maximizes speed across the entire program. It sets the following options: · On systems using IA-64 architecture:Windows: /O3 and /QipoLinux: -ipo, -O3, and -static · On systems using IA-32 architecture and Intel® 64 architecture:Mac OS X: -ipo, -mdynamic-no-pic, -O3, -no-prec-div, -static, and -xHostWindows: /O3, /Qipo, /Qprec-div-, and /QxHostLinux: -ipo, -O3, -no-prec-div, -static, and -xHost When option fast is specified on systems using IA-32 architecture or Intel® 64 architecture, you can override the -xHost or /QxHost setting by specifying a different processor-specific -x or /Qx option on the command line. However, the last option specified on the command line takes precedence. For example, if you specify -fast -xSSE3 (Linux) or /fast /QxSSE3 (Windows), option -xSSE3 or /QxSSE3 takes effect. However, if you specify -xSSE3 -fast (Linux) or /QxSSE3 /fast (Windows), option -xHost or /QxHost takes effect. NOTE: The options set by option fast may change from release to release. -fast-transcendentals -no-fast-transcendentals Enables the compiler to replace calls to transcendental functions with faster but less precise implementations. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fast-transcendentals The default depends on the setting of -fp-model (Linux and Mac OS X). The default is ON if default setting -fp-model fast is in effect. However, if a value-safe option such as -fp-model precise is specified, the default is OFF. Description: This option enables the compiler to replace calls to tran- scendental functions with implementations that may be faster but less precise. It tells the compiler to perform certain optimizations on transcendental functions, such as replacing individual calls to sine in a loop with a single call to a less pre- cise vectorized sine library routine. This option has an effect only when specified with one of the following options: · Windows* OS: /fp:except or /fp:precise · Linux* OS and Mac OS* X: -fp-model except or -fp-model precise You cannot use this option with option -fp-model strict (Linux and Mac OS X) or /fp:strict (Windows). -fbuiltin[-func] -fno-builtin[-func] Enables or disables inline expansion of intrinsic func- tions. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Inline expansion of intrinsic functions disabled. Description: This option enables or disables inline expansion of one or more intrinsic functions. If -func is not specified, -fno-builtin disables inline expansion for all intrinsic functions. For a list of built-in functions affected by -fbuiltin, search for "built-in functions" in the appropriate gcc* documentation. For a list of built-in functions affected by /Oi, search for "/Oi" in the appropriate Microsoft* Visual C/C++* doc- umentation. -fcode-asm Produces an assembly listing with machine code annota- tions. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No machine code annotations appear in the assembly listing file, if one is produced. Description: This option produces an assembly listing file with machine code annotations. The assembly listing file shows the hex machine instruc- tions at the beginning of each line of assembly code. The file cannot be assembled; the filename is the name of the source file with an extension of .cod. To use this option, you must also specify option -S, which causes an assembly listing to be generated. -fcommon -fno-common Determines whether the compiler treats common symbols as global definitions. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fcommon The compiler does not treat common sym- bols as global definitions. Description: This option determines whether the compiler treats common symbols as global definitions and to allocate memory for each symbol at compile time. Option -fno-common tells the compiler to treat common sym- bols as global definitions. When using this option, you can only have a common variable declared in one module; otherwise, a link time error will occur for multiple defined symbols. On IA-64 architecture, this option allows the use of gp-relative(gprel) addressing of common data variables. Normally, a file-scope declaration with no initializer and without the extern or static keyword "int i;" is repre- sented as a common symbol. Such a symbol is treated as an external reference. However, if no other compilation unit has a global definition for the name, the linker allocates memory for it. -fexceptions -fno-exceptions Enables exception handling table generation. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fexceptions Exception handling table generation is enabled. Default for C++. -fno-exceptions Exception handling table generation is disabled. Default for C. Description: This option enables exception handling table generation. The -fno-exceptions option disables exception handling ta- ble generation, resulting in smaller code. When this option is used, any use of exception handling constructs (such as try blocks and throw statements) will produce an error. Exception specifications are parsed but ignored. It also undefines the preprocessor symbol __EXCEPTIONS. -ffnalias -fno-fnalias Specifies that aliasing should be assumed within func- tions. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -ffnalias Aliasing is assumed within functions. Description: This option specifies that aliasing should be assumed within functions. The -fno-fnalias option specifies that aliasing should not be assumed within functions, but should be assumed across calls. -ffreestanding Ensures that compilation takes place in a freestanding environment. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Standard libraries are used during com- pilation. Description: This option ensures that compilation takes place in a freestanding environment. The compiler assumes that the standard library may not exist and program startup may not necessarily be at main. This environment meets the defini- tion of a freestanding environment as described in the C and C++ standard. An example of an application requiring such an environment is an OS kernel. NOTE: When you specify this option, the compiler will not assume the presence of compiler-specific libraries. It will only generate calls that appear in the source code. -ffunction-sections Places each function in its own COMDAT section. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Places each function in its own COMDAT section. -finline -fno-inline Tells the compiler to inline functions declared with __inline and perform C++ inlining. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fno-inline The compiler does not inline functions declared with __inline. Description: This option tells the compiler to inline functions declared with __inline and perform C++ inlining. -finline-functions -fno-inline-functions Enables function inlining for single file compilation. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -finline-functions Interprocedural optimizations occur. However, if you specify -O0, the default is OFF. Description: This option enables function inlining for single file com- pilation. It enables the compiler to perform inline function expan- sion for calls to functions defined within the current source file. The compiler applies a heuristic to perform the function expansion. To specify the size of the function to be expanded, use the -finline-limit option. -finline-limit=n Lets you specify the maximum size of a function to be inlined. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler uses default heuristics when inlining functions. Description: This option lets you specify the maximum size of a func- tion to be inlined. The compiler inlines smaller func- tions, but this option lets you inline large functions. For example, to indicate a large function, you could spec- ify 100 or 1000 for n. Note that parts of functions cannot be inlined, only whole functions. This option is a modification of the -finline-functions option, whose behavior occurs by default. -finstrument-functions -fno-instrument-functions Determines whether function entry and exit points are instrumented. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fno-instrument-functions Function entry and exit points are not instrumented. Description: This option determines whether function entry and exit points are instrumented. It may increase execution time. The following profiling functions are called with the address of the current function and the address of where the function was called (its "call site"): · This function is called upon function entry: · On IA-32 architecture and Intel® 64 architecture: void __cyg_profile_func_enter (void *this_fn, void *call_site); · On IA-64 architecture: void __cyg_profile_func_enter (void **this_fn, void *call_site); · This function is called upon function exit: · On IA-32 architecture and Intel® 64 architecture: void __cyg_profile_func_exit (void *this_fn, void *call_site); · On IA-64 architecture: void __cyg_profile_func_exit (void **this_fn, void *call_site); On IA-64 architecture, the additional de-reference of the function pointer argument is required to obtain the func- tion entry point contained in the first word of the func- tion descriptor for indirect function calls. The descrip- tor is documented in the Intel® Itanium® Software Conven- tions and Runtime Architecture Guide, section 8.4.2. You can find this design guide at web site http://www.intel.com. These functions can be used to gather more information, such as profiling information or timing information. Note that it is the user's responsibility to provide these pro- filing functions. If you specify -finstrument-functions (Linux and Mac OS X) or /Qinstrument-functions (Windows), function inlining is disabled. If you specify -fno-instrument-functions or /Qinstrument-functions-, inlining is not disabled. On Linux and Mac OS X systems, you can use the following attribute to stop an individual function from being instrumented: __attribute__((__no_instrument_function__)) It also stops inlining from being disabled for that indi- vidual function. This option is provided for compatibility with gcc. -fjump-tables -fno-jump-tables Determines whether jump tables are generated for switch statements. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fjump-tables The compiler uses jump tables for switch statements. Description: This option determines whether jump tables are generated for switch statements. Option -fno-jump-tables prevents the compiler from gener- ating jump tables for switch statements. This action is performed unconditionally and independent of any generated code performance consideration. Option -fno-jump-tables also prevents the compiler from creating switch statements internally as a result of opti- mizations. Use -fno-jump-tables with -fpic when compiling objects that will be loaded in a way where the jump table reloca- tion cannot be resolved. -fkeep-static-consts -fno-keep-static-consts Tells the compiler to preserve allocation of variables that are not referenced in the source. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fno-keep-static-consts If a variable is never referenced in a routine, the variable is discarded unless optimizations are disabled by option -O0 (Linux and Mac OS X). Description: This option tells the compiler to preserve allocation of variables that are not referenced in the source. The negated form can be useful when optimizations are enabled to reduce the memory usage of static data. -fma (L*X only) -no-fma (L*X only) Enables the combining or contraction of floating-point multiplications and add or subtract operations. Architectures: IA-64 architecture Default: -fma Floating-point multiplications and add/subtract operations are combined. However, if you specify -fp-model strict (Linux), but do not explicitly specify -fma, the default is -no-fma. Description: This option enables the combining or contraction of float- ing-point multiplications and add or subtract operations into a single operation. -fmath-errno -fno-math-errno Tells the compiler that errno can be reliably tested after calls to standard math library functions. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fno-math-errno The compiler assumes that the program does not test errno after calls to stan- dard math library functions. Description: This option tells the compiler to assume that the program tests errno after calls to math library functions. This restricts optimization because it causes the compiler to treat most math functions as having side effects. Option -fno-math-errno tells the compiler to assume that the program does not test errno after calls to math library functions. This frequently allows the compiler to generate faster code. Floating-point code that relies on IEEE exceptions instead of errno to detect errors can safely use this option to improve performance. -fminshared Specifies that a compilation unit is a component of a main program and should not be linked as part of a shareable object. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Source files are compiled together to form a single object file. Description: This option specifies that a compilation unit is a compo- nent of a main program and should not be linked as part of a shareable object. This option allows the compiler to optimize references to defined symbols without special visibility settings. To ensure that external and common symbol references are optimized, you need to specify visibility hidden or pro- tected by using the -fvisibility, -fvisibility-hidden, or -fvisibility-protected option. Also, the compiler does not need to generate posi- tion-independent code for the main program. It can use absolute addressing, which may reduce the size of the global offset table (GOT) and may reduce memory traffic. -fmudflap (L*X only) The compiler instruments risky pointer operations to pre- vent buffer overflows and invalid heap use. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not instruments risky pointer operations. Description: The compiler instruments risky pointer operations to pre- vent buffer overflows and invalid heap use. Requires gcc 4.0 or newer. When using this compiler option, you must specify linker option -lmudflap in the link command line to resolve ref- erences to the libmudflap library. -fno-gnu-keywords Do not recognize typeof as keyword. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Do not recognize typeof as keyword. -fno-implicit-inline-templates Tells the compiler to not emit code for implicit instanti- ations of inline templates. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler handles inlines so that compilations, with and without optimiza- tion, will need the same set of explicit instantiations. Description: This option tells the compiler to not emit code for implicit instantiations of inline templates. -fno-implicit-templates Tells the compiler to not emit code for non-inline tem- plates that are instantiated implicitly. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler handles inlines so that compilations, with and without optimiza- tion, will need the same set of explicit instantiations. Description: This option tells the compiler to not emit code for non-inline templates that are instantiated implicitly, but to only emit code for explicit instantiations. -fnon-call-exceptions -fno-non-call-exceptions Allows trapping instructions to throw C++ exceptions. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fno-non-call-exceptions C++ exceptions are not thrown from trap- ping instructions. Description: This option allows trapping instructions to throw C++ exceptions. It allows hardware signals generated by trap- ping instructions to be converted into C++ exceptions and caught using the standard C++ exception handling mecha- nism. Examples of such signals are SIGFPE (floating-point exception) and SIGSEGV (segmentation violation). You must write a signal handler that catches the signal and throws a C++ exception. After that, any occurrence of that signal within a C++ try block can be caught by a C++ catch handler of the same type as the C++ exception thrown within the signal handler. Only signals generated by trapping instructions (that is, memory access instructions and floating-point instruc- tions) can be caught. Signals that can occur at any time, such as SIGALRM, cannot be caught in this manner. -fnon-lvalue-assign -fno-non-lvalue-assign Determines whether casts and conditional expressions can be used as lvalues. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fnon-lvalue-assign The compiler allows casts and condi- tional expressions to be used as lval- ues. Description: This option determines whether casts and conditional expressions can be used as lvalues. -fno-operator-names Disables support for the operator names specified in the standard. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Disables support for the operator names specified in the standard. -fno-rtti Disables support for run-time type information (RTTI). Architectures: IA-32, IA-64 architectures Default: OFF Description: This option disables support for run-time type information (RTTI). -fnsplit (L*X only) -no-fnsplit (L*X only) Enables function splitting. Architectures: /Qfnsplit[-]: IA-32 architecture, Intel® 64 architecture-[no-]fnsplit: IA-64 architecture Default: -no-fnsplit Function splitting is not enabled unless -prof-use (Linux) is also specified. Description: This option enables function splitting if -prof-use (Linux) or /Qprof-use (Windows) is also specified. Other- wise, this option has no effect. It is enabled automatically if you specify -prof-use or /Qprof-use. If you do not specify one of those options, the default is -no-fnsplit (Linux) or /Qfnsplit- (Win- dows), which disables function splitting but leaves func- tion grouping enabled. To disable function splitting when you use -prof-use or /Qprof-use, specify -no-fnsplit or /Qfnsplit-. -fomit-frame-pointer -fno-omit-frame-pointer Determines whether EBP is used as a general-purpose regis- ter in optimizations. Architectures: -f[no-]omit-frame-pointer: IA-32 architec- ture, Intel® 64 architecture/Oy[-]: IA-32 architecture Default: -fomit-frame-pointer EBP is used as a general-purpose regis- ter in optimizations. However, on Linux* and Mac OS X systems, the default is -fno-omit-frame-pointer if option -O0 or -g is specified. Description: These options determine whether EBP is used as a gen- eral-purpose register in optimizations. Options -fomit-frame-pointer and /Oy allow this use. Options -fno-omit-frame-pointer and /Oy- disallow it. Some debuggers expect EBP to be used as a stack frame pointer, and cannot produce a stack backtrace unless this is so. The -fno-omit-frame-pointer and /Oy- options direct the compiler to generate code that maintains and uses EBP as a stack frame pointer for all functions so that a debugger can still produce a stack backtrace without doing the following: · For -fno-omit-frame-pointer: turning off optimiza- tions with -O0 · For /Oy-: turning off /O1, /O2, or /O3 optimiza- tions The -fno-omit-frame-pointer option is set when you specify option -O0 or the -g option. The -fomit-frame-pointer option is set when you specify option -O1, -O2, or -O3. The /Oy option is set when you specify the /O1, /O2, or /O3 option. Option /Oy- is set when you specify the /Od option. Using the -fno-omit-frame-pointer or /Oy- option reduces the number of available general-purpose registers by 1, and can result in slightly less efficient code. NOTE: There is currently an issue with GCC 3.2 exception handling. Therefore, the Intel compiler ignores this option when GCC 3.2 is installed for C++ and exception handling is turned on (the default). -fp-model keyword Controls the semantics of floating-point calculations. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fp-model fast=1 The compiler uses more aggressive opti- mizations on floating-point calcula- tions. Description: This option controls the semantics of floating-point cal- culations. The keywords can be considered in groups: · Group A: precise, fast, strict · Group B: source, double, extended · Group C: except (or the negative form) You can use more than one keyword. However, the following rules apply: · You cannot specify fast and except together in the same compilation. You can specify any other combination of group A, group B, and group C.Since fast is the default, you must not specify except without a group A or group B keyword. · You should specify only one keyword from group A and only one keyword from group B. If you try to specify more than one keyword from either group A or group B, the last (rightmost) one takes effect. · If you specify except more than once, the last (rightmost) one takes effect. Option Description -fp-model precise or /fp:precise Tells the compiler to strictly adhere to value-safe optimiza- tions when implementing float- ing-point calculations. It dis- ables optimizations that can change the result of float- ing-point calculations, which is required for strict ANSI conformance. These semantics ensure the accuracy of float- ing-point computations, but they may slow performance. The compiler assumes the default floating-point environment; you are not allowed to modify it. Intermediate results are com- puted with the precision shown in the following table, unless it is overridden by a keyword from Group B: Floating-point exception semantics are dis- abled by default. To enable these semantics, you must also specify -fp-model except or /fp:except. For information on the semantics used to interpret floating-point calculations in the source code, see precise in Floating-point Operations: Using the -fp-model (/fp) Option. -fp-model fast[=1|2] or /fp:fast[=1|2] Tells the compiler to use more aggressive optimizations when implementing floating-point calculations. These optimiza- tions increase speed, but may alter the accuracy of float- ing-point computations. Speci- fying fast is the same as spec- ifying fast=1. fast=2 may pro- duce faster and less accurate results. Floating-point excep- tion semantics are disabled by default and they cannot be enabled because you cannot specify fast and except together in the same compila- tion. To enable exception semantics, you must explicitly specify another keyword (see other keyword descriptions for details). For information on the semantics used to interpret floating-point calculations in the source code, see fast in Floating-point Operations: Using the -fp-model (/fp) Option. -fp-model strict or /fp:strict Tells the compiler to strictly adhere to value-safe optimiza- tions when implementing float- ing-point calculations and enables floating-point excep- tion semantics. This is the strictest floating-point model. The compiler does not assume the default floating-point environment; you are allowed to modify it. Floating-point exception semantics can be dis- abled by explicitly specifying -fp-model no-except or /fp:except-. For information on the semantics used to inter- pret floating-point calcula- tions in the source code, see strict in Floating-point Opera- tions: Using the -fp-model (/fp) Option. -fp-model source or /fp:source This option causes intermediate results to be rounded to the precision defined in the source code. It also implies keyword precise unless it is overridden by a keyword from Group A. Intermediate expressions use the precision of the operand with higher precision, if any. The compiler assumes the default floating-point environ- ment; you are not allowed to modify it. For information on the semantics used to interpret floating-point calculations in the source code, see source in Floating-point Operations: Using the -fp-model (/fp) Option. -fp-model double or /fp:double This option causes intermediate results to be rounded as fol- lows: This option also implies keyword precise unless it is overridden by a keyword from Group A. The compiler assumes the default floating-point environment; you are not allowed to modify it. For information on the semantics used to interpret float- ing-point calculations in the source code, see double in Floating-point Operations: Using the -fp-model (/fp) Option. -fp-model extended or /fp:extended This option causes intermediate results to be rounded as follows: This option also implies keyword precise unless it is overridden by a keyword from Group A. The compiler assumes the default float- ing-point environment; you are not allowed to modify it. For information on the semantics used to interpret float- ing-point calculations in the source code, see double in Floating-point Operations: Using the -fp-model (/fp) Option. -fp-model except or /fp:except Tells the compiler to use floating-point exception seman- tics. NOTE: On Windows and Linux operating systems on IA-32 architecture, the compiler, by default, implements float- ing-point (FP) arithmetic using SSE2 and SSE instructions. This can cause differences in floating-point results when compared to previous x87 implementations. -fp-port -no-fp-port Rounds floating-point results after floating-point opera- tions. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-fp-port The default rounding behavior depends on the compiler's code generation decisions and the precision parameters of the operating system. Description: This option rounds floating-point results after float- ing-point operations. Rounding to user-specified precision occurs at assignments and type conversions. This has some impact on speed. The default is to keep results of floating-point opera- tions in higher precision. This provides better perfor- mance but less consistent floating-point results. -fp-relaxed (L*X only) -no-fp-relaxed (L*X only) Enables use of faster but slightly less accurate code sequences for math functions. Architectures: IA-64 architecture Default: -no-fp-relaxed Default code sequences are used for math functions. Description: This option enables use of faster but slightly less accu- rate code sequences for math functions, such as divide and sqrt. When compared to strict IEEE* precision, this option slightly reduces the accuracy of floating-point calcula- tions performed by these functions, usually limited to the least significant digit. This option also enables the performance of more aggres- sive floating-point transformations, which may affect accuracy. -fp-speculation=mode Tells the compiler the mode in which to speculate on floating-point operations. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fp-speculation=fast The compiler speculates on float- ing-point operations. This is also the behavior when optimizations are enabled. However, if you specify no optimizations (-O0 on Linux), the default is -fp-spec- ulation=safe (Linux). Description: This option tells the compiler the mode in which to specu- late on floating-point operations. -fp-stack-check Tells the compiler to generate extra code after every function call to ensure that the floating-point stack is in the expected state. Architectures: IA-32, Intel® 64 architectures Default: OFF There is no checking to ensure that the floating-point (FP) stack is in the expected state. Description: This option tells the compiler to generate extra code after every function call to ensure that the float- ing-point (FP) stack is in the expected state. By default, there is no checking. So when the FP stack overflows, a NaN value is put into FP calculations and the program's results differ. Unfortunately, the overflow point can be far away from the point of the actual bug. This option places code that causes an access violation exception immediately after an incorrect call occurs, thus making it easier to locate these issues. -fpack-struct Specifies that structure members should be packed together. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Specifies that structure members should be packed together. Note: Using this option may result in code that is not usable with standard (system) c and C++ libraries. -fpermissive Allow for non-conformant code. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Allow for non-conformant code. -fpic -fno-pic Determines whether the compiler generates position-inde- pendent code. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fno-pic or -fpic On systems using IA-32 or Intel® 64 architecture, the compiler does not gen- erate position-independent code. On sys- tems using IA-64 architecture, the com- piler generates position-independent code. Description: This option determines whether the compiler generates position-independent code. Option -fpic specifies full symbol preemption. Global sym- bol definitions as well as global symbol references get default (that is, preemptable) visibility unless explic- itly specified otherwise. Option -fno-pic is only valid on systems using IA-32 or Intel® 64 architecture. On systems using IA-32 or Intel® 64 architecture, -fpic must be used when building shared objects. This option can also be specified as -fPIC. -fpie (L*X only) Tells the compiler to generate position-independent code. The generated code can only be linked into executables. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not generate position-independent code for an exe- cutable-only object. Description: This option tells the compiler to generate position-inde- pendent code. It is similar to -fpic, but code generated by -fpie can only be linked into an executable. Because the object is linked into an executable, this option causes better optimization of some symbol refer- ences. To ensure that run-time libraries are set up properly for the executable, you should also specify option -pie to the compiler driver on the link command line. Option -fpie can also be specified as -fPIE. -fr32 (L*X only) Disables the use of the high floating-point registers. Architectures: IA-64 architecture Default: OFF The use of the high floating-point reg- isters is enabled. Description: This option disables the use of the high floating-point registers. Only the lower 32 floating-point registers are used. -freg-struct-return Return struct and union values in registers when possible. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Return struct and union values in registers when possible. -fshort-enums Tells the compiler to allocate as many bytes as needed for enumerated types. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler allocates a default number of bytes for enumerated types. Description: This option tells the compiler to allocate as many bytes as needed for enumerated types. -fsource-asm Produces an assembly listing with source code annotations. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No source code annotations appear in the assembly listing file, if one is pro- duced. Description: This option produces an assembly listing file with source code annotations. The assembly listing file shows the source code as interspersed comments. To use this option, you must also specify option -S, which causes an assembly listing to be generated. -fstack-security-check -fno-stack-security-check Determines whether the compiler generates code that detects some buffer overruns. Architectures: IA-32, Intel® 64 architectures Default: -fno-stack-security-check The compiler does not detect buffer overruns. Description: This option determines whether the compiler generates code that detects some buffer overruns that overwrite the return address. This is a common technique for exploiting code that does not enforce buffer size restrictions. The /GS option is supported with Microsoft Visual Studio .NET 2003* and Microsoft Visual Studio 2005*. -fsyntax-only Tells the compiler to check only for correct syntax. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Normal compilation is performed. Description: For details, see option syntax. -ftemplate-depth-n Control the depth in which recursive templates are expanded. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Control the depth in which recursive templates are expanded. On Linux*, this option is supported only by invoking the compiler with icpc. -ftls-model=model Change thread local storage model. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Change thread local storage model. -ftrapuv Initializes stack local variables to an unusual value to aid error detection. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not initialize local variables. Description: This option initializes stack local variables to an unusual value to aid error detection. Normally, these local variables should be initialized in the application. The option sets any uninitialized local variables that are allocated on the stack to a value that is typically inter- preted as a very large integer or an invalid address. Ref- erences to these variables are then likely to cause run-time errors that can help you detect coding errors. This option sets option -g (Linux and Mac OS X) and /Zi or /Z7 (Windows). -ftz -no-ftz Flushes denormal results to zero. Architectures: IA-32, Intel® 64, IA-64 architectures Default: Systems using IA-64 architecture: -no-ftzSystems using IA-32 architecture and Intel® 64 architecture: -ftz On systems using IA-64 architecture, the compiler lets results gradually under- flow. On systems using IA-32 architec- ture and Intel® 64 architecture, denor- mal results are flushed to zero. Description: This option flushes denormal results to zero when the application is in the gradual underflow mode. It may improve performance if the denormal values are not criti- cal to your application's behavior. This option sets or resets the FTZ and the DAZ hardware flags. If FTZ is ON, denormal results from floating-point calculations will be set to the value zero. If FTZ is OFF, denormal results remain as is. If DAZ is ON, denormal val- ues used as input to floating-point instructions will be treated as zero. If DAZ is OFF, denormal instruction inputs remain as is. Systems using IA-64 architecture have FTZ but not DAZ. Systems using Intel® 64 architecture have both FTZ and DAZ. FTZ and DAZ are not supported on all IA-32 architectures. When -ftz (Linux and Mac OS X) or /Qftz (Windows) is used in combination with an SSE-enabling option on systems using IA-32 architecture (for example, xN or QxN), the compiler will insert code in the main routine to set FTZ and DAZ. When -ftz or /Qftz is used without such an option, the compiler will insert code to conditionally set FTZ/DAZ based on a run-time processor check. -no-ftz (Linux and Mac OS X) or /Qftz- (Windows) will prevent the compiler from inserting any code that might set FTZ or DAZ. This option only has an effect when the main program is being compiled. It sets the FTZ/DAZ mode for the process. The initial thread and any threads subsequently created by that process will operate in FTZ/DAZ mode. On systems using IA-64 architecture, optimization option O3 sets -ftz and /Qftz; optimization option O2 sets -no-ftz (Linux) and /Qftz- (Windows). On systems using IA-32 architecture and Intel® 64 architecture, every opti- mization option O level, except O0, sets -ftz and /Qftz. If this option produces undesirable results of the numeri- cal behavior of your program, you can turn the FTZ/DAZ mode off by using -no-ftz or /Qftz- in the command line while still benefiting from the O3 optimizations. NOTE: Options -ftz and /Qftz are performance options. Set- ting these options does not guarantee that all denormals in a program are flushed to zero. They only cause denor- mals generated at run time to be flushed to zero. -funroll-all-loops Unroll all loops even if the number of iterations is uncertain when the loop is entered. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Do not unroll all loops. Description: Unroll all loops, even if the number of iterations is uncertain when the loop is entered. There may a perfor- mance impact with this option. -funsigned-bitfields -fno-unsigned-bitfields Determines whether the default bitfield type is changed to unsigned. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fno-unsigned-bitfields The default bitfield type is signed. Description: This option determines whether the default bitfield type is changed to unsigned. -funsigned-char Change default char type to unsigned. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Do not change default char type to unsigned. Description: Change default char type to unsigned. -fverbose-asm -fno-verbose-asm Produces an assembly listing with compiler comments, including options and version information. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fno-verbose-asm No source code annotations appear in the assembly listing file, if one is pro- duced. Description: This option produces an assembly listing file with com- piler comments, including options and version information. To use this option, you must also specify -S, which sets -fverbose-asm. If you do not want this default when you specify -S, spec- ify -fno-verbose-asm. -fvisibility=keyword -fvisibility-keyword=file Specifies the default visibility for global symbols or the visibility for symbols in a file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -fvisibility=default The compiler sets visibility of symbols to default. Description: This option specifies the default visibility for global symbols (syntax -fvisibility=keyword) or the visibility for symbols in a file (syntax -fvisibility-keyword=file). Visibility specified by -fvisibility-keyword=file over- rides visibility specified by -fvisibility=keyword for symbols specified in a file. Option Description -fvisibility=default-fvisibility-default=file Sets visibility of symbols to default. This means other com- ponents can reference the sym- bol, and the symbol definition can be overridden (preempted) by a definition of the same name in another component. -fvisibility=extern-fvisibility-extern=file Sets visibility of symbols to extern. This means the symbol is treated as though it is defined in another component. It also means that the symbol can be overridden by a defini- tion of the same name in another component. -fvisibility=hidden-fvisibility-hidden=file Sets visibility of symbols to hidden. This means that other components cannot directly ref- erence the symbol. However, its address may be passed to other components indirectly. -fvisibility=internal-fvisibility-internal=file Sets visibility of symbols to internal. This means the symbol cannot be referenced outside its defining component, either directly or indirectly. -fvisibility=protected-fvisibility-protected=file CELL_TEXT If an -fvisibility option is specified more than once on the command line, the last specification takes precedence over any others. If a symbol appears in more than one visibility file, the setting with the least visibility takes precedence. The following shows the precedence of the visibility set- tings (from greatest to least visibility): · extern · default · protected · hidden · internal Note that extern visibility only applies to functions. If a variable symbol is specified as extern, it is assumed to be default. -fvisibility-inlines-hidden Causes inline member functions (those defined in the class declaration) to be marked hidden. Architectures: IA-32 architecture Default: OFF The compiler does not cause inline mem- ber functions to be marked hidden. Description: Causes inline member functions (those defined in the class declaration) to be marked hidden. This option is particu- larly useful for templates. -g Tells the compiler to generate full debugging information in the object file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No debugging information is produced in the object file. Description: This option tells the compiler to generate symbolic debug- ging information in the object file for use by debuggers. The compiler does not support the generation of debugging information in assemblable files. If you specify this option, the resulting object file will contain debugging information, but the assemblable file will not. This option turns off O2 and makes O0 (Linux and Mac OS X) or Od (Windows) the default unless O2 (or another O option) is explicitly specified in the same command line. On Linux systems using Intel® 64 architecture and Linux and Mac OS X systems using IA-32 architecture, specifying the -g or -O0 option sets the -fno-omit-frame-pointer option. -g0 Disables generation of symbolic debug information. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler generates symbolic debug information. Description: This option disables generation of symbolic debug informa- tion. -gcc -no-gcc -gcc-sys Determines whether certain GNU macros are defined or unde- fined. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -gcc The compiler defines the GNU macros __GNUC__, __GNUC_MINOR__, and __GNUC_PATCHLEVEL__ Description: This option determines whether the GNU macros __GNUC__, __GNUC_MINOR__, and __GNUC_PATCHLEVEL__ are defined or defined. Option Description -gcc Defines GNU macros -no-gcc Undefines GNU macros -gcc-sys Defines GNU macros only during compilation of system headers -gcc-name=dir Specifies the location of the gcc compiler when the com- piler cannot locate the gcc C++ libraries. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler locates the gcc libraries in the gcc install directory. Description: This option specifies the location of the gcc compiler when the compiler cannot locate the gcc C++ libraries. This option is helpful when you are referencing a non-standard gcc installation. The C++ equivalent to option -gcc-name is -gxx-name. -gcc-version=n Provides compatible behavior with gcc. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF This option defaults to the installed version of gcc. Description: This option provides compatible behavior with gcc. It selects the version of gcc with which you achieve ABI interoperability. -gdwarf-2 Enables generation of debug information using the DWARF2 format. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No debug information is generated. How- ever, if compiler option -g is speci- fied, debug information is generated in the latest DWARF format, which is cur- rently DWARF2. Description: This option enables generation of debug information using the DWARF2 format. This is currently the default when com- piler option -g is specified. -global-hoist -no-global-hoist Enables certain optimizations that can move memory loads to a point earlier in the program execution than where they appear in the source. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -global-hoist Certain optimizations are enabled that can move memory loads. Description: This option enables certain optimizations that can move memory loads to a point earlier in the program execution than where they appear in the source. In most cases, these optimizations are safe and can improve performance. The -no-global-hoist (Linux and Mac OS X) or /Qglobal-hoist- (Windows) option is useful for some appli- cations, such as those that use shared or dynamically mapped memory, which can fail if a load is moved too early in the execution stream (for example, before the memory is mapped). -gxx-name=dir Specifies that the g++ compiler should be used to set up the environment for C++ compilations. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler uses the PATH setting to find the g++ compiler and resolve envi- ronment settings. Description: This option specifies that the g++ compiler should be used to set up the environment for C++ compilations. The C equivalent to option -gxx-name is -gcc-name. NOTE: When compiling a C++ file with icc, g++ is used to get the environment. -H Tells the compiler to display the include file order and continue compilation. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Compilation occurs as usual. Description: This option tells the compiler to display the include file order and continue compilation. -help[category] Displays all available compiler options or a category of compiler options. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No list is displayed unless this com- piler option is specified. Description: This option displays all available compiler options or a category of compiler options. If category is not speci- fied, all available compiler options are displayed. This option can also be specified as --help. -help-pragma Displays all supported pragmas. Architectures: IA-32, Intel® 64 architectures Default: OFF No list is displayed unless this com- piler option is specified. Description: This option displays all supported pragmas and shows their syntaxes. -Idir Specifies an additional directory to search for include files. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The default directory is searched for include files. Description: This option specifies an additional directory to search for include files. To specify multiple directories on the command line, repeat the include option for each direc- tory. -icc -no-icc Determines whether certain Intel compiler macros are defined or undefined. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -icc The __ICC and __INTEL_COMPILER macros are set to represent the current version of the compiler. Description: This option determines whether certain Intel compiler macros are defined or undefined. If you specify -no-icc, the compiler undefines the __ICC and __INTEL_COMPILER macros. These macros are defined by default or by specifying -icc. -idirafterdir Adds a directory to the second include file search path. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Include file search paths include cer- tain default directories. Description: This option adds a directory to the second include file search path (after -I). -imacros file Allows a header to be specified that is included in front of the other headers in the translation unit. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Allows a header to be specified that is included in front of the other headers in the translation unit. -inline-calloc -no-inline-calloc Tells the compiler to inline calls to calloc() as calls to malloc() and memset(). Architectures: IA-32, Intel® 64 architectures Default: -no-inline-calloc The compiler inlines calls to calloc() as calls to calloc(). Description: This option tells the compiler to inline calls to calloc() as calls to malloc() and memset(). This enables additional memset() optimizations. For example, it can enable inlin- ing as a sequence of store operations when the size is a compile time constant. -inline-factor=n -no-inline-factor Specifies the percentage multiplier that should be applied to all inlining options that define upper limits. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-inline-factor The compiler uses default heuristics for inline routine expansion. Description: This option specifies the percentage multiplier that should be applied to all inlining options that define upper limits: · -inline-max-size and /Qinline-max-size · -inline-max-total-size and /Qinline-max-total-size · -inline-max-per-routine and /Qinline-max-per-rou- tine · -inline-max-per-compile and /Qinline-max-per-com- pile This option takes the default value for each of the above options and multiplies it by n divided by 100. For exam- ple, if 200 is specified, all inlining options that define upper limits are multiplied by a factor of 2. This option is useful if you do not want to individually increase each option limit. If you specify -no-inline-factor (Linux and Mac OS X) or /Qinline-factor- (Windows), the following occurs: · Every function is considered to be a small or medium function; there are no large functions. · There is no limit to the size a routine may grow when inline expansion is performed. · There is no limit to the number of times some rou- tine may be inlined into a particular routine. · There is no limit to the number of times inlining can be applied to a compilation unit. To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). CAUTION: When you use this option to increase default lim- its, the compiler may do so much additional inlining that it runs out of memory and terminates with an "out of mem- ory" message. -inline-forceinline Specifies that an inline routine should be inlined when- ever the compiler can do so. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler uses default heuristics for inline routine expansion. Description: This option specifies that a inline routine should be inlined whenever the compiler can do so. This causes the routines marked with an inline keyword or attribute to be treated as if they were "forceinline". NOTE: Because C++ member functions whose definitions are included in the class declaration are considered inline functions by default, using this option will also make these member functions "forceinline" functions. The "forceinline" condition can also be specified by using the keyword __forceinline. To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS) or /Qopt-report (Windows). CAUTION: When you use this option to change the meaning of inline to "forceinline", the compiler may do so much addi- tional inlining that it runs out of memory and terminates with an "out of memory" message. -inline-level=n Specifies the level of inline function expansion. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -inline-level=2 This is the default if option O2 is specified or is in effect by default. On Windows systems, this is also the default if option O3 is specified. -inline-level=0 This is the default if option -O0 (Linux and Mac OS) is specified. Description: This option specifies the level of inline function expan- sion. Inlining procedures can greatly improve the run-time performance of certain programs. Option Description -inline-level=0 or Ob0 Disables inlining of user-defined functions. Note that statement functions are always inlined. -inline-level=1 or Ob1 Enables inlining when an inline keyword or an inline attribute is specified. Also enables inlining according to the C++ language. -inline-level=2 or Ob2 Enables inlining of any func- tion at the compiler's discre- tion. -inline-max-per-compile=n -no-inline-max-per-compile Specifies the maximum number of times inlining may be applied to an entire compilation unit. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-inline-max-per-compile The compiler uses default heuristics for inline routine expansion. Description: This option the maximum number of times inlining may be applied to an entire compilation unit. It limits the num- ber of times that inlining can be applied. For compilations using Interprocedural Optimizations (IPO), the entire compilation is a compilation unit. For other compilations, a compilation unit is a file. If you specify -no-inline-max-per-compile (Linux and Mac OS X) or /Qinline-max-per-compile- (Windows), there is no limit to the number of times inlining may be applied to a compilation unit. To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). CAUTION: When you use this option to increase the default limit, the compiler may do so much additional inlining that it runs out of memory and terminates with an "out of memory" message. -inline-max-per-routine=n -no-inline-max-per-routine Specifies the maximum number of times the inliner may inline into a particular routine. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-inline-max-per-routine The compiler uses default heuristics for inline routine expansion. Description: This option specifies the maximum number of times the inliner may inline into a particular routine. It limits the number of times that inlining can be applied to any routine. If you specify -no-inline-max-per-routine (Linux and Mac OS X) or /Qinline-max-per-routine- (Windows), there is no limit to the number of times some routine may be inlined into a particular routine. To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). CAUTION: When you use this option to increase the default limit, the compiler may do so much additional inlining that it runs out of memory and terminates with an "out of memory" message. -inline-max-size=n -no-inline-max-size Specifies the lower limit for the size of what the inliner considers to be a large routine. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-inline-max-size The compiler uses default heuristics for inline routine expansion. Description: This option specifies the lower limit for the size of what the inliner considers to be a large routine (a function). The inliner classifies routines as small, medium, or large. This option specifies the boundary between what the inliner considers to be medium and large-size routines. The inliner prefers to inline small routines. It has a preference against inlining large routines. So, any large routine is highly unlikely to be inlined. If you specify -no-inline-max-size (Linux and Mac OS X) or /Qinline-max-size- (Windows), there are no large routines. Every routine is either a small or medium routine. To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). CAUTION: When you use this option to increase the default limit, the compiler may do so much additional inlining that it runs out of memory and terminates with an "out of memory" message. -inline-max-total-size=n -no-inline-max-total-size Specifies how much larger a routine can normally grow when inline expansion is performed. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-inline-max-total-size The compiler uses default heuristics for inline routine expansion. Description: This option specifies how much larger a routine can nor- mally grow when inline expansion is performed. It limits the potential size of the routine. For example, if 2000 is specified for n, the size of any routine will normally not increase by more than 2000. If you specify -no-inline-max-total-size (Linux and Mac OS X) or /Qinline-max-total-size- (Windows), there is no limit to the size a routine may grow when inline expansion is performed. To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). CAUTION: When you use this option to increase the default limit, the compiler may do so much additional inlining that it runs out of memory and terminates with an "out of memory" message. -inline-min-size=n -no-inline-min-size Specifies the upper limit for the size of what the inliner considers to be a small routine. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-inline-min-size The compiler uses default heuristics for inline routine expansion. Description: This option specifies the upper limit for the size of what the inliner considers to be a small routine (a function). The inliner classifies routines as small, medium, or large. This option specifies the boundary between what the inliner considers to be small and medium-size routines. The inliner has a preference to inline small routines. So, when a routine is smaller than or equal to the specified size, it is very likely to be inlined. If you specify -no-inline-min-size (Linux and Mac OS X) or /Qinline-min-size- (Windows), there is no limit to the size of small routines. Every routine is a small routine; there are no medium or large routines. To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). To see compiler values for important inlining limits, specify compiler option -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). CAUTION: When you use this option to increase the default limit, the compiler may do so much additional inlining that it runs out of memory and terminates with an "out of memory" message. -ip -no-ip Determines whether additional interprocedural optimiza- tions for single-file compilation are enabled. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Some limited interprocedural optimiza- tions occur, including inline function expansion for calls to functions defined within the current source file. These optimizations are a subset of full intra-file interprocedural optimiza- tions. Note that this setting is not the same as -no-ip (Linux and Mac OS X). Description: This option determines whether additional interprocedural optimizations for single-file compilation are enabled. Options -ip (Linux and Mac OS X) and /Qip (Windows) enable additional interprocedural optimizations for single-file compilation. Options -no-ip (Linux and Mac OS X) and /Qip- (Windows) may not disable inlining. To ensure that inlining of user-defined functions is disabled, specify -inline-level=0or -fno-inline (Linux and Mac OS X), or specify /Ob0 (Windows). To ensure that inliningof compiler intrinsic functions is disabled, specify -fno-builtin (Linux and MacOS X) or /Oi- (Windows). -IPF-flt-eval-method0 (L*X only) Tells the compiler to evaluate the expressions involving floating-point operands in the precision indicated by the variable types declared in the program. This is a depre- cated option. Architectures: IA-64 architecture Default: OFF Expressions involving floating-point operands are evaluated by default rules. Description: This option tells the compiler to evaluate the expressions involving floating-point operands in the precision indi- cated by the variable types declared in the program. By default, intermediate floating-point expressions are maintained in higher precision. The recommended method to control the semantics of float- ing-point calculations is to use option -fp-model (Linux) or /fp (Windows). Instead of using -IPF-flt-eval-method0 (Linux) or /QIPF-flt-eval-method0 (Windows), you can use -fp-model source (Linux) or /fp:source (Windows). -ip-no-inlining Disables full and partial inlining enabled by interproce- dural optimization options. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Inlining enabled by interprocedural optimization options is performed. Description: This option disables full and partial inlining enabled by the following interprocedural optimization options: · On Linux and Mac OS X systems: -ip or -ipo · On Windows systems: /Qip, /Qipo, or /Ob2 It has no effect on other interprocedural optimizations. On Windows systems, this option also has no effect on user-directed inlining specified by option /Ob1. -ip-no-pinlining Disables partial inlining enabled by interprocedural opti- mization options. Architectures: IA-32, Intel® 64 architectures Default: OFF Inlining enabled by interprocedural optimization options is performed. Description: This option disables partial inlining enabled by the fol- lowing interprocedural optimization options: · On Linux and Mac OS X systems: -ip or -ipo · On Windows systems: /Qip or /Qipo It has no effect on other interprocedural optimizations. -ipo[n] Enables interprocedural optimization between files. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Multifile interprocedural optimization is not enabled. Description: This option enables interprocedural optimization between files. This is also called multifile interprocedural optimization (multifile IPO) or Whole Program Optimization (WPO). When you specify this option, the compiler performs inline function expansion for calls to functions defined in sepa- rate files. You cannot specify the names for the files that are cre- ated. If n is 0, the compiler decides whether to create one or more object files based on an estimate of the size of the application. It generates one object file for small appli- cations, and two or more object files for large applica- tions. If n is greater than 0, the compiler generates n object files, unless n exceeds the number of source files (m), in which case the compiler generates only m object files. If you do not specify n, the default is 0. -ipo-c Tells the compiler to optimize across multiple files and generate a single object file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not generate a multi- file object file. Description: This option tells the compiler to optimize across multiple files and generate a single object file (named ipo_out.o on Linux and Mac OS X systems; ipo_out.obj on Windows sys- tems). It performs the same optimizations as -ipo (Linux and Mac OS X) or /Qipo (Windows), but compilation stops before the final link stage, leaving an optimized object file that can be used in further link steps. -ipo-jobsn Specifies the number of commands (jobs) to be executed simultaneously during the link phase of Interprocedural Optimization (IPO). Architectures: IA-32, Intel® 64, IA-64 architectures Default: -ipo-jobs1 One command (job) is executed in an interprocedural optimization parallel build. Description: This option specifies the number of commands (jobs) to be executed simultaneously during the link phase of Interpro- cedural Optimization (IPO). It should only be used if the link-time compilation is generating more than one object. In this case, each object is generated by a separate com- pilation, which can be done in parallel. This option can be affected by the following compiler options: · -ipo (Linux and Mac OS X) or /Qipo (Windows) when applications are large enough that the compiler decides to generate multiple object files. · -ipon (Linux and Mac OS X) or /Qipon (Windows) when n is greater than 1. · -ipo-separate (Linux) or /Qipo-separate (Windows) CAUTION: Be careful when using this option. On a multi-processor system with lots of memory, it can speed application build time. However, if n is greater than the number of processors, or if there is not enough memory to avoid thrashing, this option can increase application build time. -ipo-S Tells the compiler to optimize across multiple files and generate a single assembly file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not generate a multi- file assembly file. Description: This option tells the compiler to optimize across multiple files and generate a single assembly file (named ipo_out.s on Linux and Mac OS X systems; ipo_out.asm on Windows sys- tems). It performs the same optimizations as -ipo (Linux and Mac OS X) or /Qipo (Windows), but compilation stops before the final link stage, leaving an optimized assembly file that can be used in further link steps. -ipo-separate (L*X only) Tells the compiler to generate one object file for every source file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler decides whether to create one or more object files. Description: This option tells the compiler to generate one object file for every source file. It overrides any -ipo (Linux) or /Qipo (Windows) specification. -ipp[=lib] Tells the compiler to link to the some or all of the Intel® Integrated Performance Primitives (Intel® IPP) libraries. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not link to the Intel® IPP libraries. Description: The option tells the compiler to link to the some or all of the Intel® Integrated Performance Primitives (Intel® IPP) libraries and include the Intel® IPP headers. -iprefix Option for indicating the prefix for referencing directo- ries containing header files. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Options for indicating the prefix for referencing directo- ries containing header files. Use -iquote dir Add directory to the front of the include file search path for files included with quotes but not brackets. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not add a directory to the front of the include file search path. Description: Add directory to the front of the include file search path for files included with quotes but not brackets. -isystemdir Specifies a directory to add to the start of the system include path. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The default system include path is used. Description: This option specifies a directory to add to the system include path. The compiler searches the specified direc- tory for include files after it searches all directories specified by the -I compiler option but before it searches the standard system directories. This option is provided for compatibility with gcc. -ivdep-parallel (L*X only) Tells the compiler that there is no loop-carried memory dependency in the loop following an IVDEP pragma. Architectures: IA-64 architecture Default: OFF There may be loop-carried memory depen- dency in a loop that follows an IVDEP pragma. Description: This option tells the compiler that there is no loop-car- ried memory dependency in the loop following an IVDEP There may be loop-carried memory dependency in a loop that follows an IVDEP pragma. -iwithprefix Appends a directory to the prefix passed in by -iprefix and puts it on the include search path at the end of the include directories. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: This option appends a directory to the prefix passed in by -iprefix and puts it on the include search path at the end of the include directories. -iwithprefixbefore Similar to -iwithprefix except the include directory is placed in the same place as -I command line include direc- tories. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Similar to -iwithprefix except the include directory is placed in the same place as -I command line include direc- tories. -kernel (L*X only) Generates code for inclusion in the kernel. Architectures: IA-64 architecture Default: OFF The restrictions on kernel code are not enforced. Description: This option generates code for inclusion in the kernel. It prevents generation of speculation because support may not be available when the code runs. This option also suppresses software pipelining. -lstring Tells the linker to search for a specified library when linking. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The linker searches for standard libraries in standard directories. Description: This option tells the linker to search for a specified library when linking. When resolving references, the linker normally searches for libraries in several standard directories, in directo- ries specified by the L option, then in the library speci- fied by the l option. The linker searches and processes libraries and object files in the order they are specified. So, you should specify this option following the last object file it applies to. -Ldir Tells the linker to search for libraries in a specified directory before searching the standard directories. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The linker searches the standard direc- tories for libraries. Description: This option tells the linker to search for libraries in a specified directory before searching for them in the stan- dard directories. -m[processor] Tells the compiler to generate optimized code specialized for the processor that executes your program. Architectures: IA-32, Intel® 64 architectures Default: Linux systems: -msse2Mac OS X systems using IA-32 archi- tecture: -msse3Mac OS X systems using Intel® 64 architec- ture: -mssse3 For more information on the default val- ues, see Arguments above. Description: Arguments ia32, sse, sse2, sse3, ssse3, and sse4.1 are allowed. For more information, see the compiler documen- tation. This option tells the compiler to generate optimized code specialized for the processor that executes your program. Code generated with the values ia32, sse, sse2, or sse3 should execute on any compatible non-Intel processor with support for the corresponding instruction set. Options -x and -m are mutually exclusive. If both are specified, the compiler uses the last one specified and generates a warning. -M Tells the compiler to generate makefile dependency lines for each source file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not generate makefile dependency lines for each source file. Description: This option tells the compiler to generate makefile depen- dency lines for each source file, based on the #include lines found in the source file. -m32 -m64 Tells the compiler to generate code for a specific archi- tecture. Architectures: IA-32, Intel® 64 architectures Default: OFF The compiler's behavior depends on the host system. Description: These options tell the compiler to generate code for a specific architecture. Option Description -m32 Tells the compiler to generate code for IA-32 architecture. -m64 Tells the compiler to generate code for Intel® 64 architec- ture. The -m32 and -m64 options are the same as Mac OS* X options -arch i386 and -arch x86_64, respectively. Note that these options are provided for compatibility with gcc. They are not related to the Intel® C++ compiler option arch. -malign-double Aligns double, long double, and long long types for better performance for systems based on IA-32 architecture. Architectures: IA-32, Intel® 64 architectures Default: OFF Description: Aligns double, long double, and long long types for better performance for systems based on IA-32 architecture. -map-opts (L*X only) Maps one or more compiler options to their equivalent on a different operating system. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No platform mappings are performed. Description: This option maps one or more compiler options to their equivalent on a different operating system. The result is output to stdout. On Windows systems, the options you provide are presumed to be Windows options, so the options that are output to stdout will be Linux equivalents.On Linux systems, the options you provide are presumed to be Linux options, so the options that are output to stdout will be Windows equivalents. The tool can be invoked from the compiler command line or it can be used directly. No compilation is performed when the option mapping tool is used. This option is useful if you have both compilers and want to convert scripts or makefiles. NOTE: Compiler options are mapped to their equivalent on the architecture you are using.For example, if you are using a processor with IA-32 architecture, you will only see equivalent options that are available on processors with IA-32 architecture. -march=processor (L*X only) Tells the compiler to generate code for a specified pro- cessor. Architectures: IA-32, Intel® 64 architectures Default: OFF or-march=pentium4 On IA-32 architecture, the compiler does not generate processor-specific code unless it is told to do so. On systems using Intel® 64 architecture, the com- piler generates code for Intel Pentium 4 processors. Description: This option tells the compiler to generate code for a specified processor. Specifying -march=pentium4 sets -mtune=pentium4. For compatibility, a number of historical processor values are also supported, but the generated code will not differ from the default. -mcmodel=mem_model (L*X only) Tells the compiler to use a specific memory model to gen- erate code and store data. Architectures: Intel® 64 architecture Default: -mcmodel=small On systems using Intel® 64 architecture, the compiler restricts code and data to the first 2GB of address space. Instruc- tion Pointer (IP)-relative addressing can be used to access code and data. Description: This option tells the compiler to use a specific memory model to generate code and store data. It can affect code size and performance. If your program has global and static data with a total size smaller than 2GB, -mcmodel=small is sufficient. Global and static data larger than 2GB requires-mcmodel=medium or -mcmodel=large. Allocation of memory larger than 2GB can be done with any setting of -mcmodel. IP-relative addressing requires only 32 bits, whereas absolute addressing requires 64-bits. IP-relative address- ing is somewhat faster. So, the small memory model has the least impact on performance. NOTE: When you specify -mcmodel=medium or -mcmodel=large, you must also specify compiler option -shared-intel to ensure that the correct dynamic versions of the Intel run-time libraries are used. -MD Preprocess and compile, generating output file containing dependency information ending with extension .d. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not generate depen- dency information. Description: Preprocess and compile, generating output file containing dependency information ending with extension .d. Tells the linker to search for unresolved references in a multithreaded, dynamic-link run-time library. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The linker searches for unresolved ref- erences in a single-threaded, static run-time library. Description: This option tells the linker to search for unresolved ref- erences in a multithreaded, dynamic-link (DLL) run-time library. You can also specify /MDd, where d indicates a debug version. -mdynamic-no-pic (M*X only) Generates code that is not position-independent but has position-independent external references. Architectures: IA-32 architecture Default: OFF All references are generated as position independent. Description: This option generates code that is not position-indepen- dent but has position-independent external references. The generated code is suitable for building executables, but it is not suitable for building shared libraries. This option may reduce code size and produce more effi- cient code. It overrides the -fpic compiler option. -MFfile Tells the compiler to generate makefile dependency infor- mation in a file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not generate makefile dependency information in files. Description: This option tells the compiler to generate makefile depen- dency information in a file. To use this option, you must also specify /QM or /QMM. -mfixed-range=f12-f15,f32-f127 (L*X only) Reserves certain registers (f12-f15, f32-f127) for use by the Linux* kernel. Architectures: IA-64 architecture Default: OFF Description: Reserves certain registers (f12-f15,f32-f127) for use by the Linux* kernel. -MG Tells the compiler to generate makefile dependency lines for each source file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not generate makefile dependency information in files. Description: This option tells the compiler to generate makefile depen- dency lines for each source file. It is similar to /QM, but it treats missing header files as generated files. -minstruction=[no]movbe Determines whether MOVBE instructions are generated for Intel processors. Architectures: IA-32, Intel® 64 architectures Default: –minstruction=nomovbe The compiler does not generate MOVBE instructions for Intel® Atom ™ proces- sors. Description: This option determines whether MOVBE instructions are gen- erated for Intel processors. To use this option, you must also specify -xSSE3_ATOM (Linux and Mac OS X) or /QxSSE3_ATOM (Windows). If -minstruction=movbe or /Qinstruction:movbe is speci- fied, the following occurs: · MOVBE instructions are generated that are specific to the Intel® Atom™ processor. · The options are ON by default when -xSSE3_ATOM or /QxSSE3_ATOM is specified. · Generated executables can only be run on Intel® Atom™ processors or processors that support Intel® Streaming SIMD Extensions 3 (Intel® SSE3) and MOVBE. If -minstruction=nomovbe or /Qinstruction:nomovbe is spec- ified, the following occurs: · The compiler optimizes code for the Intel® Atom™ processor, but it does not generate MOVBE instruc- tions. · Generated executables can be run on non-Intel® Atom ™ processors that support Intel® SSE3. -mkl[=lib] Tells the compiler to link to certain parts of the Intel® Math Kernel Library (Intel® MKL). Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not link to the Intel® MKL. Description: This option tells the compiler to link to certain parts of the Intel® Math Kernel Library (Intel® MKL). -MM Tells the compiler to generate makefile dependency lines for each source file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not generate makefile dependency information in files. Description: This option tells the compiler to generate makefile depen- dency lines for each source file. It is similar to /QM, but it does not include system header files. -MMD Tells the compiler to generate an output file containing dependency information. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not generate an output file containing dependency information. Description: This option tells the compiler to preprocess and compile a file, then generate an output file (with extension .d) containing dependency information. It is similar to /QMD, but it does not include system header files. -MP Tells the compiler to add a phony target for each depen- dency. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not generate depen- dency information unless it is told to do so. Description: This option tells the compiler to add a phony target for each dependency. Note that this option is not related to Windows* option /MP. -mp1 Improves floating-point precision and consistency. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler provides good accuracy and run-time performance at the expense of less consistent floating-point results. Description: This option improves floating-point consistency. It ensures the out-of-range check of operands of transcenden- tal functions and improves the accuracy of floating-point compares. This option prevents the compiler from performing opti- mizations that change NaN comparison semantics and causes all values to be truncated to declared precision before they are used in comparisons. It also causes the compiler to use library routines that give better precision results compared to the X87 transcendental instructions. This option disables fewer optimizations and has less impact on performance than option mp or Op. -MQtarget Changes the default target rule for dependency generation. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The default target rule applies to dependency generation. Description: This option changes the default target rule for dependency generation. It is similar to -MT, but quotes special Make characters. -mregparm=value Control the number registers used to pass integer argu- ments. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not use registers to pass arguments. Description: Control the number registers used to pass integer argu- ments. -mrelax -mno-relax Tells the compiler to pass linker option -relax to the linker. Architectures: IA-64 architecture Default: -mno-relax The compiler does not pass -relax to the linker. Description: This option tells the compiler to pass linker option -relax to the linker. -mserialize-volatile (L*X only) -mno-serialize-volatile (L*X only) Determines whether strict memory access ordering is imposed for volatile data object references. Architectures: IA-64 architecture Default: -mno-serialize-volatile The compiler uses default memory access ordering. Description: This option determines whether strict memory access order- ing is imposed for volatile data object references. If you specify -mno-serialize-volatile, the compiler may suppress both run-time and compile-time memory access ordering for volatile data object references. Specifi- cally, the .rel/.acq completers will not be issued on ref- erencing loads and stores. -MTtarget Changes the default target rule for dependency generation. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The default target rule applies to dependency generation. Description: This option changes the default target rule for dependency generation. -mtune=processor Performs optimizations for specific processors. Architectures: IA-32, Intel® 64, IA-64 architectures Default: generic On systems using IA-32 and Intel® 64 architectures, code is generated for the compiler's default behavior. itanium2-p9000 On systems using IA-64 architecture, the compiler optimizes for the Dual-Core Intel® Itanium® 2 processor 9000 series. Description: This option performs optimizations for specific proces- sors. The resulting executable is backwards compatible and gen- erated code is optimized for specific processors. For example, code generated with -mtune=itanium2-p9000 will run correctly on single-core Itanium® 2 processors, but it might not run as fast as if it had been generated using -mtune=itanium2. The following table shows on which architecture you can use each value. -multibyte-chars -no-multibyte-chars Determines whether multi-byte characters are supported. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -multibyte-chars Multi-byte characters are supported. Description: This option determines whether multi-byte characters are supported. -multiple-processes[=n] Creates multiple processes that can be used to compile large numbers of source files at the same time. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF A single process is used to compile source files. Description: This option creates multiple processes that can be used to compile large numbers of source files at the same time. It can improve performance by reducing the time it takes to compile source files on the command line. This option causes the compiler to create one or more copies of itself, each in a separate process. These copies simultaneously compile the source files. If n is not specified for this option, the default value is as follows: · On Windows OS, the value is based on the setting of the NUMBER_OF_PROCESSORS environment variable. · On Linux OS and Mac OS X, the value is 2. This option applies to compilations, but not to linking or link-time code generation. -no-bss-init Tells the compiler to place in the DATA section any vari- ables explicitly initialized with zeros. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Variables explicitly initialized with zeros are placed in the BSS section. Description: This option tells the compiler to place in the DATA sec- tion any variables explicitly initialized with zeros. -nodefaultlibs Prevents the compiler from using standard libraries when linking. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The standard libraries are linked. Description: This option prevents the compiler from using standard libraries when linking. It is provided for GNU compatibil- ity. -nolib-inline Disables inline expansion of standard library or intrinsic functions. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler inlines many standard library and intrinsic functions. Description: This option disables inline expansion of standard library or intrinsic functions. It prevents the unexpected results that can arise from inline expansion of these functions. -nostartfiles Prevents the compiler from using standard startup files when linking. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler uses standard startup files when linking. Description: This option prevents the compiler from using standard startup files when linking. -nostdinc++ Do not search for header files in the standard directories for C++, but search the other standard directories. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Do not search for header files in the standard directories for C++, but search the other standard directories. -nostdlib Prevents the compiler from using standard libraries and startup files when linking. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler uses standard startup files and standard libraries when linking. Description: This option prevents the compiler from using standard libraries and startup files when linking. It is provided for GNU compatibility. -ofile Specifies the name for an output file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler uses the default file name for an output file. Description: This option specifies the name for an output file as fol- lows: · If -c is specified, it specifies the name of the generated object file. · If -S is specified, it specifies the name of the generated assembly listing file. · If -P is specified, it specifies the name of the generated preprocessor file. Otherwise, it specifies the name of the executable file. NOTE: If you misspell a compiler option beginning with "o", such as -openmp, -opt-report, etc., the compiler interprets the misspelled option as an -ofile option. For example, say you misspell "-opt-report" as " -opt-reprt"; in this case, the compiler interprets the misspelled option as "-o pt-reprt", where pt-reprt is the output file name. -O[n] Specifies the code optimization for applications. Architectures: IA-32, Intel® 64, IA-64 architectures Default: O2 Optimizes for code speed. This default may change depending on which other com- piler options are specified. For details, see below. Description: This option specifies the code optimization for applica- tions. Option Description O (Linux and Mac OS X) This is the same as specifying O2. O0 (Linux and Mac OS X) Disables all optimizations. On systems using IA-32 architec- ture and Intel® 64 architec- ture, this option sets option -fno-omit-frame-pointer and option -fmath-errno. O1 Enables optimizations for speed and disables some optimizations that increase code size and affect speed.To limit code size, this option: · Enables global optimiza- tion; this includes data-flow analysis, code motion, strength reduc- tion and test replace- ment, split-lifetime analysis, and instruc- tion scheduling. · Disables intrinsic recognition and intrin- sics inlining. · On systems using IA-64 architecture, it disables software pipelining, loop unrolling, and global code scheduling. On systems using IA-64 archi- tecture, this option also enables optimizations for server applications (straight-line and branch-like code with a flat profile). The O1 option sets the following options: · On Linux and Mac OS X systems using IA-32 architecture and Intel® 64 architecture:-fun- roll-loops0, -fno-builtin, -mno-ieee-fp, -fomit-frame-pointer, -ffunction-sections, -ftz · On Linux systems using IA-64 architecture:-fun- roll-loops0, -fbuiltin, -mno-ieee-fp, -fomit-frame-pointer, -ffunction-sections, -ftz · On Windows systems using IA-32 architecture:/Qun- roll0, /Oi-, /Op-, /Oy, /Gy, /Os, /GF (/Qvc7 and above), /Gf (/Qvc6 and below), /Ob2, /Og, /Qftz · On Windows systems using Intel® 64 architecture and IA-64 architec- ture:/Qunroll0, /Oi-, /Op-, /Gy, /Os, /GF (/Qvc7 and above), /Gf (/Qvc6 and below), /Ob2, /Og, /Qftz The O1 option may improve per- formance for applications with very large code size, many branches, and execution time not dominated by code within loops. O2 Enables optimizations for speed. This is the generally recommended optimization level. Vectorization is enabled at O2 and higher levels.On systems using IA-64 architecture, this option enables optimizations for speed, including global code scheduling, software pipelining, predication, and speculation. This option also enables: · Inlining of intrinsics · Intra-file interprocedu- ral optimization, which includes: · inlining · constant propagation · forward substitution · routine attribute propa- gation · variable address-taken analysis · dead static function elimination · removal of unreferenced variables · The following capabili- ties for performance gain: · constant propagation · copy propagation · dead-code elimination · global register alloca- tion · global instruction scheduling and control speculation · loop unrolling · optimized code selection · partial redundancy elim- ination · strength reduc- tion/induction variable simplification · variable renaming · exception handling opti- mizations · tail recursions · peephole optimizations · structure assignment lowering and optimiza- tions · dead store elimination The O2 option sets the follow- ing options: · On Windows systems using IA-32 architecture:/Og, /Oi-, /Os, /Oy, /Ob2, /GF (/Qvc7 and above), /Gf (/Qvc6 and below), /Gs, /Gy, and /Qftz · On Windows systems using Intel® 64 architec- ture:/Og, /Oi-, /Os, /Ob2, /GF (/Qvc7 and above), /Gf (/Qvc6 and below), /Gs, /Gy, and /Qftz This option sets other options that optimize for code speed. The options set are determined by the compiler depending on which architecture and operat- ing system you are using. O3 Enables O2 optimizations plus more aggressive optimizations, such as prefetching, scalar replacement, and loop and mem- ory access transformations. Enables optimizations for maxi- mum speed, such as: · Loop unrolling, includ- ing instruction schedul- ing · Code replication to eliminate branches · Padding the size of cer- tain power-of-two arrays to allow more efficient cache use. On Windows systems, the O3 option sets the/GF (/Qvc7 and above), /Gf (/Qvc6 and below), and/Ob2 option. On Linux and Mac OS X systems, the O3 option sets option -fomit-frame-pointer. On systems using IA-32 archi- tecture or Intel® 64 architec- ture, when O3 is used with options -ax or -x (Linux) or with options /Qax or /Qx (Win- dows), the compiler performs more aggressive data dependency analysis than for O2, which may result in longer compilation times.On systems using IA-64 architecture, the O3 option enables optimizations for tech- nical computing applications (loop-intensive code): loop optimizations and data prefetch. The O3 optimizations may not cause higher performance unless loop and memory access trans- formations take place. The optimizations may slow down code in some cases compared to O2 optimizations.The O3 option is recommended for applications that have loops that heavily use floating-point calculations and process large data sets. The last O option specified on the command line takes precedence over any others. NOTE: The options set by the O option may change from release to release. -openmp Enables the parallelizer to generate multi-threaded code based on the OpenMP* directives. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No OpenMP multi-threaded code is gener- ated by the compiler. Description: This option enables the parallelizer to generate multi-threaded code based on the OpenMP* directives. The code can be executed in parallel on both uniprocessor and multiprocessor systems. This option works with any optimization level. Specifying no optimization (-O0 on Linux or /Od on Windows) helps to debug OpenMP applications. NOTE: On Mac OS X systems, when you enable OpenMP*, you must also set the DYLD_LIBRARY_PATH environment variable within Xcode or an error will be displayed. -openmp-lib type (L*X only) Lets you specify an OpenMP* run-time library to use for linking. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -openmp-lib compat The compiler uses the compatibility OpenMP* run-time library (libiomp). Description: This option lets you specify an OpenMP* run-time library to use for linking. The legacy OpenMP run-time library is not compatible with object files created using OpenMP run-time libraries sup- ported in other compilers. The compatibility OpenMP run-time library is compatible with object files created using the Microsoft* OpenMP run-time library (vcomp) and GNU OpenMP run-time library (libgomp). To use the compatibility OpenMP run-time library, compile and link your application using the -openmp-lib compat (Linux) or /Qopenmp-lib:compat (Windows) option. To use this option, you must also specify one of the following compiler options: · Linux OS: -openmp, -openmp-profile, or -openmp-stubs · Windows OS: /Qopenmp, /Qopenmp-profile, or /Qopenmp-stubs On Windows* systems, the compatibility OpenMP* run-time library lets you combine OpenMP* object files compiled with the Microsoft* C/C++ compiler with OpenMP* object files compiled with the Intel C/C++ or Fortran compilers. The linking phase results in a single, coherent copy of the run-time library. On Linux* systems, the compatibility Intel OpenMP* run-time library lets you combine OpenMP* object files compiled with the GNU* gcc or gfortran compilers with sim- ilar OpenMP* object files compiled with the Intel C/C++ or Fortran compilers. The linking phase results in a single, coherent copy of the run-time library. NOTE: The compatibility OpenMP run-time library is not compatible with object files created using versions of the Intel compiler earlier than 10.0. -openmp-link library Controls whether the compiler links to static or dynamic OpenMP run-time libraries. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -openmp-link dynamic The compiler links to dynamic OpenMP run-time libraries. However, if option static is specified, the compiler links to static OpenMP run-time libraries. Description: This option controls whether the compiler links to static or dynamic OpenMP run-time libraries. To link to the static OpenMP run-time library (RTL) and create a purely static executable, you must specify -openmp-link static (Linux and Mac OS X) or /Qopenmp-link:static (Windows). However, we strongly rec- ommend you use the default setting, -openmp-link dynamic (Linux and Mac OS X) or /Qopenmp-link:dynamic (Windows). NOTE: Compiler options -static-intel and -shared-intel (Linux and Mac OS X) have no effect on which OpenMP run-time library is linked. -openmp-profile (L*X only) Enables analysis of OpenMP* applications if Intel® Thread Profiler is installed. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF OpenMP applications are not analyzed. Description: This option enables analysis of OpenMP* applications. To use this option, you must have previously installed Intel® Thread Profiler, which is one of the Intel® Threading Analysis Tools. This option can adversely affect performance because of the additional profiling and error checking invoked to enable compatibility with the threading tools. Do not use this option unless you plan to use the Intel® Thread Pro- filer. For more information about Intel® Thread Profiler, open the page associated with threading tools at Intel® Soft- ware Development Products. -openmp-report[n] Controls the OpenMP* parallelizer's level of diagnostic messages. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -openmp-report1 If you do not specify n, the compiler displays diagnostic messages indicating loops, regions, and sections success- fully parallelized. If you do not spec- ify the option on the command line, the default is to display no messages. Description: This option controls the OpenMP* parallelizer's level of diagnostic messages. To use this option, you must also specify -openmp (Linux and Mac OS X) or /Qopenmp (Win- dows). If this option is specified on the command line, the report is sent to stdout. -openmp-stubs Enables compilation of OpenMP programs in sequential mode. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The library of OpenMP function stubs is not linked. Description: This option enables compilation of OpenMP programs in sequential mode. The OpenMP directives are ignored and a stub OpenMP library is linked. -openmp-task model Lets you choose an OpenMP* tasking model. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -openmp-task omp The compiler accepts OpenMP 3.0 tasking pragmas. Description: The option lets you choose an OpenMP tasking model. To use this option, you must also specify option -openmp (Linux and Mac OS X) or /Qopenmp (Windows). -openmp-threadprivatetype (L*X only) Lets you specify an OpenMP* threadprivate implementation. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -openmp-threadprivate legacy The compiler uses the legacy OpenMP* threadprivate implementation used in the previous releases of the Intel® com- piler. Description: This option lets you specify an OpenMP* threadprivate implementation. The legacy OpenMP run-time library is not compatible with object files created using OpenMP run-time libraries sup- ported in other compilers. To use this option, you must also specify one of the fol- lowing compiler options: · Linux OS: -openmp, -openmp-profile, or -openmp-stubs · Windows OS: /Qopenmp, /Qopenmp-profile, or /Qopenmp-stubs The value specified for this option is independent of the value used for option -openmp-lib (Linux) or /Qopenmp-lib (Windows). -opt-block-factor=n Lets you specify a loop blocking factor. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler uses default heuristics for loop blocking. Description: This option lets you specify a loop blocking factor. -opt-calloc (L*X only) -no-opt-calloc (L*X only) Tells the compiler to substitute a call to _intel_fast_calloc() for a call to calloc(). Architectures: IA-32, Intel® 64 architectures Default: -no-opt-calloc The compiler does not substitute a call to _intel_fast_calloc() for a call to calloc(). Description: This option tells the compiler to substitute a call to_intel_fast_calloc() for a call to calloc(). This option may increase the performance of long-running programs that use calloc() frequently. It is recommended for these programs over combinations of options -inline-calloc and-opt-malloc-options=3 because this option causes less memory fragmentation. -opt-class-analysis -no-opt-class-analysis Determines whether C++ class hierarchy information is used to analyze and resolve C++ virtual function calls at com- pile time. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-opt-class-analysis C++ class hierarchy information is not used to analyze and resolve C++ virtual function calls at compile time. Description: This option determines whether C++ class hierarchy infor- mation is used to analyze and resolve C++ virtual function calls at compile time. The option is turned on by default with the -ipo compiler option, enabling improved C++ opti- mization. If a C++ application contains non-standard C++ constructs, such as pointer down-casting, it may result in different behaviors. -opt-jump-tables=keyword -no-opt-jump-tables Enables or disables generation of jump tables for switch statements. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -opt-jump-tables=default The compiler uses default heuristics to determine when to generate jump tables for switch statements. Description: This option enables or disables generation of jump tables for switch statements. When the option is enabled, it may improve performance for programs with large switch state- ments. -opt-loadpair (L*X only) -no-opt-loadpair (L*X only) Enables or disables loadpair optimization. Architectures: IA-64 architecture Default: -no-opt-loadpair Loadpair optimization is disabled unless option O3 is specified. Description: This option enables or disables loadpair optimization. When -O3 is specified on IA-64 architecture, loadpair optimization is enabled by default. To disable loadpair generation, specify -no-opt-loadpair (Linux) or /Qopt-loadpair- (Windows). -opt-malloc-options=n Lets you specify an alternate algorithm for malloc(). Architectures: IA-32, Intel® 64, IA-64 architectures Default: -opt-malloc-options=0 The compiler uses the default algorithm when malloc() is called. No call is made to mallopt(). Description: This option lets you specify an alternate algorithm for malloc(). If you specify a non-zero value for n, it causes alternate configuration parameters to be set for how malloc() allo- cates and frees memory. It tells the compiler to insert calls to mallopt() to adjust these parameters to malloc() for dynamic memory allocation. This may improve speed. -opt-mem-bandwidthn (L*X only) Enables performance tuning and heuristics that control memory bandwidth use among processors. Architectures: IA-64 architecture Default: -opt-mem-bandwidth0 For serial (non-parallel) compilation, a set of performance tuning and heuristics in compiler optimizations is enabled that is optimal for serial code. -opt-mem-bandwidth1 If you specify compiler option -parallel (Linux), or -openmp (Linux), a set of performance tuning and heuristics in compiler optimizations for multithreaded code generated by the compiler is enabled. Description: This option enables performance tuning and heuristics that control memory bandwidth use among processors. It allows the compiler to be less aggressive with optimizations that might consume more bandwidth, so that the bandwidth can be well-shared among multiple processors for a parallel pro- gram. For values of n greater than 0, the option tells the com- piler to enable a set of performance tuning and heuristics in compiler optimizations such as prefetching, privatiza- tion, aggressive code motion, and so forth, for reducing memory bandwidth pressure and balancing memory bandwidth traffic among threads. This option can improve performance for threaded or paral- lel applications on multiprocessors or multicore proces- sors, especially when the applications are bounded by mem- ory bandwidth. -opt-mod-versioning (L*X only) -no-opt-mod-versioning (L*X only) Enables or disables versioning of modulo operations for certain types of operands. Architectures: IA-64 architecture Default: -no-opt-mod-versioning Versioning of modulo operations is dis- abled. Description: This option enables or disables versioning of modulo oper- ations for certain types of operands. It is used for optimization tuning. Versioning of modulo operations may improve performance for x mod y when modulus y is a power of 2. -opt-multi-version-aggressive -no-opt-multi-version-aggressive Tells the compiler to use aggressive multi-versioning to check for pointer aliasing and scalar replacement. Architectures: IA-32, Intel® 64 architectures Default: -no-opt-multi-version-aggressive The compiler uses default heuristics when checking for pointer aliasing and scalar replacement. Description: This option tells the compiler to use aggressive multi-versioning to check for pointer aliasing and scalar replacement. This option may improve performance. -opt-prefetch[=n] -no-opt-prefetch Enables or disables prefetch insertion optimization. Architectures: IA-32, Intel® 64, IA-64 architectures Default: IA-64 architecture: -opt-prefetch On IA-64 architecture, prefetch inser- tion optimization is enabled. IA-32 architecture and Intel® 64 architec- ture:-no-opt-prefetch On IA-32 architecture and Intel® 64 architecture, prefetch insertion opti- mization is disabled. Description: This option enables or disables prefetch insertion opti- mization. The goal of prefetching is to reduce cache misses by providing hints to the processor about when data should be loaded into the cache. On IA-64 architecture, this option is enabled by default if you specify option O1 or higher. To disable prefetching at these optimization levels, specify -no-opt-prefetch (Linux and Mac OS X) or /Qopt-prefetch- (Windows). On IA-32 architecture and Intel® 64 architecture, this option enables prefetching when higher optimization levels are specified. -opt-prefetch-initial-values (L*X only) -no-opt-prefetch-initial-values (L*X only) Enables or disables prefetches that are issued before a loop is entered. Architectures: IA-64 architecture Default: -opt-prefetch-initial-values Prefetches are issued before a loop is entered. Description: This option enables or disables prefetches that are issued before a loop is entered. These prefetches target the ini- tial iterations of the loop. When -O1 or higher is specified on IA-64 architecture, prefetches are issued before a loop is entered. To disable these prefetches, specify -no-opt-prefetch-initial-values (Linux) or /Qopt-prefetch-initial-values- (Windows). -opt-prefetch-issue-excl-hint (L*X only) -no-opt-prefetch-issue-excl-hint (L*X only) Determines whether the compiler issues prefetches for stores with exclusive hint. Architectures: IA-64 architecture Default: -no-opt-prefetch-issue-excl-hint The compiler does not issue prefetches for stores with exclusive hint. Description: This option determines whether the compiler issues prefetches for stores with exclusive hint. If option -opt-prefetch-issue-excl-hint (Linux) or /Qopt-prefetch-issue-excl-hint (Windows) is specified, the prefetches will be issued if the compiler determines it is beneficial to do so. When prefetches are issued for stores with exclusive-hint, the cache-line is in "exclusive-mode". This saves on cache-coherence traffic when other processors try to access the same cache-line. This feature can improve per- formance tuning. -opt-prefetch-next-iteration (L*X only) -no-opt-prefetch-next-iteration (L*X only) Enables or disables prefetches for a memory access in the next iteration of a loop. Architectures: IA-64 architecture Default: -opt-prefetch-next-iteration Prefetches are issued for a memory access in the next iteration of a loop. Description: This option enables or disables prefetches for a memory access in the next iteration of a loop. It is typically used in a pointer-chasing loop. When -O1 or higher is specified on IA-64 architecture, prefetches are issued for a memory access in the next iteration of a loop. To disable these prefetches, specify -no-opt-prefetch-next-iteration (Linux) or /Qopt-prefetch-next-iteration- (Windows). -opt-ra-region-strategy[=keyword] Selects the method that the register allocator uses to partition each routine into regions. Architectures: IA-32, Intel® 64 architectures Default: -opt-ra-region-strategy=default The compiler determines which method is used for partitioning. This is also the default if keyword is not specified. Description: This option selects the method that the register allocator uses to partition each routine into regions. When setting default is in effect, the compiler attempts to optimize the tradeoff between compile-time performance and generated code performance. This option is only relevant when optimizations are enabled (O1 or higher). -opt-report [n] Tells the compiler to generate an optimization report to stderr. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -opt-report 2 If you do not specify n, the compiler generates a report with medium detail. If you do not specify the option on the command line, the compiler does not gen- erate an optimization report. Description: This option tells the compiler to generate an optimization report to stderr. -opt-report-file=file Specifies the name for an optimization report. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No optimization report is generated. Description: This option specifies the name for an optimization report. If you use this option, you do not have to specify -opt-report (Linux and Mac OS X) or /Qopt-report (Win- dows). -opt-report-help Displays the optimizer phases available for report genera- tion. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No optimization reports are generated. Description: This option displays the optimizer phases available for report generation using -opt-report-phase (Linux and Mac OS X) or /Qopt-report-phase (Windows). No compilation is performed. -opt-report-phase=phase Specifies an optimizer phase to use when optimization reports are generated. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No optimization reports are generated. Description: This option specifies an optimizer phase to use when opti- mization reports are generated. To use this option, you must also specify -opt-report (Linux and Mac OS X) or /Qopt-report (Windows). This option can be used multiple times on the same command line to generate reports for multiple optimizer phases. When one of the logical names for optimizer phases is specified for phase, all reports from that optimizer phase are generated. To find all phase possibilities, use option -opt-report-help (Linux and Mac OS X) or /Qopt-report-help (Windows). -opt-report-routine=string Tells the compiler to generate reports on the routines containing specified text. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No optimization reports are generated. Description: This option tells the compiler to generate reports on the routines containing specified text as part of their name. -opt-streaming-stores keyword Enables generation of streaming stores for optimization. Architectures: IA-32, Intel® 64 architectures Default: -opt-streaming-stores auto The compiler decides whether to use streaming stores or normal stores. Description: This option enables generation of streaming stores for optimization. This method stores data with instructions that use a non-temporal buffer, which minimizes memory hierarchy pollution. For this option to be effective, the compiler must be able to generate SSE2 (or higher) instructions. For more infor- mation, see compiler option x or ax. This option may be useful for applications that can bene- fit from streaming stores. -opt-subscript-in-range -no-opt-subscript-in-range Determines whether the compiler assumes no overflows in the intermediate computation of subscript expressions in loops. Architectures: IA-32, Intel® 64 architectures Default: -no-opt-subscript-in-range The compiler assumes overflows in the intermediate computation of subscript expressions in loops. Description: This option determines whether the compiler assumes no overflows in the intermediate computation of subscript expressions in loops. If you specify -opt-subscript-in-range (Linux and Mac OS X) or /Qopt-subscript-in-range (Windows), the compiler ignores any data type conversions used and it assumes no overflows in the intermediate computation of subscript expressions. This feature can enable more loop transforma- tions. -Os Enables optimizations that do not increase code size and produces smaller code size than O2. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Optimizations are made for code speed. However, if O1 is specified, Os is the default. Description: This option enables optimizations that do not increase code size and produces smaller code size than O2. It dis- ables some optimizations that increase code size for a small speed benefit. This option tells the compiler to favor transformations that reduce code size over transformations that produce maximum performance. -p Compiles and links for function profiling with gprof(1). Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Files are compiled and linked without profiling. Description: This option compiles and links for function profiling with gprof(1). -P Tells the compiler to stop the compilation process and write the results to a file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Normal compilation is performed. Description: This option tells the compiler to stop the compilation process after C or C++ source files have been preprocessed and write the results to files named according to the com- piler's default file-naming conventions. On Linux systems, this option causes the preprocessor to expand your source module and direct the output to a .i file instead of stdout. Unlike the -E option, the output from -P on Linux does not include #line number directives. By default, the preprocessor creates the name of the out- put file using the prefix of the source file name with a .i extension. You can change this by using the -o option. -parallel Tells the auto-parallelizer to generate multithreaded code for loops that can be safely executed in parallel. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Multithreaded code is not generated for loops that can be safely executed in parallel. Description: This option tells the auto-parallelizer to generate multi- threaded code for loops that can be safely executed in parallel. To use this option, you must also specify option O2 or O3. NOTE: On Mac OS X systems, when you enable automatic par- allelization, you must also set the DYLD_LIBRARY_PATH environment variable within Xcode or an error will be dis- played. -par-affinity=[modifier,...]type[,permute][,offset] (L*X only) Specifies thread affinity. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The thread affinity is determined by the run-time environment. Description: This option specifies thread affinity, which binds threads to physical processing units. It has the same effect as environment variable KMP_AFFINITY. This option overrides the environment variable when both are specified. This option only has an effect if the following is true: · Linux* OS: You have specified option -parallel or -openmp (or both). Windows* OS: You have specified option /Qparallel or /Qopenmp (or both). · You are compiling the main program. -par-num-threads=n Specifies the number of threads to use in a parallel region. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The number of threads to use is deter- mined by the run-time environment. Description: This option specifies the number of threads to use in a parallel region. It has the same effect as environment variable OMP_NUM_THREADS. This option overrides the environment variable when both are specified. This option only has an effect if the following is true: · Linux* OS and Mac OS* X: You have specified option -parallel or -openmp (or both). Windows* OS: You have specified option /Qparallel or /Qopenmp (or both). · You are compiling the main program. -par-report[n] Controls the diagnostic information reported by the auto-parallelizer. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -par-report1 If you do not specify n, the compiler displays diagnostic messages for loops successfully auto-parallelized. If you do not specify the option on the command line, the default is to display no mes- sages. Description: This option controls the diagnostic information reported by the auto-parallelizer (parallel optimizer). To use this option, you must also specify -parallel (Linux and Mac OS X) or /Qparallel (Windows). If this option is specified on the command line, the report is sent to stdout. -par-runtime-control -no-par-runtime-control Generates code to perform run-time checks for loops that have symbolic loop bounds. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-par-runtime-control The compiler uses default heuristics when checking loops. Description: This option generates code to perform run-time checks for loops that have symbolic loop bounds. If the granularity of a loop is greater than the paral- lelization threshold, the loop will be executed in paral- lel. If you do not specify this option, the compiler may not parallelize loops with symbolic loop bounds if the com- pile-time granularity estimation of a loop can not ensure it is beneficial to parallelize the loop. -par-schedule-keyword[=n] Lets you specify a scheduling algorithm or a tuning method for loop iterations. Architectures: IA-32, Intel® 64, IA-64 architectures Default: static-balanced Iterations are divided into even-sized chunks and the chunks are assigned to the threads in the team in a round-robin fashion in the order of the thread num- ber. Description: This option lets you specify a scheduling algorithm or a tuning method for loop iterations. It specifies how iter- ations are to be divided among the threads of the team. This option affects performance tuning and can provide better performance during auto-parallelization. Option Description -par-schedule-auto or /Qpar-schedule-auto Lets the compiler or run-time system determine the scheduling algorithm. Any possible mapping may occur for iterations to threads in the team. -par-schedule-static or /Qpar-schedule-static Divides iterations into con- tiguous pieces (chunks) of size n. The chunks are assigned to threads in the team in a round-robin fashion in the order of the thread number. Note that the last chunk to be assigned may have a smaller number of iterations. If no n is specified, the iteration space is divided into chunks that are approximately equal in size, and each thread is assigned at most one chunk. -par-schedule-static-balanced or /Qpar-sched- ule-static-balanced Divides iterations into even-sized chunks. The chunks are assigned to the threads in the team in a round-robin fash- ion in the order of the thread number. -par-schedule-static-steal or /Qpar-schedule-static-steal Divides iterations into even-sized chunks, but when a thread completes its chunk, it can steal parts of chunks assigned to neighboring threads. Each thread keeps track of L and U, which repre- sent the lower and upper bounds of its chunks respectively. Iterations are executed start- ing from the lower bound, and simultaneously, L is updated to represent the new lower bound. -par-schedule-dynamic or /Qpar-schedule-dynamic Can be used to get a set of iterations dynamically. Assigns iterations to threads in chunks as the threads request them. The thread executes the chunk of iterations, then requests another chunk, until no chunks remain to be assigned. As each thread finishes a piece of the iteration space, it dynamically gets the next set of itera- tions. Each chunk contains n iterations, except for the last chunk to be assigned, which may have fewer iterations. If no n is specified, the default is 1. -par-schedule-guided or /Qpar-schedule-guided Can be used to specify a mini- mum number of iterations. Assigns iterations to threads in chunks as the threads request them. The thread exe- cutes the chunk of iterations, then requests another chunk, until no chunks remain to be assigned. For a chunk of size 1, the size of each chunk is proportional to the number of unassigned iterations divided by the number of threads, decreasing to 1. For an n with value k (greater than 1), the size of each chunk is deter- mined in the same way with the restriction that the chunks do not contain fewer than k itera- tions (except for the last chunk to be assigned, which may have fewer than k iterations). If no n is specified, the default is 1. -par-schedule-guided-analytical or /Qpar-sched- ule-guided-analytical Divides iterations by using exponential distribution or dynamic distribution. The method depends on run-time implementation. Loop bounds are calculated with faster synchro- nization and chunks are dynami- cally dispatched at run time by threads in the team. -par-schedule-runtime or /Qpar-schedule-runtime Defers the scheduling decision until run time. The scheduling algorithm and chunk size are then taken from the setting of environment variable OMP_SCHED- ULE. -par-threshold[n] Sets a threshold for the auto-parallelization of loops. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -par-threshold100 Loops get auto-parallelized only if profitable parallel execution is almost certain. This is also the default if you do not specify n. Description: This option sets a threshold for the auto-parallelization of loops based on the probability of profitable execution of the loop in parallel. To use this option, you must also specify -parallel (Linux and Mac OS X) or /Qparallel (Win- dows). This option is useful for loops whose computation work volume cannot be determined at compile-time. The threshold is usually relevant when the loop trip count is unknown at compile-time. The compiler applies a heuristic that tries to balance the overhead of creating multiple threads versus the amount of work available to be shared amongst the threads. -pcn Enables control of floating-point significand precision. Architectures: IA-32, Intel® 64 architectures Default: -pc80 On Linux* and Mac OS* X systems, the floating-point significand is rounded to 64 bits. Description: This option enables control of floating-point significand precision. Some floating-point algorithms are sensitive to the accu- racy of the significand, or fractional part of the float- ing-point value. For example, iterative operations like division and finding the square root can run faster if you lower the precision with the this option. Note that a change of the default precision control or rounding mode, for example, by using the -pc32 (Linux and Mac OS X) or /Qpc32 (Windows) option or by user interven- tion, may affect the results returned by some of the math- ematical functions. -pch Tells the compiler to use appropriate precompiled header files. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not create or use pre- compiled headers unless you tell it to do so. Description: This option tells the compiler to use appropriate precom- piled header (PCH) files. If none are available, they are created as sourcefile.pchi. This option is supported for multiple source files. The -pch option will use PCH files created from other sources if the headers files are the same. For example, if you compile source1.cpp using -pch, then source1.pchi is created. If you then compile source2.cpp using -pch, the compiler will use source1.pchi if it detects the same headers. CAUTION: Depending on how you organize the header files listed in your sources, this option may increase compile times. To learn how to optimize compile times using the PCH options, see "Precompiled Header Files" in the User's Guide. -pch-createfile Lets you create and specify a name for a precompiled header file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not create or use pre- compiled headers unless you tell it to do so. Description: This option lets you specify a name for a precompiled header (PCH) file. It is supported only for single source file compilations. The .pchi extension is not automatically appended to the file name. This option cannot be used in the same compilation as the -pch-use option. Depending on how you organize the header files listed in your sources, this option may increase compile times. To learn how to optimize compile times using the PCH options, see "Precompiled Header Files" in the User's Guide. -pch-dir dir Tells the compiler where to find or create a file for pre- compiled headers. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not create or use pre- compiled headers unless you tell it to do so. Description: This option tells the compiler where to find or create a file (PCH) for precompiled headers. This option can be used with the -pch, -pch-create, and -pch-use options. CAUTION: Depending on how you organize the header files listed in your sources, this option may increase compile times. To learn how to optimize compile times using the PCH options, see "Precompiled Header Files" in the User's Guide. -pch-use {file | dir} Lets you use a specific precompiled header file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not create or use pre- compiled headers unless you tell it to do so. Description: This option lets you use a specific precompiled header (PCH) file. It is supported for multiple source files when all source files use the same .pchi file. This option cannot be used in the same compilation as the -pch-create option. CAUTION: Depending on how you organize the header files listed in your sources, this option may increase compile times. To learn how to optimize compile times using the PCH options, see "Precompiled Header Files" in the User's Guide. -pie (L*X only) Produces a position-independent executable on processors that support it. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The driver does not set up special run-time libraries and the linker does not perform the optimizations on exe- cutables. Description: This option produces a position-independent executable on processors that support it. It is both a compiler option and a linker option. When used as a compiler option, this option ensures the linker sets up run-time libraries cor- rectly. Normally the object linked has been compiled with option -fpie. When you specify -pie, it is recommended that you specify the same options that were used during compilation of the object. -pragma-optimization-level=interpretation Specifies which interpretation of the optimization_level pragma should be used if no prefix is specified. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -pragma-optimization-level=Intel Use the Intel interpretation of the optimization_level pragma. Description: Specifies which interpretation of the optimization_level pragma should be used if no prefix is specified. -prec-div -no-prec-div Improves precision of floating-point divides. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -prec-div The compiler uses this method for float- ing-point divides. Description: This option improves precision of floating-point divides. It has a slight impact on speed. With some optimizations, such as -xSSE2 (Linux) or /QxSSE2 (Windows), the compiler may change floating-point division computations into multiplication by the reciprocal of the denominator. For example, A/B is computed as A * (1/B) to improve the speed of the computation. However, sometimes the value produced by this transforma- tion is not as accurate as full IEEE division. When it is important to have fully precise IEEE division, use this option to disable the floating-point division-to-multipli- cation optimization. The result is more accurate, with some loss of performance. If you specify -no-prec-div (Linux and Mac OS X) or /Qprec-div- (Windows), it enables optimizations that give slightly less precise results than full IEEE division. -prec-sqrt -no-prec-sqrt Improves precision of square root implementations. Architectures: IA-32, Intel® 64 architectures Default: -no-prec-sqrt The compiler uses a faster but less pre- cise implementation of square root. However, the default is -prec-sqrt if any of the following options are speci- fied: -O0, -mp, or -mp1 on Linux and Mac OS X systems. Description: This option improves precision of square root implementa- tions. It has a slight impact on speed. This option inhibits any optimizations that can adversely affect the precision of a square root computation. The result is fully precise square root implementations, with some loss of performance. -print-multi-lib Prints information about where system libraries should be found. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No information is printed unless the option is specified. Description: This option prints information about where system libraries should be found, but no compilation occurs. It is provided for compatibility with gcc. -prof-data-order (L*X only) -no-prof-data-order (L*X only) Enables or disables data ordering if profiling information is enabled. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-prof-data-order Data ordering is disabled. Description: This option enables or disables data ordering if profiling information is enabled. It controls the use of profiling information to order static program data items. For this option to be effective, you must do the follow- ing: · For instrumentation compilation, you must specify -prof-gen=globdata (Linux) or /Qprof-gen:globdata (Windows). · For feedback compilation, you must specify -prof-use (Linux) or /Qprof-use (Windows). You must not use multi-file optimization by specifying options such as option -ipo (Linux) or /Qipo (Win- dows), or option -ipo-c (Linux) or /Qipo-c (Win- dows). -prof-dir dir Specifies a directory for profiling information output files. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Profiling output files are placed in the directory where the program is compiled. Description: This option specifies a directory for profiling informa- tion output files (*.dyn and *.dpi). The specified direc- tory must already exist. You should specify this option using the same directory name for both instrumentation and feedback compilations. If you move the .dyn files, you need to specify the new path. -prof-file file Specifies an alternate file name for the profiling summary files. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The profiling summary files have the file name pgopti.* Description: This option specifies an alternate file name for the pro- filing summary files. The file is used as the base name for files created by different profiling passes. If you add this option to profmerge, the .dpi file will be named file.dpi instead of pgopti.dpi. If you specify -prof-genx (Linux and Mac OS X) or /Qprof-genx (Windows) with this option, the .spi and .spl files will be named file.spi and file.spl instead of pgopti.spi and pgopti.spl. If you specify -prof-use (Linux and Mac OS X) or /Qprof-use (Windows) with this option, the .dpi file will be named file.dpi instead of pgopti.dpi. -prof-func-order (L*X only) -no-prof-func-order (L*X only) Enables or disables function ordering if profiling infor- mation is enabled. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-prof-func-order Function ordering is disabled. Description: This option enables or disables function ordering if pro- filing information is enabled. For this option to be effective, you must do the follow- ing: · For instrumentation compilation, you must specify -prof-gen=srcpos (Linux) or /Qprof-gen:srcpos (Win- dows). · For feedback compilation, you must specify -prof-use (Linux) or /Qprof-use (Windows). You must not use multi-file optimization by specifying options such as option -ipo (Linux) or /Qipo (Win- dows), or option -ipo-c (Linux) or /Qipo-c (Win- dows). If you enable profiling information by specifying option -prof-use (Linux) or /Qprof-use (Windows), -prof-func-groups (Linux) and /Qprof-func-groups (Windows) are set and function grouping is enabled. However, if you explicitly enable -prof-func-order (Linux) or /Qprof-func-order (Windows), function ordering is per- formed instead of function grouping. On Linux* systems, this option is only available for Linux linker 2.15.94.0.1, or later. To set the hotness threshold for function grouping and function ordering, use option -prof-hotness-threshold (Linux) or /Qprof-hotness-threshold (Windows). -prof-gen[=keyword] -no-prof-gen Produces an instrumented object file that can be used in profile-guided optimization. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-prof-gen Profile generation is disabled. Description: This option produces an instrumented object file that can be used in profile-guided optimization. It gets the execu- tion count of each basic block. If you specify keyword srcpos or globdata, a static pro- file information file (.spi) is created. These settings may increase the time needed to do a parallel build using -prof-gen, because of contention writing the .spi file. These options are used in phase 1 of the Profile Guided Optimizer (PGO) to instruct the compiler to produce instrumented code in your object files in preparation for instrumented execution. -prof-hotness-threshold=n (L*X only) Lets you set the hotness threshold for function grouping and function ordering. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler's default hotness threshold setting of 10 percent is in effect for function grouping and function ordering. Description: This option lets you set the hotness threshold for func- tion grouping and function ordering. The "hotness threshold" is the percentage of functions in the application that should be placed in the application's hot region. The hot region is the most frequently exe- cuted part of the application. By grouping these func- tions together into one hot region, they have a greater probability of remaining resident in the instruction cache. This can enhance the application's performance. For this option to take effect, you must specify option -prof-use (Linux) or /Qprof-use (Windows) and one of the following: · On Linux systems: -prof-func-groups or -prof-func-order · On Windows systems: /Qprof-func-order -prof-src-dir -no-prof-src-dir Determines whether directory information of the source file under compilation is considered when looking up pro- file data records. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -prof-src-dir Directory information is used when look- ing up profile data records in the .dpi file. Description: This option determines whether directory information of the source file under compilation is considered when look- ing up profile data records in the .dpi file. To use this option, you must also specify option -prof-use (Linux and Mac OS X) or /Qprof-use (Windows). If the option is enabled, directory information is consid- ered when looking up the profile data records within the .dpi file. You can specify directory information by using one of the following options: · Linux and Mac OS X: -prof-src-root or -prof-src-root-cwd · Windows: /Qprof-src-root or /Qprof-src-root-cwd If the option is disabled, directory information is ignored and only the name of the file is used to find the profile data record. Note that options -prof-src-dir (Linux and Mac OS X) and /Qprof-src-dir (Windows) control how the names of the user's source files get represented within the .dyn or .dpi files. Options -prof-dir (Linux and Mac OS X) and /Qprof-dir (Windows) specify the location of the .dyn or the .dpi files. -prof-src-root=dir Lets you use relative directory paths when looking up pro- file data and specifies a directory as the base. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The setting of relevant options deter- mines the path used when looking up pro- file data records. Description: This option lets you use relative directory paths when looking up profile data in .dpi files. It lets you specify a directory as the base. The paths are relative to a base directory specified during the -prof-gen (Linux and Mac OS X) or /Qprof-gen (Windows) compilation phase. This option is available during the following phases of compilation: · Linux and Mac OS X: -prof-gen and -prof-use phases · Windows: /Qprof-gen and /Qprof-use phases When this option is specified during the -prof-gen or /Qprof-gen phase, it stores information into the .dyn or .dpi file. Then, when .dyn files are merged together or the .dpi file is loaded, only the directory information below the root directory is used for forming the lookup key. When this option is specified during the -prof-use or /Qprof-use phase, it specifies a root directory that replaces the root directory specified at the -prof-gen or /Qprof-gen phase for forming the lookup keys. To be effective, this option or option -prof-src-root-cwd (Linux and Mac OS X) or /Qprof-src-root-cwd (Windows) must be specified during the -prof-gen or /Qprof-gen phase. In addition, if one of these options is not specified, abso- lute paths are used in the .dpi file. -prof-src-root-cwd Lets you use relative directory paths when looking up pro- file data and specifies the current working directory as the base. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The setting of relevant options deter- mines the path used when looking up pro- file data records. Description: This option lets you use relative directory paths when looking up profile data in .dpi files. It specifies the current working directory as the base. To use this option, you must also specify option -prof-use (Linux and Mac OS) or /Qprof-use (Windows). This option is available during the following phases of compilation: · Linux and Mac OS X: -prof-gen and -prof-use phases · Windows: /Qprof-gen and /Qprof-use phases When this option is specified during the -prof-gen or /Qprof-gen phase, it stores information into the .dyn or .dpi file. Then, when .dyn files are merged together or the .dpi file is loaded, only the directory information below the root directory is used for forming the lookup key. When this option is specified during the -prof-use or /Qprof-use phase, it specifies a root directory that replaces the root directory specified at the -prof-gen or /Qprof-gen phase for forming the lookup keys. To be effective, this option or option -prof-src-root (Linux and Mac OS X) or /Qprof-src-root (Windows) must be specified during the -prof-gen or /Qprof-gen phase. In addition, if one of these options is not specified, abso- lute paths are used in the .dpi file. -prof-use[=arg] -no-prof-use Enables the use of profiling information during optimiza- tion. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-prof-use Profiling information is not used during optimization. Description: This option enables the use of profiling information (including function splitting and function grouping) dur- ing optimization. It enables option -fnsplit (Linux) or /Qfnsplit (Windows). This option instructs the compiler to produce a pro- file-optimized executable and it merges available profil- ing output files into a pgopti.dpi file. Note that there is no way to turn off function grouping if you enable it using this option. To set the hotness threshold for function grouping and function ordering, use option -prof-hotness-threshold (Linux) or /Qprof-hotness-threshold (Windows). -pthread Tells the compiler to use pthreads library for multi- threading support. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not use pthreads library for multithreading support. Description: Tells the compiler to use pthreads library for multi- threading support. -Qinstalldir Specifies the root directory where the compiler installa- tion was performed. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The default root directory for compiler installation is searched for the com- piler. Description: This option specifies the root directory where the com- piler installation was performed. It is useful if you want to use a different compiler or if you did not use the icc- vars shell script to set your environment variables. -Qlocation,string,dir Specifies the directory for supporting tools. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler looks for tools in a default area. Description: This option specifies the directory for supporting tools. string can be any of the following: · c - Indicates the Intel C++ compiler. · cpp (or fpp) - Indicates the Intel C++ preproces- sor. · cxxinc - Indicates C++ header files. · cinc - Indicates C header files. · asm - Indicates the assembler. · link - Indicates the linker. · prof - Indicates the profiler. · On Windows systems, the following is also avail- able: · masm - Indicates the Microsoft assembler. · On Linux and Mac OS X systems, the following are also available: · as - Indicates the assembler. · gas - Indicates the GNU assembler. · ld - Indicates the loader. · gld - Indicates the GNU loader. · lib - Indicates an additional library. · crt - Indicates the crt%.o files linked into exe- cutables to contain the place to start execution. -Qoption,string,options Passes options to a specified tool. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No options are passed to tools. Description: This option passes options to a specified tool. If an argument contains a space or tab character, you must enclose the entire argument in quotation marks (" "). You must separate multiple arguments with commas. string can be any of the following: · asm - Indicates the assembler. · link - Indicates the linker. · prof - Indicates the profiler. · On Windows systems, the following is also avail- able: · masm - Indicates the Microsoft assembler. · On Linux and Mac OS X systems, the following are also available: · as - Indicates the assembler. · gas - Indicates the GNU assembler. · ld - Indicates the loader. · gld - Indicates the GNU loader. · lib - Indicates an additional library. · crt - Indicates the crt%.o files linked into exe- cutables to contain the place to start execution. -rcd Enables fast float-to-integer conversions. Architectures: IA-32, Intel® 64 architectures Default: OFF Floating-point values are truncated when a conversion to an integer is involved. Description: This option enables fast float-to-integer conversions. It can improve the performance of code that requires float- ing-point-to-integer conversions. The system default floating-point rounding mode is round-to-nearest. However, the C language requires float- ing-point values to be truncated when a conversion to an integer is involved. To do this, the compiler must change the rounding mode to truncation before each float- ing-point-to-integer conversion and change it back after- wards. This option disables the change to truncation of the rounding mode for all floating-point calculations, includ- ing floating point-to-integer conversions. This option can improve performance, but floating-point conversions to integer will not conform to C semantics. -rct Sets the internal FPU rounding control to Truncate. Architectures: IA-32, Intel® 64 architectures Default: OFF The compiler uses the default setting for the FPU rounding control. Description: This option sets the internal FPU rounding control to Truncate. -reserve-kernel-regs (L*X only) Reserves registers f12-f15 and f32-f127 for use by the kernel. Architectures: IA-64 architecture Default: OFF The compiler can use registers f12-f15 and f32-f127. Description: This option reserves registers f12-f15 and f32-f127 for use by the kernel. -restrict -no-restrict Determines whether pointer disambiguation is enabled with the restrict qualifier. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-restrict Pointers are not qualified with the restrict keyword. Description: This option determines whether pointer disambiguation is enabled with the restrict qualifier. Options -restrict (Linux and Mac OS X) and /Qrestrict (Windows OS) enable the recognition of the restrict keyword as defined by the ANSI standard. By qualifying a pointer with the restrict keyword, you assert that an object accessed by the pointer is only accessed by that pointer in the given scope. You should use the restrict keyword only when this is true. When the assertion is true, the restrict option will have no effect on program correctness, but may allow better optimization. -S Causes the compiler to compile to an assembly file only and not link. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Normal compilation and linking occur. Description: This option causes the compiler to compile to an assembly file only and not link. On Linux and Mac OS X systems, the assembly file name has a .s suffix. On Windows systems, the assembly file name has an .asm suffix. -save-temps -no-save-temps Tells the compiler to save intermediate files created dur- ing compilation. Architectures: IA-32, Intel® 64, IA-64 architectures Default: Linux and Mac OS X: -no-save-temps On Linux and Mac OS X systems, the com- piler deletes intermediate files after compilation is completed. Description: This option tells the compiler to save intermediate files created during compilation. The names of the files saved are based on the name of the source file; the files are saved in the current working directory. If -save-temps or /Qsave-temps is specified, the following occurs: · The object .o file (Linux and Mac OS X) or .obj file (Windows) is saved. · The assembler .s file (Linux and Mac OS X) or .asm file (Windows) is saved if you specified -use-asm (Linux or Mac OS X) or /Quse-asm (Windows). If -no-save-temps is specified on Linux or Mac OS X sys- tems, the following occurs: · The .o file is put into /tmp and deleted after calling ld. · The preprocessed file is not saved after it has been used by the compiler. If /Qsave-temps- is specified on Windows systems, the fol- lowing occurs: · The .obj file is not saved after the linker step. · The preprocessed file is not saved after it has been used by the compiler. NOTE: This option only saves intermediate files that are normally created during compilation. -scalar-rep -no-scalar-rep Enables scalar replacement performed during loop transfor- mation. Architectures: IA-32 architecture Default: -no-scalar-rep Scalar replacement is not performed dur- ing loop transformation. Description: This option enables scalar replacement performed during loop transformation. To use this option, you must also specify O3. -shared (L*X only) Tells the compiler to produce a dynamic shared object instead of an executable. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler produces an executable. Description: This option tells the compiler to produce a dynamic shared object (DSO) instead of an executable. This includes link- ing in all libraries dynamically and passing -shared to the linker. On systems using IA-32 architecture and Intel® 64 archi- tecture, you must specify option fpic for the compilation of each object file you want to include in the shared library. -shared-intel Causes Intel-provided libraries to be linked in dynami- cally. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Intel libraries are linked in stati- cally, with the exception of libguide on Linux* and Mac OS* X systems, where it is linked in dynamically. Description: This option causes Intel-provided libraries to be linked in dynamically. It is the opposite of -static-intel. NOTE: On Mac OS X systems, when you set "Intel Runtime Libraries" to "Dynamic", you must also set the DYLD_LIBRARY_PATH environment variable within Xcode or an error will be displayed. -shared-libgcc (L*X only) Links the GNU libgcc library dynamically. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -shared-libgcc The compiler links the libgcc library dynamically. Description: This option links the GNU libgcc library dynamically. It is the opposite of option static-libgcc. This option is useful when you want to override the default behavior of the static option, which causes all libraries to be linked statically. -sox (L*X only) -no-sox (L*X only) Tells the compiler to save the compilation options and version number in the Linux* OS executable or the Windows* OS object file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-sox The compiler does not save the compiler options and version number in the exe- cutable. Description: Tells the compiler to save the compilation options and version number in the Linux* OS executable or the Windows* OS object file. On Linux systems, the size of the executable on disk is increased slightly by the inclusion of these infotmation strings. This option forces the compiler to embed in each object file or assembly output a string that contains information about the compiler version and compilation options for each source file that has been compiled. On Windows systems, the information stays in the object file. On Linux systems, when you link the object files into an executable file, the linker places each of the information strings into the header of the executable. It is then possible to use a tool, such as a strings utility, to determine what options were used to build the exe- cutable file. If -no-sox or /Qsox- is specified, this extra information is not put into the object or assembly output generated by the compiler. -static (L*X only) Prevents linking with shared libraries. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler links with shared libraries. Description: This option prevents linking with shared libraries. It causes the executable to link all libraries statically. -static-intel Causes Intel-provided libraries to be linked in stati- cally. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Intel libraries are linked in stati- cally, with the exception of libguide, which is linked in dynamically. Description: This option causes Intel-provided libraries to be linked in statically. It is the opposite of -shared-intel. -staticlib (M*X only) Invokes the libtool command to generate static libraries. Architectures: IA-32, Intel® 64 architectures Default: OFF The compiler produces an executable. Description: This option invokes the libtool command to generate static libraries. When passed this option, the compiler uses the libtool command to produce a static library instead of an exe- cutable when linking. To build dynamic libraries, you should specify option -dynamiclib or libtool -dynamic -static-libgcc (L*X only) Links the GNU libgcc library statically. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF DEFAULT_DESC Description: This option links the GNU libgcc library statically. It is the opposite of option libgcc. This option is useful when you want to override the default behavior of the libgcc option, which causes all libraries to be linked statically. -std=val Tells the compiler to conform to a specific language stan- dard. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -std=gnu89 (default for C) Conforms to ISO C90 plus GNU extensions. -std=gnu++98 (default for C++) Conforms to the 1998 ISO C++ standard plus GNU* extensions. Description: Tells the compiler to conform to a specific language stan- dard. -strict-ansi Tells the compiler to implement strict ANSI conformance dialect. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler conforms to default stan- dards. Description: This option tells the compiler to implement strict ANSI conformance dialect. If you need to be compatible with gcc, use the -ansi option. This option sets option fmath-errno. -Tfile (L*X only) Tells the linker to read link commands from a file. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The linker does not read link commands from a file. Description: This option tells the linker to read link commands from a file. -tbb Tells the compiler to link to the Intel® Threading Build- ing Blocks (Intel® TBB) libraries. Architectures: IA-32, Intel® 64 architecture, IA-64 archi- tecture Default: OFF The compiler does not link to the Intel® TBB libraries. Description: This option tells the compiler to link to the Intel® Threading Building Blocks (Intel® TBB) libraries and include the Intel® TBB headers. On IA-64 architecture, this option is not available on Windows systems. -tcheck (L*X only) Enables analysis of threaded applications. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Threaded applications are not instru- mented by the compiler for analysis by Intel® Thread Checker. Description: This option enables analysis of threaded applications. To use this option, you must have Intel® Thread Checker installed, which is one of the Intel® Threading Analysis Tools. If you do not have this tool installed, the compi- lation will fail. Remove the -tcheck (Linux) or /Qtcheck (Windows) option from the command line and recompile. For more information about Intel® Thread Checker (includ- ing an evaluation copy), open the page associated with threading tools at Intel® Software Development Products. -tcollect[lib] (L*X only) Inserts instrumentation probes calling the Intel® Trace Collector API. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Instrumentation probes are not inserted into compiled applications. Description: This option inserts instrumentation probes calling the Intel® Trace Collector API. To use this option, you must have the Intel® Trace Collector installed and set up through one of its set-up scripts. This tool is a compo- nent of the Intel® Trace Analyzer and Collector. This option provides a flexible and convenient way of instrumenting functions of a compiled application. For every function, the entry and exit points are instrumented at compile time to let the Intel® Trace Collector record functions beyond the default MPI calls. For non-MPI appli- cations (for example, threaded or serial), you must ensure that the Intel® Trace Collector is properly initialized (VT_initialize/VT_init). CAUTION: Be careful with full instrumentation because this feature can produce very large trace files. For more details, see the Intel® Trace Collector User Guide. -tcollect-filter file (L*X only) Lets you enable or disable the instrumentation of speci- fied functions. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Functions are not instrumented. However, if option -tcollect (Linux) is speci- fied, the filter setting is ".* ON" and all functions get instrumented. Description: This option lets you enable or disable the instrumentation of specified functions. During instrumentation, the regular expressions in the file are matched against the function names. The switch specifies whether matching functions are to be instru- mented or not. Multiple filters are evaluated from top to bottom with increasing precedence. The names of the functions to match against are formatted as follows: · C++ function names are demangled and the C++ class hierarchy is used. Function parameters are stripped to keep the function names shorter. · The source file name is followed by a colon-sepa- rated function name. Source file names should con- tain the full path, if available. For example: /home/joe/src/foo.c:FOO_bar · Classes and function names are separated by double colons. For example: /home/joe/src/foo.cpp:app::foo::bar You can use option -opt-report (Linux) or /Qopt-report (Windows) to get a full list of file and function names that the compiler recognizes from the compilation unit. This list can be used as the basis for filtering in the configuration file. To use this option, you must have the Intel® Trace Collec- tor installed and set up through one of its set-up scripts. This tool is a component of the Intel® Trace Ana- lyzer and Collector. For more details, see the Intel® Trace Collector User Guide. -tprofile (L*X only) Generates instrumentation to analyze multi-threading per- formance. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Instrumentation is not generated by the compiler for analysis by Intel® Thread Profiler. Description: This option generates instrumentation to analyze multi-threading performance. To use this option, you must have Intel® Thread Profiler installed, which is one of the Intel® Threading Analysis Tools. If you do not have this tool installed, the compi- lation will fail. Remove the -tprofile (Linux) or /Qtpro- file (Windows) option from the command line and recompile. For more information about Intel® Thread Profiler (includ- ing an evaluation copy), open the page associated with threading tools at Intel® Software Development Products. -traceback -notraceback Tells the compiler to generate extra information in the object file to provide source file traceback information when a severe error occurs at run time. Architectures: IA-32, Intel® 64, IA-64 architectures Default: notraceback No extra information is generated in the object file to produce traceback infor- mation. Description: This option tells the compiler to generate extra informa- tion in the object file to provide source file traceback information when a severe error occurs at run time. This is intended for use with C code that is to be linked into a Fortran program. When the severe error occurs, source file, routine name, and line number correlation information is displayed along with call stack hexadecimal addresses (program counter trace). Note that when a severe error occurs, advanced users can also locate the cause of the error using a map file and the hexadecimal addresses of the stack displayed when the error occurs. This option increases the size of the executable program, but has no impact on run-time execution speeds. It functions independently of the debug option. On Windows systems, traceback sets the /Oy- option, which forces the compiler to use EBP as the stack frame pointer. On Windows systems, the linker places the traceback infor- mation in the executable image, in a section named ".trace". To see which sections are in an image, use the command: link -dump -summary your_app_name.exe To see more detailed information, use the command: link -dump -headers your_app_name.exe On Linux systems, to display the section headers in the image (including the header for the .trace section, if any), use the command: objdump -h your_app_name.exe On Mac OS X systems, to display the section headers in the image, use the command: otool -l your_app_name.exe -Wtrigraphs -Wno-trigraphs Determines whether warnings are issued if any trigraphs are encountered that might change the meaning of the pro- gram. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-trigraphs No warnings are issued if any trigraphs are encountered that might change the meaning of the program. Description: This option determines whether warnings are issued if any trigraphs are encountered that might change the meaning of the program. -u symbol Tells the compiler the specified symbol is undefined. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Standard rules are in effect for vari- ables. Description: This option tells the compiler the specified symbol is undefined. -Uname Undefines any definition currently in effect for the spec- ified macro. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Macro definitions are in effect until they are undefined. Description: This option undefines any definition currently in effect for the specified macro. It is equivalent to a #undef pre- processing directive. On Windows systems, use the /u option to undefine all pre- viously defined preprocessor values. -unroll[=n] Tells the compiler the maximum number of times to unroll loops. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -unroll The compiler uses default heuristics when unrolling loops. Description: This option tells the compiler the maximum number of times to unroll loops. If you do not specify n, the optimizer determines how many times loops can be unrolled. -unroll-aggressive -no-unroll-aggressive Determines whether the compiler uses more aggressive unrolling for certain loops. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-unroll-aggressive The compiler uses default heuristics when unrolling loops. Description: This option determines whether the compiler uses more aggressive unrolling for certain loops. The positive form of the option may improve performance. On IA-32 architecture and Intel® 64 architecture, this option enables aggressive, complete unrolling for loops with small constant trip counts. On IA-64 architecture, this option enables additional com- plete unrolling for loops that have multiple exits or outer loops that have a small constant trip count. -use-intel-optimized-headers Determines whether the performance headers directory is added to the include path search list. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -no-use-intel-optimized-headers The performance headers directory is not added to the include path search list. Description: This option determines whether the performance headers directory is added to the include path search list. The performance headers directory is added if you spec- ify-use-intel-optimized-headers (Linux and Mac OS X) or/Quse-intel-optimized-headers (Windows OS). Appropriate libraries are also linked in, as needed, for proper func- tionality. -use-msasm Tells the compiler to accept the Microsoft* MASM-style inlined assembly format. Architectures: IA-32, Intel® 64 architectures Default: OFF The compiler accepts the GNU-style inlined assembly format. Description: This option tells the compiler to accept the Microsoft MASM-style inlined assembly format instead of the GNU-style format. -V Displays the compiler version information. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler version information is not displayed. Description: This option displays the startup banner, which contains the following compiler version information: · ID: unique identification number for the compiler · x.y.z: version of the compiler · years: years for which the software is copyrighted This option can be placed anywhere on the command line. -v[file] Specifies that driver tool commands should be displayed and executed. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No tool commands are shown. Description: This option specifies that driver tool commands should be displayed and executed. If you use this option without specifying a file name, the compiler displays only the version of the compiler. -vec -no-vec Enables or disables vectorization and transformations enabled for vectorization. Architectures: IA-32, Intel® 64 architectures Default: -vec Vectorization is enabled. Description: This option enables or disables vectorization and trans- formations enabled for vectorization. To disable vectorization and transformations enabled for vectorization, specify -no-vec (Linux and Mac OS X) or /Qvec- (Windows). -vec-guard-write -no-vec-guard-write Tells the compiler to perform a conditional check in a vectorized loop. Architectures: IA-32, Intel® 64 architectures Default: -no-vec-guard-write The compiler uses default heuristics when checking vectorized loops. Description: This option tells the compiler to perform a conditional check in a vectorized loop. This checking avoids unneces- sary stores and may improve performance. -vec-report[n] Controls the diagnostic information reported by the vec- torizer. Architectures: IA-32, Intel® 64 architectures Default: -vec-report1 If the vectorizer has been enabled and you do not specify n, the compiler reports diagnostics on vectorized loops. If you do not specify the option on the command line, the default is to display no messages. Description: This option controls the diagnostic information reported by the vectorizer. The vectorizer report is sent to std- out. If you do not specify n, it is the same as specifying -vec-report1 (Linux and Mac OS X) or /Qvec-report1 (Win- dows). The vectorizer is enabled when certain compiler options are specified, such as option -ax or -x (Linux and Mac OS X), option /Qax or /Qx (Windows), option /arch:SSE or /arch:SSE2 (Windows), and option fast. -vec-threshold[n] Sets a threshold for the vectorization of loops. Architectures: IA-32, Intel® 64 architectures Default: -vec-threshold100 Loops get vectorized only if profitable vector-level parallel execution is almost certain. This is also the default if you do not specify n. Description: This option sets a threshold for the vectorization of loops based on the probability of profitable execution of the vectorized loop in parallel. This option is useful for loops whose computation work volume cannot be determined at compile-time. The threshold is usually relevant when the loop trip count is unknown at compile-time. The compiler applies a heuristic that tries to balance the overhead of creating multiple threads versus the amount of work available to be shared amongst the threads. --version Display GCC-style version information. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Display GCC-style version information. -w Disables all warning messages. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Default warning messages are enabled. Description: This option disables all warning messages. -wn Specifies the level of diagnostic messages to be generated by the compiler. Architectures: IA-32, Intel® 64, IA-64 architectures Default: n=1 The compiler displays warnings and errors. Description: This option specifies the level of diagnostic messages to be generated by the compiler. Possible values are 0 (displays errors only), 1 (displays warnings and errors), and 2 (which is the same as 1). -Wa,option1[,option2,...] Passes options to the assembler for processing. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No options are passed to the assembler. Description: This option passes one or more options to the assembler for processing. If the assembler is not invoked, these options are ignored. -Wabi -Wno-abi Determines whether a warning is issued if generated code is not C++ ABI compliant. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-abi No warning is issued when generated code is not C++ ABI compliant. Description: This option determines whether a warning is issued if gen- erated code is not C++ ABI compliant. -Wall Tells the compiler to display errors, warnings, and remarks. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Default warning messages are enabled. Description: This option tells the compiler to display errors, warn- ings, and remarks. On Windows, this is the same as specifying the /W4 option. -Wbrief Tells the compiler to display a shorter form of diagnostic output. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler displays its normal diag- nostic output. Description: This option tells the compiler to display a shorter form of diagnostic output. In this form, the original source line is not displayed and the error message text is not wrapped when too long to fit on a single line. -Wcheck Tells the compiler to perform compile-time code checking for certain code. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No compile-time code checking is per- formed. Description: This option tells the compiler to perform compile-time code checking for certain code. It specifies to check for code that exhibits non-portable behavior, represents a possible unintended code sequence, or possibly affects operation of the program because of a quiet change in the ANSI C Standard. -Wcomment -Wno-comment Determines whether a warning is issued when /* appears in the middle of a /* */ comment. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-comment No warning is issued when /* appears in the middle of a /* */ comment. Description: This option determines whether a warning is issued when /* appears in the middle of a /* */ comment. -Wcontext-limit=n Set the maximum number of template instantiation contexts shown in diagnostic. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Description: Set maximum number of template instantiation contexts shown in diagnostic. -Wdeprecated -Wno-deprecated Determines whether warnings are issued for deprecated fea- tures. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-deprecated No warnings are issued for deprecated features. Description: This option determines whether warnings are issued for deprecated features. -Weffc++ This option enables warnings based on certain C++ program- ming guidelines. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Diagnostics are not enabled. Description: This option enables warnings based on certain programming guidelines developed by Scott Meyers in his books on effective C++ programming. With this option, the compiler emits warnings for these guidelines: · Use const and inline rather than #define. Note that you will only get this in user code, not system header code. · Use · Use new and delete rather than malloc and free. · Use C++ style comments in preference to C style comments. C comments in system headers are not diagnosed. · Use delete on pointer members in destructors. The compiler diagnoses any pointer that does not have a delete. · Make sure you have a user copy constructor and assignment operator in classes containing pointers. · Use initialization rather than assignment to mem- bers in constructors. · Make sure the initialization list ordering matches the declartion list ordering in constructors. · Make sure base classes have virtual destructors. · Make sure operator= returns *this. · Make sure prefix forms of increment and decrement return a const object. · Never overload operators &&, ||, and ,. NOTE: The warnings generated by this compiler option are based on the following books from Scott Meyers: · Effective C++ Second Edition - 50 Specific Ways to Improve Your Programs and Designs · More Effective C++ - 35 New Ways to Improve Your Programs and Designs -Werror Changes all warnings to errors. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler returns diagnostics as usual. Description: This option changes all warnings to errors. -Wextra-tokens -Wno-extra-tokens Determines whether warnings are issued about extra tokens at the end of preprocessor directives. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-extra-tokens The compiler does not warn about extra tokens at the end of preprocessor direc- tives. Description: This option determines whether warnings are issued about extra tokens at the end of preprocessor directives. -Wformat -Wno-format Determines whether argument checking is enabled for calls to printf, scanf, and so forth. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-format Argument checking is not enabled for calls to printf, scanf, and so forth. Description: This option determines whether argument checking is enabled for calls to printf, scanf, and so forth. -Wformat-security -Wno-format-security Determines whether the compiler issues a warning when the use of format functions may cause security problems. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-format-security No warning is issued when the use of format functions may cause security problems. Description: This option determines whether the compiler issues a warn- ing when the use of format functions may cause security problems. When -Wformat-security is specified, it warns about uses of format functions where the format string is not a string literal and there are no format arguments. -Winline Enables diagnostics about what is inlined and what is not inlined. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No diagnostics are produced about what is inlined and what is not inlined. Description: This option enables diagnostics about what is inlined and what is not inlined. The diagnostics depend on what inter- procedural functionality is available. -Wl,option1[,option2,...] Passes options to the linker for processing. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No options are passed to the linker. Description: This option passes one or more options to the linker for processing. If the linker is not invoked, these options are ignored. This option is equivalent to specifying option -Qop- tion,link,options. -Wmain -Wno-main Determines whether a warning is issued if the return type of main is not expected. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-main No warning is issued if the return type of main is not expected. Description: This option determines whether a warning is issued if the return type of main is not expected. -Wmissing-declarations -Wno-missing-declarations Determines whether warnings are issued for global func- tions and variables without prior declaration. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-missing-declarations No warnings are issued for global func- tions and variables without prior decla- ration. Description: This option determines whether warnings are issued for global functions and variables without prior declaration. -Wmissing-prototypes -Wno-missing-prototypes Determines whether warnings are issued for missing proto- types. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-missing-prototypes No warnings are issued for missing pro- totypes. Description: Determines whether warnings are issued for missing proto- types. -Wnon-virtual-dtor Issue a warning when a class appears to be polymorphic, yet it declares a non-virtual one. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not issue a warning. Description: Issue a warning when a class appears to be polymorphic, yet it declares a non-virtual one. This option is sup- ported in C++ only. -Wp,option1[,option2,...] Passes options to the preprocessor. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No options are passed to the preproces- sor. Description: This option passes one or more options to the preproces- sor. If the preprocessor is not invoked, these options are ignored. This option is equivalent to specifying option -Qop- tion,cpp, options. -Wp64 Tells the compiler to display diagnostics for 64-bit port- ing. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not display diagnos- tics for 64-bit porting. Description: This option tells the compiler to display diagnostics for 64-bit porting. -Wpointer-arith -Wno-pointer-arith Determines whether warnings are issued for questionable pointer arithmetic. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-pointer-arith No warnings are issued for questionable pointer arithmetic. Description: Determines whether warnings are issued for questionable pointer arithmetic. -Wpragma-once -Wno-pragma-once Determines whether a warning is issued about the use of #pragma once. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-pragma-once No warning is issued about the use of #pragma once. Description: This option determines whether a warning is issued about the use of #pragma once. -Wreorder Issue a warning when the order of member initializers does not match the order in which they must be executed. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF The compiler does not issue a warning. Description: Issue a warning when the order of member initializers does not match the order in which they must be executed. This option is supported with C++ only. -Wreturn-type -Wno-return-type Determines whether warnings are issued when a function uses the default int return type or when a return state- ment is used in a void function. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-return-type No warnings are issued when a function uses the default int return type or when a return statement is used in a void function. Description: This option determines whether warnings are issued when a function uses the default int return type or when a return statement is used in a void function. -Wshadow -Wno-shadow Determines whether a warning is issued when a variable declaration hides a previous declaration. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-shadow No warning is issued when a variable declaration hides a previous declara- tion. Description: This option determines whether a warning is issued when a variable declaration hides a previous declaration. Same as -ww1599. -Wstrict-prototypes -Wno-strict-prototypes Determines whether warnings are issued for functions declared or defined without specified argument types. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-strict-prototypes No warnings are issued for functions declared or defined without specified argument types. Description: This option determines whether warnings are issued for functions declared or defined without specified argument types. -Wtrigraphs -Wno-trigraphs Determines whether warnings are issued if any trigraphs are encountered that might change the meaning of the pro- gram. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-trigraphs No warnings are issued if any trigraphs are encountered that might change the meaning of the program. Description: This option determines whether warnings are issued if any trigraphs are encountered that might change the meaning of the program. -Wuninitialized -Wno-uninitialized Determines whether a warning is issued if a variable is used before being initialized. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-uninitialized No warning is issued if a variable is used before being initialized. Description: This option determines whether a warning is issued if a variable is used before being initialized. Equivalent to -ww592 and -wd592. -Wunknown-pragmas -Wno-unknown-pragmas Determines whether a warning is issued if an unknown #pragma directive is used. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wunknown-pragmas No warning is issued if an unknown #pragma directive is used. Description: This option determines whether a warning is issued if an unknown #pragma directive is used. -Wunused-function -Wno-unused-function Determines whether a warning is issued if a declared func- tion is not used. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-unused-function No warning is issued if a declared func- tion is not used. Description: This option determines whether a warning is issued if a declared function is not used. -Wunused-variable -Wno-unused-variable Determines whether a warning is issued if a local or non-constant static variable is unused after being declared. Architectures: IA-32, Intel® 64, IA-64 architectures Default: -Wno-unused-variable No warning is issued if a local or non-constant static variable is unused after being declared. Description: This option determines whether a warning is issued if a local or non-constant static variable is unused after being declared. -Wwrite-strings Issues a diagnostic message if const char * is converted to (non-const) char *. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No diagnostic message is issued if const char * is converted to (non-const) char*. Description: This option issues a diagnostic message if const char* is converted to (non-const) char *. -x type All source files found subsequent to -xtype will be recog- nized as a particular type. Architectures: IA-32, Intel® 64, IA-64 architectures Default: none Disable recognition and revert to file extension. Description: All source files found subsequent to -x will be recog- nized as a particular type. -xprocessor Tells the compiler to generate optimized code specialized for the Intel processor that executes your program. Architectures: IA-32, Intel® 64 architectures Default: Windows* systems: NoneLinux* systems: None Mac OS* X systems using IA-32 architec- ture: SSE3Mac OS* X systems using Intel® 64 architecture: SSSE3 On Windows sys- tems, if neither /Qx nor /arch is speci- fied, the default is /arch:SSE2. On Linux systems, if neither -x nor -m is specified, the default is -msse2. Description: Arguments Host, AVX, SSE4.2, SSE3_ATOM, SSE4.1, SSSE3, SSE3, and SSE2 are allowed. For more information, see the compiler documentation. This option tells the compiler to generate optimized code specialized for the Intel processor that executes your program. It also enables optimizations in addition to Intel processor-specific optimizations. The specialized code generated by this option may run only on a subset of Intel processors. This option can enable optimizations depending on the argument specified. For example, it may enable Intel® Streaming SIMD Extensions 4 (Intel® SSE4), Intel® Supple- mental Streaming SIMD Extensions 3 (Intel® SSSE3), Intel® Streaming SIMD Extensions 3 (Intel® SSE3), Intel® Stream- ing SIMD Extensions 2 (Intel® SSE2), or Intel® Streaming SIMD Extensions (Intel® SSE) instructions. The binaries produced by these values will run on Intel processors that support all of the features for the tar- geted processor. For example, binaries produced with SSE3 will run on an Intel® Core™ 2 Duo processor, because that processor completely supports all of the capabilities of the Intel® Pentium® 4 processor, which the SSE3 value tar- gets. Specifying the SSSE3 value has the potential of using more features and optimizations available to the Intel® Core™ 2 Duo processor. Do not use processor values to create binaries that will execute on a processor that is not compatible with the targeted processor. The resulting program may fail with an illegal instruction exception or display other unexpected behavior. For example, binaries produced with SSE3 may produce code that will not run on Intel® Pentium® III pro- cessors or earlier processors that do not support SSE3 instructions. Compiling the function main() with any of the processor values produces binaries that display a fatal run-time error if they are executed on unsupported processors. For more information, see Optimizing Applications. If you specify more than one processor value, code is gen- erated for only the highest-performing processor speci- fied. The highest-performing to lowest-performing proces- sor values are: SSE4.2, SSE4.1, SSSE3, SSE3, SSE2. Note that processor values AVX and SSE3_ATOM do not fit within this group. Compiler options m and arch produce binaries that should run on processors not made by Intel that implement the same capabilities as the corresponding Intel processors. Previous value O is deprecated and has been replaced by option -msse3 (Linux and Mac OS X) and option /arch:SSE3 (Windows). Previous values W and K are deprecated. The details on replacements are as follows: · Mac OS X systems: On these systems, there is no exact replacement for W or K. You can upgrade to the default option -msse3 (IA-32 architecture) or option -mssse3 (Intel® 64 architecture). · Windows and Linux systems: The replacement for W is -msse2 (Linux) or /arch:SSE2 (Windows). There is no exact replacement for K. However, on Windows sys- tems, /QxK is interpreted as /arch:IA32; on Linux systems, -xK is interpreted as -mia32. You can also do one of the following: · Upgrade to option -msse2 (Linux) or option /arch:SSE2 (Windows). This will produce one code path that is specialized for Intel® SSE2. It will not run on earlier processors · Specify the two option combination -mia32 -axSSE2 (Linux) or /arch:IA32 /QaxSSE2 (Windows). This com- bination will produce an executable that runs on any processor with IA-32 architecture but with an additional specialized Intel® SSE2 code path. The -x and /Qx options enable additional optimizations not enabled with option -m or option /arch. On Windows* systems, options /Qx and /arch are mutually exclusive. If both are specified, the compiler uses the last one specified and generates a warning. Similarly, on Linux* and Mac OS* X systems, options -x and -m are mutu- ally exclusive. If both are specified, the compiler uses the last one specified and generates a warning. -X Removes standard directories from the include file search path. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF Standard directories are in the include file search path. Description: This option removes standard directories from the include file search path. It prevents the compiler from searching the default path specified by the INCLUDE environment variable. On Linux and Mac OS X systems, specifying -X (or -noin- clude) prevents the compiler from searching in /usr/include for files specified in an INCLUDE statement. You can use this option with the I option to prevent the compiler from searching the default path for include files and direct it to use an alternate path. -Xlinker option Passes a linker option directly to the linker. Architectures: IA-32, Intel® 64, IA-64 architectures Default: OFF No options are passed directly to the linker. Description: This option passes a linker option directly to the linker. If -Xlinker -shared is specified, only -shared is passed to the linker and no special work is done to ensure proper linkage for generating a shared object. -Xlinker just takes whatever arguments are supplied and passes them directly to the linker. If you want to pass compound options to the linker, for example "-L $HOME/lib", you must use the following method: -Xlinker -L -Xlinker $HOME/lib -Zp[n] Specifies alignment for structures on byte boundaries. Architectures: IA-32, Intel® 64, IA-64 architectures Default: Zp16 Structures are aligned on either size boundary 16 or the boundary that will naturally align them. Description: This option specifies alignment for structures on byte boundaries. If you do not specify n, you get Zp16. TECHNICAL SUPPORT The Intel C++ Compiler product web site offers timely and compre- hensive product information, including product features, white papers, and technical articles. For information about Intel software products, see http://www.intel.com/software/products. For general support information, see http://www.intel.com/software/products/support. For additional support information, see the Technical Support section of the Product Release Notes. See the Registration web site for licensing and registration guidance: SEE ALSO icc(1), ld(1) In the Intel(R) C++ Compiler Documentation, the Intel(R) C++ Building Applications guide and the Intel(R) C++ Optimizing Applications guide provide detailed information on using the Intel C++ Compiler. In addition, see these other documents provided with the Intel C++ Compiler: · Product Release Notes · Intel(R) C++ Compiler Documentation: the Intel C++ Com- piler Options reference · Intel(R) C++ Compiler Documentation: the Intel Fortran Floating-point Operations manual · Intel(R) C++ Compiler Documentation: the Intel C++ Intrin- sics Reference · Intel(R) C++ Compiler Documentation: the Intel C++ Com- piler Reference Legal Information INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL(R) PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WAR- RANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MER- CHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. UNLESS OTHERWISE AGREED IN WRITING BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR. Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." Intel reserves these for future defi- nition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information. The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request. Contact your local Intel sales office or your distribu- tor to obtain the latest specifications and before placing your product order. Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-800-548-4725, or by visiting Intel's Web Site. Intel processor numbers are not a measure of performance. Proces- sor numbers differentiate features within each processor family, not across different processor families. See http://www.intel.com/products/processor_number for details. BunnyPeople, Celeron, Celeron Inside, Centrino, Centrino Atom, Centrino Atom Inside, Centrino Inside, Centrino logo, Core Inside, FlashFile, i960, InstantIP, Intel, Intel logo, Intel386, Intel486, IntelDX2, IntelDX4, IntelSX2, Intel Atom, Intel Atom Inside, Intel Core, Intel Inside, Intel Inside logo, Intel. Leap ahead., Intel. Leap ahead. logo, Intel NetBurst, Intel NetMerge, Intel NetStructure, Intel SingleDriver, Intel SpeedStep, Intel StrataFlash, Intel Viiv, Intel vPro, Intel XScale, Itanium, Ita- nium Inside, MCS, MMX, Oplus, OverDrive, PDCharm, Pentium, Pen- tium Inside, skoool, Sound Mark, The Journey Inside, Viiv Inside, vPro Inside, VTune, Xeon, and Xeon Inside are trademarks of Intel Corporation in the U.S. and other countries. * Other names and brands may be claimed as the property of oth- ers. Copyright (C) 1996-2009, Intel Corporation. All rights reserved. Portions Copyright (C) 2001, Hewlett-Packard Development Company, L.P. Copyright(C) 2002 - 2009 Intel Corporation ICC(1)