<?xml version="1.0"?>
<!DOCTYPE flagsdescription SYSTEM "http://www.spec.org/dtd/cpuflags2.dtd">
<flagsdescription>

<!-- filename to begin with "lenovo-omp2012-20190505.xml" -->
<filename>lenovo-omp2012-oneAPI-20210211.xml</filename>

<title>SPEC OMP2012 Flag Description for the Intel(R) C/C++ Compiler
for IA32 and Intel 64 applications and Intel(R) Fortran Compiler for IA32 and Intel 64 
applications</title>
<sw_environment>
<![CDATA[ 

<h2><a name="OMPFlags">Open MP Tuning Flags</a></h2>

 
<li class="FlagName">

             <p><b><font color=blue>KMP_AFFINITY</font> </b></p>
<p>
<p>The <span class="flagTOC">KMP_AFFINITY</span> environment variable uses the following general syntax:</p>
<table>

<col class="whs3">
<tbody><tr>
<th rowspan="1" colspan="1" class="whs4" align="left" nowrap="nowrap" width="100%">
<h3 class="TableHead">Syntax</h3>
</th>
</tr>
<tr class="whs5" valign="top">
<td colspan="1" rowspan="1" class="whs6" width="100%">
<p class="Preformatted">KMP_AFFINITY=[&lt;<span style="font-style: italic;"><i>modifier</i></span>&gt;,...]&lt;<span style="font-style: italic;"><i>type</i></span>&gt;[,&lt;<span style="font-style: italic;"><i>permute</i></span>&gt;][,&lt;<span style="font-style: italic;"><i>offset</i></span>&gt;]</p>

</td>
</tr>
</tbody></table>
<p>For example, to list a machine topology map, specify <span class="flagTOC">KMP_AFFINITY=verbose,none</span> to use a <span style="font-style: italic;"><i>modifier</i></span> of <span class="flagTOC">verbose</span> and a <span style="font-style: italic;"><i>type</i></span> of <span class="flagTOC">none.</span></p>

<p><span>The following table describes the supported specific arguments.</span></p>
<table>
<col>
<col>
<col>
<tbody><tr>
<th class="FlagTOC" align="left" nowrap="nowrap" width="15%">Argument</th>
<th colspan="1" rowspan="1" class="FlagTOC" align="left">
<h3 class="TableHead">Default</h3>
</th>
<th class="FlagTOC" align="left">
<h3 class="TableHead">Description</h3>
</th>

</tr>
<tr class="FlagTOC" valign="top">
<td colspan="1" rowspan="1" class="flagTOC" width="15%">
<p><span class="flagTOC"><a href="#Modifier">modifier</a></span></p>
</td>
<td colspan="1" rowspan="1">
<p><span class="flagTOC">noverbose</span></p>
<p><span class="flagTOC">respect</span></p>
<p><span class="flagTOC">granularity=core</span></p>
</td>
<td colspan="1" rowspan="1">
<p><span>Optional. String consisting of keyword and specifier.</span></p>

<ul class="whs1" type="disc">
<li class="FlagTOC">
<p><span class="flagTOC">granularity=&lt;</span><span class="flagTOC" style="font-style: italic;"><i>specifier</i></span><span class="flagTOC">&gt;</span><br>
takes the following specifiers: <span class="flagTOC">fine</span>, <span class="flagTOC">thread</span>, and <span class="flagTOC">core</span></p>
</li>
<li class="FlagTOC">
<p><span class="flagTOC">norespect</span></p>
</li>

<li class="FlagTOC">
<p><span class="flagTOC">noverbose</span></p>
</li>
<li class="FlagTOC">
<p><span class="flagTOC">nowarnings</span></p>
</li>
<li class="FlagTOC">
<p><span class="flagTOC">proclist={&lt;</span><span class="flagTOC" style="font-style: italic;"><i>proc-list</i></span><span class="flagTOC">&gt;}</span></p>
</li>
<li class="FlagTOC">
<p><span class="flagTOC">respect</span></p>

</li>
<li class="FlagTOC">
<p><span class="flagTOC">verbose</span></p>
</li>
<li class="FlagTOC">
<p><span class="flagTOC">warnings</span></p>
</li>
</ul>
</td>
</tr>
<tr class="FlagTOC" valign="top">
<td colspan="1" rowspan="1" class="flagTOC" width="15%">
<p><span class="flagTOC"><a href="#Affinity_Types">type</a></span></p>
</td>
<td colspan="1" rowspan="1">
<p><span class="flagTOC">none</span></p>
</td>
<td colspan="1" rowspan="1">
<p><span>Required string. Indicates the thread affinity to use.</span></p>
<ul class="flagTOC" type="disc">
<li class="FlagTOC">
<p><span class="flagTOC">compact</span></p>

</li>
<li class="FlagTOC">
<p><span class="flagTOC">disabled</span></p>
</li>
<li class="FlagTOC">
<p><span class="flagTOC">explicit</span></p>
</li>
<li class="FlagTOC">
<p><span class="flagTOC">none</span></p>
</li>
<li class="FlagTOC">
<p><span class="flagTOC">scatter</span></p>
</li>

<li class="FlagTOC">
<p><span class="flagTOC">logical</span> (deprecated; instead use <span class="flagTOC">compact</span>, but omit any <span class="flagTOC">permute value</span>)</p>
</li>
<li class="flagTOC">
<p><span class="flagTOC">physical</span> (deprecated; instead use <span class="flagTOC">scatter,</span> possibly with an <span class="flagTOC">offset value</span>)</p>

</li>
</ul>
<p>The <span class="flagTOC">logical</span> and <span class="flagTOC">physical</span> types are <a href="#Deprecated_Types">deprecated</a> but supported for backward compatibility.</p>
</td>
</tr>
<tr class="flagTOC" valign="top">
<td colspan="1" rowspan="1" class="flagTOC" width="15%">

<p><span class="flagTOC"><a href="#permute_and_offset_combinations_with_type">permute</a></span></p>
</td>
<td colspan="1" rowspan="1">
<p><span class="flagTOC">0</span></p>
</td>
<td colspan="1" rowspan="1">Optional. Positive integer value. Not valid with type values of <span class="flagTOC">explicit</span>, <span class="flagTOC">none</span>, or <span class="flagTOC">disabled</span>.</td>
</tr>
<tr class="flagTOC" valign="top">

<td colspan="1" rowspan="1" class="flagTOC" width="15%">
<p><span class="flagTOC"><a href="#permute_and_offset_combinations_with_type">offset</a></span></p>
</td>
<td colspan="1" rowspan="1">
<p><span class="flagTOC">0</span></p>
</td>
<td colspan="1" rowspan="1">
<p>Optional. Positive integer value. Not valid with type values of <span class="flagTOC">explicit</span>, <span class="flagTOC">none</span>, or <span class="flagTOC">disabled</span>.</p>

</td>
</tr>
</tbody></table>
<h3><a name="Affinity_Types"></a>Affinity Types</h3>
<p><span>Type is the only required argument.</span></p>
<h4><span>t</span>ype = none (default)</h4>
<p>Does not bind OpenMP threads to particular thread contexts; however, if the operating system supports affinity, the compiler still uses the OpenMP thread affinity interface to determine machine topology. Specify <span class="flagTOC">KMP_AFFINITY=verbose,none</span> to list a machine topology map.</p>
<h4><span>type = compact</span></h4>

<p>Specifying <span class="flagTOC">compact</span> assigns the OpenMP thread &lt;<span style="font-style: italic;"><i>n</i></span>&gt;+1 to a free thread context as close as possible to the thread context where the &lt;<span style="font-style: italic;"><i>n</i></span>&gt; OpenMP thread was placed. For example, in a topology map, the nearer a node is to the root, the more significance the node has when sorting the threads.</p>
<h4>type = disabled</h4>
<p>Specifying <span class="flagTOC">disabled</span> completely disables the thread affinity interfaces. This forces the OpenMP run-time library to behave as if the affinity interface was not supported by the operating system. This includes the low-level API interfaces such as <span class="flagTOC">kmp_set_affinity</span> and <span class="flagTOC">kmp_get_affinity</span>, which have no effect and will return a nonzero error code.</p>

<h4>type = explicit</h4>
<p>Specifying <span class="flagTOC">explicit</span> assigns OpenMP threads to a list of OS proc IDs that have been explicitly specified by using the proclist= modifier, which is required for this affinity type. </p>
<h4><span>type = scatter</span></h4>
<p>Specifying <span class="flagTOC">scatter</span> distributes the threads as evenly as possible across the entire system. <span class="flagTOC">scatter</span> is the opposite of <span class="flagTOC">compact</span>; so the leaves of the node are most significant when sorting through the machine topology map.</p>

<h3><a name="Deprecated_Types"></a>Deprecated Types: logical and physical</h3>
<p>Types <span class="flagTOC">logical</span> and <span class="flagTOC">physical</span> are deprecated and may become unsupported in a future release. Both are supported for backward compatibility.</p>
<p>For <span class="flagTOC">logical</span> and <span class="flagTOC">physical</span> affinity types, a single trailing integer is interpreted as an <span class="flagTOC">offset</span> specifier instead of a <span class="flagTOC">permute</span> specifier. In contrast, with <span class="flagTOC">compact</span> and <span class="flagTOC">scatter</span> types, a single trailing integer is interpreted as a <span class="flagTOC">permute</span> specifier.</p>
<p>Specifying <span class="flagTOC">logical</span> assigns OpenMP threads to consecutive logical processors, which are also called hardware thread contexts. The type is equivalent to <span class="flagTOC">compact</span>, except that the <span class="flagTOC">permute</span> specifier is not allowed. Thus, <span class="flagTOC">KMP_AFFINITY=logical,</span><span class="flagTOC" style="font-style: italic;"><i>n</i></span> is equivalent to <span class="flagTOC">KMP_AFFINITY=compact,0,</span><span class="flagTOC" style="font-style: italic;"><i>n</i></span> &nbsp;(this equivalence is true regardless of the whether or not a &nbsp;<span class="flagTOC">granularity=fine</span> modifier is present).</p>
<h3><a name="permute_and_offset_combinations_with_type"></a>Permute and offset combinations</h3>
<p>For both <span class="flagTOC">compact</span> and <span class="flagTOC">scatter</span>, <span class="flagTOC">permute</span> and <span class="flagTOC">offset</span> are allowed; however, if you specify only one integer, the compiler interprets the value as a permute specifier. Both <span class="flagTOC">permute</span> and <span class="flagTOC">offset</span> default to 0. &nbsp;</p>

<p>The <span class="flagTOC">permute</span> specifier controls which levels are most significant when sorting the machine topology map. A value for permute forces the mappings to make the specified number of most significant levels of the sort the least significant, and it inverts the order of significance. The root node of the tree is not considered a separate level for the sort operations.</p>
<p>The <span class="flagTOC">offset</span> specifier indicates the starting position for thread assignment.</p>             
<h3><a name="Modifier"></a>Modifier Values for Affinity Types</h3>
<p>Modifiers are optional arguments that precede type. If you do not specify a modifier, the <span class="flagTOC">noverbose</span>, <span class="flagTOC">respect</span>, and <span class="flagTOC">granularity=core</span> modifiers are used automatically.</p>
<p>Modifiers are interpreted in order from left to right, and can negate each other. For example, specifying <span class="flagTOC">KMP_AFFINITY=verbose,noverbose,scatter</span> is therefore equivalent to setting <span class="flagTOC">KMP_AFFINITY=noverbose,scatter</span>, or just <span class="flagTOC">KMP_AFFINITY=scatter</span>.</p>

<h4>modifier = noverbose (default)</h4>
<p>Does not print verbose messages.</p>
<h4><span>modifier = verbose</span></h4>
<p>Prints messages concerning the supported affinity. The messages include information about the number of packages, number of cores in each package, number of thread contexts for each core, and OpenMP thread bindings to physical thread contexts.</p>
<p>Information about binding OpenMP threads to physical thread contexts is indirectly shown in the form of the mappings between hardware thread contexts and the operating system (OS) processor (proc) IDs. The affinity mask for each OpenMP thread is printed as a set of OS processor IDs.</p>
</p>
<li class="FlagName">
             <p><b><font color=blue>KMP_LIBRARY</font> </b></p>
             <p>
             KMP_LIBRARY  =  { throughput | turnaround | serial }, 
             Selects the OpenMP run-time library execution mode. 
             The options for the variable value are throughput, turnaround, and serial.
<h3><a name="mode"></a>Execution modes</h3>

<p>The compiler with OpenMP enables you to run an application under different 
 execution modes that can be specified at run time. The libraries support 
 the serial, turnaround, and throughput modes. </p>

<h4>Serial</h4>

<p>The serial mode forces parallel applications to run on a single processor.</p>

<h4>Turnaround</h4>

<p>In a dedicated (batch or single user) parallel environment where all 
 processors are exclusively allocated to the program for its entire run, 
 it is most important to effectively utilize all of the processors all 
 of the time. The turnaround mode is designed to keep active all of the 
 processors involved in the parallel computation in order to minimize the 
 execution time of a single job. In this mode, the worker threads actively 
 wait for more parallel work, without yielding to other threads.</p>


<p>Avoid over-allocating system resources. This 
 occurs if either too many threads have been specified, or if too few processors 
 are available at run time. If system resources are over-allocated, this 
 mode will cause poor performance. The throughput mode should be used instead 
 if this occurs.</p>

<h4>Throughput</h4>

<p>In a multi-user environment where the load on the parallel machine is 
 not constant or where the job stream is not predictable, it may be better 
 to design and tune for throughput. This minimizes the total time to run 
 multiple jobs simultaneously. In this mode, the worker threads will yield 
 to other threads while waiting for more parallel work.</p>

<p>The throughput mode is designed to make the program aware of its environment 
 (that is, the system load) and to adjust its resource usage to produce 
 efficient execution in a dynamic environment. This mode is the default.</p>    		 </p>
</li>
<li class="FlagName">
             <p><b><font color=blue>KMP_BLOCKTIME</font> </b></p>
             <p> KMP_BLOCKTIME = value.
                 Sets the time, in milliseconds, that a thread should wait, after completing 
                 the execution of a parallel region, before sleeping.Use the optional 
                 character suffixes: s (seconds), m (minutes), h (hours), or d (days) 
                 to specify the units.Specify infinite for an unlimited wait time.
		 </p>
</li>
<li class="FlagName">
             <p><b><font color=blue>KMP_STACKSIZE</font> </b></p>
             <p> KMP_STACKSIZE = value.
                 Sets the number of bytes to allocate for each OpenMP* thread 
                 to use as the private stack for the thread.
                 Recommended size is 16m.
                 Use the optional suffixes: b (bytes), k (kilobytes), m (megabytes), 
                 g (gigabytes), or t (terabytes) to specify the units.
                 This variable does not affect the native operating system threads 
                 created by the user program nor the thread executing the sequential 
                 part of an OpenMP* program or parallel programs created using -parallel.
		 </p>

</li>
<li class="FlagName">
         <p><b><font color=blue>OMP_NUM_THREADS</font> </b></p>
             <p>
		      Sets the maximum number of threads to use for OpenMP* parallel regions if no 
              other value is specified in the application. This environment variable 
              applies to both -openmp and -parallel.
              Example syntax on a Linux system with 8 cores:
              export OMP_NUM_THREADS=8
             </p>
</li>
<li class="FlagName">
         <p><b><font color=blue>OMP_DYNAMIC</font> </b></p>
             <p>
              OMP_DYNAMIC={ 1 | 0 } 
              Enables (1, true) or disables (0,false) the dynamic adjustment of the number of threads.
             </p>
</li>
<li class="FlagName">
         <p><b><font color=blue>OMP_SCHEDULE</font> </b></p>
             <p>
              OMP_SCHEDULE={ type,[chunk size]} 
              Controls the scheduling of the for-loop work-sharing construct.
              type can be either of static,dynamic,guided,runtime 
              chunk size should be positive integer
             </p>
</li>
<li class="FlagName">
         <p><b><font color=blue>OMP_NESTED</font> </b></p>
             <p>
              OMP_NESTED={ 1 | 0 } 
              Enables creation of new teams in case of nested parallel regions (1,true) or serializes (0,false) all nested parallel regions. Default is 0.
             </p>
</li>

  ]]> 
</sw_environment>
<header>
<![CDATA[
<p style="text-align: left; color: red; font-size: larger; background-color: black">
 Copyright &copy; Intel Corporation.  All Rights Reserved.</p>
]]>
</header>
<!--
******************************************************************************************************
* Compilers
******************************************************************************************************
-->

<flag name="intel_icc_64bit" class="compiler" regexp="\/home\/.*\/Linux64\/.*icc(?=\s|$)">

   <![CDATA[
      <p>Invoke the Intel C/C++ compiler for Intel 64 applications </p>
   ]]>

</flag>


<flag name="intel_icc_32bit" class="compiler" regexp="\/home\/.*\/Linux32\/.*icc(?=\s|$)">

   <![CDATA[
      <p>Invoke the Intel C/C++ compiler for 32-bit applications </p>
   ]]>

</flag>


<flag name="intel_icc" class="compiler" regexp="icc(?=\s|$)">

   <![CDATA[
      <p> Invoke the Intel C compiler for IA32 applications.</p>
      <p> You need binutils 2.16.91.0.7 or later with this compiler to support new instructions on Intel Core 2 processors </p>
   ]]>

</flag>


<flag name="intel_icpc" class="compiler" regexp="(?:/\S+/)?icpc(?=\s|$)">

   <![CDATA[
      <p> Invoke the Intel C++ compiler for IA32 and Intel 64 applications.</p>
      <p> You need binutils 2.16.91.0.7 or later with this compiler to support new instructions on Intel Core 2 processors </p>
   ]]>

</flag>


<flag name="intel_ifort" class="compiler" regexp="(?:/\S+/)?ifort(?=\s|$)">
   <![CDATA[
      <p> Invoke the Intel Fortran compiler Classic for IA32 and Intel 64 applications.</p>
      <p> You need binutils 2.16.91.0.7 or later with this compiler to support new instructions on Intel Core 2 processors </p>
   ]]>

</flag>






<flag name="intel_icx" class="compiler" regexp="icx(?=\s|$)">

   <![CDATA[
      <p> Invoke the Intel oneAPI DPC++/C++ compiler and runtime environment.</p>
      <p> The Intel® oneAPI DPC++/C++ Compiler can be found in the Intel® oneAPI Base Toolkit, Intel® oneAPI HPC Toolkit, Intel® oneAPI IoT Toolkit, or as a standalone compiler. More information and specifications can be found on the Intel® oneAPI DPC++/C++ Compiler main page. </p>
   ]]>

</flag>


<flag name="intel_icpx" class="compiler" regexp="(?:/\S+/)?icpx(?=\s|$)">

   <![CDATA[
      <p> Invoke the Intel oneAPI DPC++/C++ compiler and runtime environment.</p>
      <p> The Intel® oneAPI DPC++/C++ Compiler can be found in the Intel® oneAPI Base Toolkit, Intel® oneAPI HPC Toolkit, Intel® oneAPI IoT Toolkit, or as a standalone compiler. More information and specifications can be found on the Intel® oneAPI DPC++/C++ Compiler main page. </p>
   ]]>

</flag>


<flag name="intel_ifx" class="compiler" regexp="(?:/\S+/)?ifx(?=\s|$)">
   <![CDATA[
      <p> Invoke the Intel Fortran Compiler (Beta), it a new compiler based on the Intel Fortran Compiler Classic (ifort) frontend and runtime libraries, using LLVM backend technology.</p>
      <p> ifx does not support 32-bit target.</p>
	  <p> The Intel® Fortran Compiler (Beta) (ifx) can be found in the Intel® oneAPI Base Toolkit, Intel® oneAPI HPC Toolkit, Intel® oneAPI IoT Toolkit, or as a standalone compiler.  For more information, see Introducing the Intel® Fortran Compiler Classic and Intel® Fortran Compiler (Beta).</p>
   ]]>

</flag>










<flag name="intel64_c_compiler_include_path" class="compiler" regexp="(?:/\S+/)?-I\/home\/.*\/Linux64\/include">
         	 Compiler option to set the path for include files.
         	 Used in some integer peak benchmarks which were built using the Intel 64-bit C++ compiler.
</flag>


<flag name="intel64_c_compiler_library_path" class="compiler" regexp="(?:/\S+/)?-L\/home\/.*\/Linux64\/lib">
                 Compiler option to set the path for library files.
         	 Used in some integer peak benchmarks which were built using the Intel 64-bit C++ compiler.
</flag>


<flag name="ia32_c_compiler_include_path" class="compiler" regexp="(?:/\S+/)?-I\/home\/.*\/Linux32\/include">
         	 Compiler option to set the path for include files.
         	 Used in some peak benchmarks which were built using the Intel 32-bit C++ compiler.
</flag>


<flag name="ia32_c_compiler_library_path" class="compiler" regexp="(?:/\S+/)?-L\/home\/.*\/Linux32\/lib">
                 Compiler option to set the path for library files.
         	 Used in some integer peak benchmarks which were built using the Intel 32-bit C++ compiler.
</flag>


<flag name="ia32_f_compiler_include_path" class="compiler" regexp="(?:/\S+/)?-I\/home\/.*\/Linux32\/include">
         	 Compiler option to set the path for include files.
         	 Used in some peak benchmarks which were built using the Intel 32-bit Fortran compiler.
</flag>


<flag name="ia32_f_compiler_library_path" class="compiler" regexp="(?:/\S+/)?-L\/home\/.*\/Linux32\/lib">
                 Compiler option to set the path for library files.
         	 Used in some integer peak benchmarks which were built using the Intel 32-bit Fortran compiler.
</flag>


<!--
******************************************************************************************************
* Portability
******************************************************************************************************
-->
<flag name="mpich_ignore_cxx_seek" class="portability" regexp="(?:/\S+/)?-DMPICH_IGNORE_CXX_SEEK(?=\s|$)">

   <![CDATA[
      <p>Define the MPICH_IGNORE_CXX_SEEK macro at compilation stage to catastrophic error: "SEEK_SET is #defined but must not be for the C++ binding of MPI" when compiling C++ MPI application.</p>
   ]]>

</flag>


<flag name="lowercase_routine_name" class="portability" regexp="(?:/\S+/)?-Qlowercase(?=\s|$)">

   <![CDATA[
      <p>For mixed-language benchmarks, tell the compiler to convert routine names to lowercase for compatibility</p>
   ]]>

</flag>


<flag name="add-underscore_to_routine_name" class="portability" regexp="(?:/\S+/)?\/assume\:underscore(?=\s|$)">

   <![CDATA[
      <p>For mixed-language benchmarks, tell the compiler to assume that routine names end with an underscore</p>
   ]]>

</flag>


<flag name="assume_cplusplus_sources" class="portability" regexp="(?:/\S+/)?-TP(?=\s|$)">
      Tell the compiler to treat source files as C++ regardless of the file extension
</flag>

<!--
******************************************************************************************************
* Optimizations
******************************************************************************************************
-->

<flag name="f-O1" class="optimization" regexp="-O1(?=\s|$)">
      
    <![CDATA[
        <p>Enables optimizations for speed and disables some optimizations that <br /> increase code size and affect speed. <br /> To limit code size, this option: <br />
        	- Enables global optimization; this includes data-flow analysis,code motion, strength reduction and test replacement, split-lifetime analysis, and instruction scheduling. <br />
         	- Disables intrinsic recognition and intrinsics inlining. <br />

         The O1 option may improve performance for applications with very large code size, many branches, and execution time not dominated by code within loops. <br />
         
         On IA-32 Windows platforms, -O1 sets the following:</p>
         <p style="margin-left: 25px">
         /Qunroll0, /Oi-, /Op-, /Oy, /Gy, /Os, /GF (/Qvc7 and above), 
         /Gf (/Qvc6 and below), /Ob2, and /Og</p>
   ]]>

   <include flag="f-unroll_n"/>
   <include flag="f-Oi-"/>
   <include flag="f-Op-"/>
   <include flag="f-Oy"/>
   <include flag="f-Gy"/>
   <include flag="f-Os"/>
   <include flag="f-GF"/>
   <include flag="f-Gf"/>
   <include flag="f-Ob_n"/>
   <include flag="f-Og"/>
   <include flag="f-Ofast"/>
   
</flag>


<flag name="f-O2" class="optimization" regexp="-O2(?=\s|$)">

   <![CDATA[
      <p>Enables optimizations for speed. This is the generally recommended 
      optimization level. This option also enables: <br />
      - Inlining of intrinsics<br />
      - Intra-file interprocedural optimizations, which include: <br />
        - inlining<br />
        - constant propagation<br />
        - forward substitution<br />
        - routine attribute propagation<br />
        - variable address-taken analysis<br />
        - dead static function elimination<br />
        - removal of unreferenced variables<br />
        - The following capabilities for performance gain: <br /> 
        - constant propagation<br />
        - copy propagation<br />
        - dead-code elimination<br />
        - global register allocation<br />
        - global instruction scheduling and control speculation<br />
        - loop unrolling<br />
        - optimized code selection<br />
        - partial redundancy elimination<br />
        - strength reduction/induction variable simplification<br />
        - variable renaming<br />
        - exception handling optimizations<br />
        - tail recursions<br />
        - peephole optimizations<br />
        - structure assignment lowering and optimizations<br />
        - dead store elimination<br />
      </p>

      <p>On IA-32 Windows platforms, -O2 sets the following:</p>
         <p style="margin-left: 25px">
         /Og, /Oi-, /Os, /Oy, /Ob2, /GF (/Qvc7 and above), /Gf (/Qvc6 
         and below), /Gs, and /Gy.</p>
   ]]> 

   <include flag="f-Oi-"/>
   <include flag="f-Gs"/>
   <include flag="f-Oy"/>
   <include flag="f-Gy"/>
   <include flag="f-Os"/>
   <include flag="f-GF"/>
   <include flag="f-Gf"/>
   <include flag="f-Ob_n"/>
   <include flag="f-Og"/>
   <include flag="f-O1"/> 
   <include flag="f-Ofast"/>
</flag>


<flag name="f-O3" class="optimization" regexp="-O3(?=\s|$)">

   <![CDATA[
      <p>Enables O2 optimizations plus more aggressive optimizations, 
         such as prefetching, scalar replacement, and loop and memory 
         access transformations. Enables optimizations for maximum speed,   
         such as: <br />
         - Loop unrolling, including instruction scheduling<br />
         - Code replication to eliminate branches<br />
         - Padding the size of certain power-of-two arrays to allow 
           more efficient cache use.<br />
         On IA-32 and Intel EM64T processors, when O3 is used with options 
         -ax or -x (Linux) or with options /Qax or /Qx (Windows), the compiler 
         performs more aggressive data dependency analysis than for O2, which 
         may result in longer compilation times. <br />
         The O3 optimizations may not cause higher performance unless loop and 
         memory access transformations take place. The optimizations may slow 
         down code in some cases compared to O2 optimizations.  <br />
         The O3 option is recommended for applications that have loops that heavily 
         use floating-point calculations and process large data sets. On IA-32 
         Windows platforms, -O3 sets the following:</p>
         <p style="margin-left: 25px">
         /GF (/Qvc7 and above), /Gf (/Qvc6 and below), and /Ob2</p>
   ]]> 

   <include flag="f-GF"/>
   <include flag="f-Gf"/>
   <include flag="f-Ob_n"/>
   <include flag="f-O2"/>
   <include flag="f-Ofast"/>
</flag>

<flag name="f-Ofast" class="optimization" regexp="-Ofast(?=\s|$)">

   <![CDATA[
      <p>Sets certain aggressive options to improve the speed of your application.</p>
   ]]> 

</flag>


<flag name="f-Oi-" class="optimization" regexp="-Oi-">
      Disables inline expansion of all intrinsic functions. 
</flag>


<flag name="f-Op-" class="optimization" regexp="-Op-(?=\s|$)">

   <![CDATA[
      <p>Disables conformance to the ANSI C and IEEE 754 standards for 
      floating-point arithmetic.</p>
   ]]> 
 
</flag>


<flag name="f-Oy" class="optimization" regexp="-Oy(?=\s|$)">
      Allows use of EBP as a general-purpose register in optimizations.  
</flag>

<flag name="f-Os" class="optimization" regexp="-Os(?=\s|$)">

   <![CDATA[
      <p>This option enables most speed optimizations, but disables some 
      that increase code size for a small speed benefit.</p>
   ]]> 
  
</flag>

<flag name="f-Og" class="optimization" regexp="-Og(?=\s|$)">
      This option enables global optimizations.  
</flag>

<flag name="f-Ob_n" class="optimization" regexp="-Ob(0|1|2)(?=\s|$)">

   <![CDATA[
      <p>Specifies the level of inline function expansion.</p>
         
         <p style="text-indent: -45px;margin-left: 45px">
         Ob0 - Disables inlining of user-defined functions. Note that 
               statement functions are always inlined.</p>
         <p style="text-indent: -45px;margin-left: 45px">
         Ob1 - Enables inlining when an inline keyword or an inline 
               attribute is specified. Also enables inlining according 
               to the C++ language.</p>
         <p style="text-indent: -45px;margin-left: 45px">
         Ob2 - Enables inlining of any function at the compiler's 
               discretion. </p>
   ]]> 
  
</flag>

<flag name="f-Gy" class="optimization" regexp="-Gy(?=\s|$)">

   <![CDATA[
      <p>This option tells the compiler to separate functions into COMDATs 
      for the linker.</p>
   ]]> 
     
</flag>


<flag name="f-GF" class="optimization" regexp="-GF(?=\s|$)">
      This option enables read only string-pooling optimization.   
</flag>


<flag name="f-Gf" class="optimization" regexp="-Gf(?=\s|$)">
      This option enables read/write string-pooling optimization.    
</flag>


<flag name="f-Gs" class="optimization" regexp="-Gs(?=\s|$)">

   <![CDATA[
      <p>This option disables stack-checking for routines with 4096 bytes 
      of local variables and compiler temporaries.</p>
   ]]> 
     
</flag>





<flag name="f-unroll_n" class="optimization" regexp="-unroll\d+(?=\s|$)">
      Tells the compiler the maximum number of times to unroll loops. 
</flag>


<flag name="f-FR" class="portability" regexp="-(FR|free|nofixed)(?=\s|$)">
specify source files are in free format. Same as -FR. -nofree indicates fixed format
</flag>


<flag name="f-FI" class="portability" regexp="-(FI|fixed|nofree)(?=\s|$)">
specify source files are in fixed format. Same as -FI. -nofixed indicates free format
</flag>


<flag name="f-ip" class="optimization" regexp="-ip(?=\s|$)">
This option enables additional interprocedural optimizations for single 
file compilation. These optimizations are a subset of full intra-file 
interprocedural optimizations. One of these optimizations enables the 
compiler to perform inline function expansion for calls to functions 
defined within the current source file.
</flag>


<flag name="f-ipo" class="optimization" regexp="-ipo(\s|[0-9]|$)">
	Enables interprocedural optimization between files.
	Arguments:
	n
	Is an optional integer that specifies the number of object files the compiler should create. The integer must be greater than or equal to 0.
   <![CDATA[
      <p>-ipo[n]<br />
         Multi-file ip optimizations that includes:<br />
       - inline function expansion<br />
       - interprocedural constant propogation<br />
       - dead code elimination<br />
       - propagation of function characteristics<br />
       - passing arguments in registers<br />
       - loop-invariant code motion<br />
       (n - number of multi-file objects)
     </p>
   ]]> 
</flag>


<flag name="f-auto-ilp32" class="optimization" regexp="-auto-ilp32(?=\s|$)">
   <![CDATA[
<p>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. </p>

<p>This option requires that the size of the program executable never exceeds 2^32 bytes and all 
data values can be represented within 32 bits. If the program can run correctly in a 32-bit system, 
these requirements are implicitly satisfied. If the program violates these size restrictions, 
unpredictable behavior might occur.</p>
   ]]> 
</flag>


<flag name="f-noformain" class="portability" regexp="-nofor_main(?=\s|$)">
   <![CDATA[
<p>This option specifies that the main program is not written in Fortran. 
It is a link-time option that prevents the compiler from linking for_main.o 
into applications. </p>

<p>For example, if the main program is written in C and calls a Fortran subprogram, 
specify -nofor-main when compiling the program with the ifort command. 
If you omit this option, the main program must be a Fortran program.</p>
   ]]> 
</flag>


<flag name="f-disablescalarrep" class="optimization" regexp="-scalar-rep-">
   <![CDATA[
<p> -scalar-rep enables scalar replacement performed during loop transformation. 
To use this option, you must also specify O3. -scalar-rep- disables this optimization. </p>
   ]]> 
</flag>


<flag name="f-no-alias" class="optimization" regexp="-fno-alias(?=\s|$)">
   <![CDATA[
<p> This options tells the compiler to assume no aliasing in the program. </p>
   ]]> 
</flag>


<flag name="f-fp-model" class="optimization" regexp="-fp-model\s(except|no\-except|fast\=(1|2)|precise|source|strict|double|extended)(?=\s|$)">
   <![CDATA[
<p>           enable <name> floating point model variation<br />
            [no-]except - enable/disable floating point semantics<br />
            fast[=1|2]  - enables more aggressive floating point optimizations<br />
            precise     - allows value-safe optimizations<br />
            source      - enables intermediates in source precision<br />
            strict      - enables -fp-model precise -fp-model except, disables<br />
                          contractions and enables pragma stdc fenv_access<br />
            double      - rounds intermediates in 53-bit (double) precision<br />
            extended    - rounds intermediates in 64-bit (extended) precision<br />
 </p>
   ]]> 
</flag>


<flag name="f-align" class="optimization" regexp="-align\s(all|none|(no)(d|q|z)commons|rec(1|2|4|16|32)byte|array(8|16|32|64|128|256)byte|records|sequence)(?=\s|$)">
   <![CDATA[
<p>                   specify how data items are aligned <br />
            keywords: all (same as -align), none (same as -noalign), <br />
                      [no]commons, [no]dcommons, <br />
                      [no]qcommons, [no]zcommons, <br />
                      rec1byte, rec2byte, rec4byte,  <br />
                      rec8byte, rec16byte, rec32byte, <br />
                      array8byte, array16byte, array32byte, <br />
                      array64byte, array128byte, array256byte, <br />
                      [no]records, [no]sequence <br />

 </p>
   ]]> 
</flag>


<flag name="f-fast" class="optimization" regexp="-fast(?=\s|$)">

   <![CDATA[
      <p>The -fast option enhances execution speed across the entire program 
      by including the following options that can improve run-time performance:</p>

      <p style="text-indent: -45px;margin-left: 45px">
      -O3&nbsp;&nbsp;&nbsp;(maximum speed and high-level optimizations)</p>
      <p style="text-indent: -45px;margin-left: 45px"> 
      -ipo&nbsp;(enables interprocedural optimizations across files)</p>
      <p style="text-indent: -45px;margin-left: 45px">  
      -xT&nbsp;&nbsp;(generate code specialized for Intel(R) Core(TM)2 Duo processors, Intel(R) Core(TM)2 Quad processors 
                      and  Intel(R) Xeon(R) processors with SSSE3)</p>
      <p style="text-indent: -45px;margin-left: 45px"> 
      -static&nbsp;(disable -prec-div)
             Statically link in libraries at link time</p>
      <p style="text-indent: -45px;margin-left: 45px"> 
      -no-prec-div&nbsp;(disable -prec-div)
             where -prec-div improves precision of FP divides (some speed impact)</p>
   
      <p>To override one of the options set by /fast, specify that option after the 
      -fast option on the command line. The exception is the xT or QxT option
      which can't be overridden. The options set by /fast may change from 
      release to release.</p>
   ]]> 

   <include flag="f-O3"/>
   <include flag="f-ipo"/>
   <include flag="f-xT"/>
   <include flag="f-static"/>
   <include flag="f-no-prec-div"/>
</flag>


<flag name="f-static" class="optimization" regexp="-static(?=\s|$)">
         	 Compiler option to statically link in libraries at link time
</flag>


<flag name="f-static-intel" class="optimization" regexp="-static-intel(?=\s|$)">
         	 Link Intel provided libraries statically
</flag>


<flag name="f-shared-intel" class="optimization" regexp="-shared-intel(?=\s|$)">
         	 Link Intel provided libraries dynamically
</flag>


<flag name="f-mcmodel" class="portability" regexp="-mcmodel\=(small|medium|large)(?=\s|$)">
   <![CDATA[
<p>-mcmodel=&lt;size&gt<br />
          use a specific memory model to generate code and store data<br />
          small  - Restricts code and  data to the first 2GB of address space (DEFAULT)<br />
          medium - Restricts code to the first 2GB; it places no memory restriction on data<br />
          large  - Places no memory restriction on code or data<br />
</p>
   ]]> 
</flag>


<flag name="f-std" class="portability" regexp="-std\=(c99|c\+\+11|c\+\+0x)(?=\s|$)">
   <![CDATA[
<p>  
        enable language support for <std>, as described below<br />
            c99   enable C99 support for C programs<br />
            c++11 enable C++11 experimental support for C++ programs<br />
            c++0x same as c++11<br />
</p>
   ]]> 
</flag>


<flag name="f-D" class="compiler" regexp="-D.*(?=\s|$)">
        Defines a macro
</flag>


<flag name="f-xHOST" class="optimization" regexp="-xHOST(?=\s|$)">

   <![CDATA[

      <p>Generate instructions for the highest instruction set and processor
          available on the compilation host machine. </p>

   ]]>

</flag>


<flag name="f-xT" class="optimization" regexp="-xT(?=\s|$)">

   <![CDATA[

      <p>Code is optimized for Intel(R) Core(TM)2 Duo processors, Intel(R) Core(TM)2 Quad 
      processors and Intel(R) Xeon(R) processors with SSSE3. 
      The resulting code may contain unconditional use of features that are not supported 
      on other processors. This option also enables new optimizations in addition to 
      Intel processor-specific optimizations including advanced data layout and code 
      restructuring optimizations to improve memory accesses for Intel processors.</p>

      <p> Do not use this option if you are executing a program on a processor that 
      is not an Intel processor. If you use this option on a non-compatible processor 
      to compile the main program (in Fortran) or the function main() in C/C++, the 
      program will display a fatal run-time error if they are executed on unsupported 
      processors. </p>

   ]]> 

</flag>


<flag name="f-xAVX" class="optimization" regexp="-xAVX(?=\s|$)">

   <![CDATA[

      <p>Code is optimized for Intel(R) processors with support for AVX instructions.
      The resulting code may contain unconditional use of features that are not supported
      on other processors. This option also enables new optimizations in addition to
      Intel processor-specific optimizations including advanced data layout and code
      restructuring optimizations to improve memory accesses for Intel processors.</p>

      <p> Do not use this option if you are executing a program on a processor that
      is not an Intel processor. If you use this option on a non-compatible processor
      to compile the main program (in Fortran) or the function main() in C/C++, the
      program will display a fatal run-time error if they are executed on unsupported
      processors. </p>

   ]]>

</flag>


<flag name="f-xCORE-AVX-I" class="optimization" regexp="-xCORE-AVX-I(?=\s|$)">

   <![CDATA[

      <p>Code is optimized for Intel(R) processors with support for AVX instructions.
      The resulting code may contain unconditional use of features that are not supported
      on other processors. This option also enables new optimizations in addition to
      Intel processor-specific optimizations including advanced data layout and code
      restructuring optimizations to improve memory accesses for Intel processors.</p>

      <p> Do not use this option if you are executing a program on a processor that
      is not an Intel processor. If you use this option on a non-compatible processor
      to compile the main program (in Fortran) or the function main() in C/C++, the
      program will display a fatal run-time error if they are executed on unsupported
      processors. </p>

   ]]>

</flag>


<flag name="f-xCORE-AVX2" class="optimization" regexp="-xCORE-AVX2(?=\s|$)">

   <![CDATA[

      <p>Code is optimized for Intel(R) processors with support for AVX2 instructions.
      The resulting code may contain unconditional use of features that are not supported
      on other processors. This option also enables new optimizations in addition to
      Intel processor-specific optimizations including advanced data layout and code
      restructuring optimizations to improve memory accesses for Intel processors.</p>

      <p> Do not use this option if you are executing a program on a processor that
      is not an Intel processor. If you use this option on a non-compatible processor
      to compile the main program (in Fortran) or the function main() in C/C++, the
      program will display a fatal run-time error if they are executed on unsupported
      processors. </p>

   ]]>

</flag>


<flag name="f-xCORE-AVX512" class="optimization" regexp="-xCORE-AVX512(?=\s|$)">

   <![CDATA[

      <p>Code is optimized for Intel(R) processors with support for AVX512 instructions.
      The resulting code may contain unconditional use of features that are not supported
      on other processors. This option also enables new optimizations in addition to
      Intel processor-specific optimizations including advanced data layout and code
      restructuring optimizations to improve memory accesses for Intel processors.</p>

      <p> Do not use this option if you are executing a program on a processor that
      is not an Intel processor. If you use this option on a non-compatible processor
      to compile the main program (in Fortran) or the function main() in C/C++, the
      program will display a fatal run-time error if they are executed on unsupported
      processors. </p>

   ]]>

</flag>


<flag name="f-xCOMMON-AVX512" class="optimization" regexp="-xCOMMON-AVX512(?=\s|$)">

   <![CDATA[

      <p>May generate Intel(R) Advanced Vector Extensions 512 (Intel(R) AVX-512) 
	  Foundation instructions, Intel(R) AVX512 Conflict Detection instructions, as 
	  well as the instructions enabled with CORE-AVX2. Optimizes for Intel(R) 
	  processors that support Intel(R) AVX-512 instructions.</p>
   ]]>

</flag>


<flag name="f-xSSE42" class="optimization" regexp="-xSSE4.2(?=\s|$)">

   <![CDATA[

      <p>Code is optimized for Intel(R) processors with support for SSE 4.2 instructions.
      The resulting code may contain unconditional use of features that are not supported
      on other processors. This option also enables new optimizations in addition to
      Intel processor-specific optimizations including advanced data layout and code
      restructuring optimizations to improve memory accesses for Intel processors.</p>

      <p> Do not use this option if you are executing a program on a processor that
      is not an Intel processor. If you use this option on a non-compatible processor
      to compile the main program (in Fortran) or the function main() in C/C++, the
      program will display a fatal run-time error if they are executed on unsupported
      processors. </p>

   ]]>

</flag>


<flag name="f-xSSE41" class="optimization" regexp="-xSSE4.1(?=\s|$)">

   <![CDATA[

      <p>Code is optimized for Intel(R) processors with support for SSE 4.1 instructions.
      The resulting code may contain unconditional use of features that are not supported
      on other processors. This option also enables new optimizations in addition to
      Intel processor-specific optimizations including advanced data layout and code
      restructuring optimizations to improve memory accesses for Intel processors.</p>

      <p> Do not use this option if you are executing a program on a processor that
      is not an Intel processor. If you use this option on a non-compatible processor
      to compile the main program (in Fortran) or the function main() in C/C++, the
      program will display a fatal run-time error if they are executed on unsupported
      processors. </p>

   ]]>

</flag>


<flag name="f-xSSSE3" class="optimization" regexp="-xSSSE3(?=\s|$)">

   <![CDATA[

      <p>Code is optimized for Intel(R) processors with support for SSSE3 instructions.
      The resulting code may contain unconditional use of features that are not supported
      on other processors. This option also enables new optimizations in addition to
      Intel processor-specific optimizations including advanced data layout and code
      restructuring optimizations to improve memory accesses for Intel processors.</p>

      <p> Do not use this option if you are executing a program on a processor that
      is not an Intel processor. If you use this option on a non-compatible processor
      to compile the main program (in Fortran) or the function main() in C/C++, the
      program will display a fatal run-time error if they are executed on unsupported
      processors. </p>

   ]]>

</flag>


<flag name="f-QxB" class="optimization" regexp="-QxB(?=\s|$)">

    <![CDATA[       
      <p>Code is optimized for Intel Pentium M and compatible Intel processors. The 
      resulting code may contain unconditional use of features that are not supported 
      on other processors. This option also enables new optimizations in addition to 
      Intel processor-specific optimizations including advanced data layout and code 
      restructuring optimizations to improve memory accesses for Intel processors.</p>
     
      <p> Do not use this option if you are executing a program on a processor that 
      is not an Intel processor. If you use this option on a non-compatible processor 
      to compile the main program (in Fortran) or the function main() in C/C++, the 
      program will display a fatal run-time error if they are executed on unsupported 
      processors. </p>

    ]]> 
  
</flag>


<flag name="f-QxW" class="optimization" regexp="-QxW(?=\s|$)">

    <![CDATA[       
      <p>Code is optimized for Intel Pentium 4 and compatible Intel processors; 
      this is the default for Intel?EM64T systems. The resulting code may contain 
      unconditional use of features that are not supported on other processors. </p>
     
    ]]> 
  
</flag>


<flag name="f-parallel" class="optimization" regexp="-parallel(?=\s|$)">

    <![CDATA[       
      <p>Tells the auto-parallelizer to generate multithreaded code for loops that can be safely executed in parallel.
      To use this option, you must also specify option O2 or O3. The default numbers of threads spawned is equal to 
      the number of processors detected in the system where the binary is compiled. Can be changed by setting the 
      environment variable OMP_NUM_THREADS </p>
     
    ]]> 
  
</flag>


<flag name="f-libguide.lib" class="optimization" regexp="libguide.lib(?=\s|$)">

    <![CDATA[       
      <p>The use of -Qparallel to generate auto-parallelized code requires spport libraries that are 
      dynamically linked by default. Specifying libguide.lib on the link line, statically links in 
      libguide.lib to allow auto-parallelized binaries to work on systems which do not have the dynamic version 
      of this library installed.</p>
     
    ]]> 
  
</flag>


<flag name="f-libguide40.lib" class="optimization" regexp="libguide40.lib(?=\s|$)">

    <![CDATA[       
      <p>The use of -Qparallel to generate auto-parallelized code requires spport libraries that are 
      dynamically linked by default. Specifying libguide40.lib on the link line, statically links in 
      libguide40.lib to allow auto-parallelized binaries to work on systems which do not have the 
      dynamic version of this library installed.</p>
     
    ]]> 
  
</flag>


<flag name="f-archSSE2" class="optimization" regexp="-arch\:SSE2(?=\s|$)">

  <![CDATA[

      <p> Optimizes for Intel Pentium 4 and compatible processors with Streaming SIMD Extensions 2 (SSE2).

  ]]>

</flag>

<flag name="f-qopt-streaming-stores" class="optimization" regexp="-qopt-streaming-stores=(always|auto|never)(?=\s|$)(?=\s|$)">
	  Enables generation of streaming stores for optimization.
    <![CDATA[
	  <p>Specifies whether streaming stores are generated:</p>
      <p>always - enables generation of streaming stores under the assumption that the application is memory bound</p>
      <p>auto   - compiler decides when streaming stores are used (DEFAULT)</p>
      <p>never  - disables generation of streaming stores</p>
	  <p> Determines whethre the compiler assumes that there are no "large" integers being used or being computed inside loops.</p>
	]]>
</flag>


<flag name="f-qopt-zmm-usage" class="optimization" regexp="-qopt-zmm-usage=(high|low)(?=\s|$)">
	  Defines a level of zmm registers usage.
	<![CDATA[
	    <p> -qopt-zmm-usage=keywoard Specifies the level of zmm register usage. You can specify one of the following: </p>
		<p> low - Tells the compiler that the compiled program is unlikely to benefit from zmm register usage. It specifies that the compiler should avoid using zmm register unless it can prove the gain from their usage.</p>
		<p> high - Tells the compiler to generate zmm code without restrictions</p>
	]]>
</flag>


<flag name="f-qopt-prefetch" class="optimization" regexp="-qopt-prefetch=([0-5])(?=\s|$)">
	  Enables or disables prefetch insertion optimization.
    <![CDATA[
	    <p> Is the level of software prefetching optimization desired. Possible values are:</p>
		<p> 0 - Disable software prefetching.</p>
		<p> 1 to 5 - Enable different level of software prefetching. If you do not specify a valune tfor n, default is 2. Use lower values to reduce the amount prefetching.</p>
	]]>
</flag>



<flag name="f-qopt-malloc-options" class="optimization" regexp="-qopt-malloc-options=([0-4])(?=\s|$)">
	  Specify malloc configuration parameters. Specifying a non-zero value will cause alternate configuration parameters to be set for how malloc allocates and frees memory.
</flag>

<flag name="f-qopt-openmp-simd" class="optimization" regexp="-qopt-openmp-simd(?=\s|$)">
	  OpenMP* SIMD compilation is enabled if option O2 or higher is in effect.
	  OpenMP* SIMD compilation is always disabled at optimization levels of O1 or lower.
	  When option O2 or higher is in effect, OpenMP SIMD compilation can only be disabled by specifying option -qno-openmp-simd or /Qopenmp-simd-. It is not disabled by specifying option -qno-openmp or /Qopenmp-.
</flag>


<flag name="f-no-prec-div" class="optimization" regexp="-no-prec-div">
(disable/enable[default] -[no-]prec-div)
                
   <![CDATA[
      <p>-prec-div improves precision of floating-point divides. It has a slight 
impact on speed. -no-prec-div disables this option and enables 
optimizations that give slightly less precise results than full IEEE 
division.</p>
   ]]> 

</flag>


<flag name="f-no-prec-sqrt" class="optimization" regexp="-no-prec-sqrt">
(disable/enable[default] -[no-]prec-div)
                
   <![CDATA[
      <p>-prec-sqrt improves precision of floating-point square root. It has a slight 
impact on speed. -no-prec-sqrt disables this option and enables 
optimizations that give slightly less precise results than full IEEE 
division.</p>
   ]]> 

</flag>


<flag name="prof_gen" class="optimization" regexp="-prof-gen(?=\s|$)">

   <![CDATA[
      <p>Instrument program for profiling for the first phase of
      two-phase profile guided otimization. This instrumentation gathers information
      about a program's execution paths and data values but does not gather
      information from hardware performance counters. The profile instrumentation
      also gathers data for optimizations which are unique to profile-feedback
      optimization.</p>
   ]]> 

</flag>


<flag name="prof_use" class="optimization" regexp="-prof-use(?=\s|$)">

   <![CDATA[
      <p>Instructs the compiler to produce a profile-optimized 
      executable and merges available dynamic information (.dyn) 
      files into a pgopti.dpi file. If you perform multiple 
      executions of the instrumented program, -prof-use merges 
      the dynamic information files again and overwrites the 
      previous pgopti.dpi file.<br />
      Without any other options, the current directory is 
      searched for .dyn files</p>
   ]]> 
      
</flag>


<flag name="link_force_multiple1" class="optimization" regexp="-Wl.*muldefs(?=\s|$)">

   <![CDATA[
      <p>Enable SmartHeap and/or other library usage by forcing the linker to 
      ignore multiple definitions if present</p>
   ]]> 
 
</flag>


<flag name="link_force_multiple2" class="optimization" regexp=".*FORCE.*MULTIPLE(?=\s|$)">

   <![CDATA[
      <p>Enable SmartHeap library usage by forcing the linker to 
      ignore multiple definitions</p>
   ]]> 
 
</flag>


<flag name="set_stack_space" class="optimization" regexp="(?:/\S+/)?/F\d*">
      set the stack reserve amount specified to the linker 
</flag>


<flag name="f-ansi-alias" class="optimization" regexp="-ansi-alias(?=\s|$)">
      Enable/disable(DEFAULT) use of ANSI aliasing rules in
      optimizations; user asserts that the program adheres to
      these rules. 
</flag>


<flag name="f-ansi_alias" class="optimization" regexp="-ansi_alias(?=\s|$)">
      Enable/disable(DEFAULT) use of ANSI aliasing rules in
      optimizations; user asserts that the program adheres to
      these rules. 
</flag>


<flag name="f-prefetch" class="optimization" regexp="-prefetch(?=\s|$)">
      Enable/disable(DEFAULT) the compiler to generate prefetch instructions to prefetch data. 
</flag>


<flag name="f-inline-calloc" class="optimization" regexp="-inline-calloc(?=\s|$)">
      Directs the compiler to inline calloc() calls as malloc()/memset()
</flag>


<flag name="f-opt-malloc-options" class="optimization" regexp="-opt-malloc-options=([0-4])(?=\s|$)">
      Specify malloc configuration parameters.  Specifying a non-zero value will 
      cause alternate configuration parameters to be set for how malloc allocates and frees
      memory
</flag>


<flag name="f-opt-calloc" class="optimization" regexp="-opt-calloc(?=\s|$)">
      Enable/disable(DEFAULT) calls to fast calloc function
</flag>


<flag name="f-vec-guard-write" class="optimization" regexp="-vec-guard-write(?=\s|$)">
      Enables cache/bandwidth optimization for stores under conditionals (within vector loops)
</flag>


<flag name="f-par-runtime-control" class="optimization" regexp="-par-runtime-control(?=\s|$)">
      Enable compiler to generate runtime control code for effective automatic parallelization
</flag>


<flag name="f-opt-ra-region-strategy-block" class="optimization" regexp="-opt-ra-region-strategy.block(?=\s|$)">
      Select the method that the register allocator uses to partition each routine into regions
       routine - one region per routine
       block   - one region per block
       trace   - one region per trace
       loop    - one region per loop
       default - compiler selects best option
</flag>


<flag name="f-opt-ra-region-strategy-routine" class="optimization" regexp="-opt-ra-region-strategy.routine(?=\s|$)">
      Select the method that the register allocator uses to partition each routine into regions
       routine - one region per routine
       block   - one region per block
       trace   - one region per trace
       loop    - one region per loop
       default - compiler selects best option
</flag>


<flag name="f-opt-multi-version-aggressive" class="optimization" regexp="-opt-multi-version-aggressive(?=\s|$)">
      Enables more aggressive multi-versioning
</flag>


<flag name="f-openmp" class="optimization" regexp="-openmp(?=\s|$)">
       Enable the compiler to generate multi-threaded code based on the OpenMP* directives
</flag>


<flag name="f-qopenmp" class="optimization" regexp="-qopenmp(?=\s|$)">
       Enable the compiler to generate multi-threaded code based on the OpenMP* directives(New option.)
</flag>

<flag name="f-qopenmp-simd" class="optimization" regexp="-qopenmp-simd(?=\s|$)">
       Enables or disables OpenMP* SIMD compilation.
	   You can use this option if you want to enable or disable the SIMD support with no impact on other OpenMP features. In this case, no OpenMP runtime library is needed to link and the compiler does not need to generate OpenMP runtime initialization code.
</flag>


<flag name="f-fopenmp" class="optimization" regexp="-fopenmp(?=\s|$)">
       Enables recognition of OpenMP* features and tells the parallelizer to generate multi-threaded code based on OpenMP* directives.
	
</flag>

<flag name="f-fopenmp-simd" class="optimization" regexp="-fopenmp-simd(?=\s|$)">
       Emit OpenMP code only for SIMD-based constructs. Advanced users who prefer to use OpenMP* as it is implemented by the LLVM community can get most of that functionality by using -fopenmp-simd.
	
</flag>


<flag name="f-fiopenmp" class="optimization" regexp="-fiopenmp(?=\s|$)">
       Enables recognition of OpenMP* features, such as parallel, simd, and offloading directives. This is an alternate option for compiler option [Q or q]openmp.
	
</flag>

<flag name="f-qopenmp-offload" class="optimization" regexp="-qopenmp-offload(host|mic|gfx)(?=\s|$)">
       Enables OpenMP* offloading compilation for target pragmas. This option only applies to Intel(R) Graphics Technology.
	   Enabled by default with -qopenmp. Use -qno-openmp-offload to disable.
	   Specify kind to specify the default device for target pragmas
	   host - allow target code to run on host system while still doing the outlining for offload
	   mic - specify Intel(R) MIC Architecture
	   gfx - Specify Intel(R) Graphics Technology
	   
</flag>


<flag name="f-auto" class="optimization" regexp="-auto(?=\s|$)">
      Make all local variables AUTOMATIC. Same as -automatic
</flag>


<flag name="f-unroll-aggressive" class="optimization" regexp="-unroll-aggressive(?=\s|$)">
      Enables more aggressive unrolling heuristics
</flag>


<flag name="f-par-loops" class="optimization" regexp="-par-loops=(new|old|deault)(?=\s|$)">
      Lets you select between old or new implementations of parallel loop support.
	  <![CDATA[
      <p>Specifies which implementation to use. Possible values are:</p>
		<p> new </p>
		<p> Enables the new implementation of parallel-loop support. As a result, parallel C++ range-based loops and collapsing complex loop stacks will not result in compilation errors. This is the default.</p>
		<p> old </p>
		<p> Enables the old implementation of parallel-loop support. This is the same implementation that was supported in 18.0 and earlier releases. </p>
		<p> default> </p>
		<p> This is the same as specifying new. </p>
	  
	  ]]> 
	  
</flag>

<flag name="f-mconditional-branch" class="optimization" regexp="-mcondition-branch=(keep|pattern-fix|all-fix|all-fix-lfence|all-fix-cmov)(?=\s|$)">
	  Lets you identify and fix code that may be vulnerable to speculative execution side-channel attacks, which can leak your secure data as a result of bad speculation of a conditional branch direction.
   <![CDATA[
      <p>Indicates to the compiler what action to take. Possible values are:  </p>
	  
      <p>keep  </p>	  
			<p>Tells the compiler to not attempt any vulnerable code detection or fixing. This is equivalent to not specifying the -mconditional-branch option.  </p>	  

      <p>pattern-report  </p>
			<p>Tells the compiler to perform a search of vulnerable code patterns in the compilation and report all occurrences to stderr.  </p>

      <p>pattern-fix  </p>
			<p>Tells the compiler to perform a search of vulnerable code patterns in the compilation and generate code to ensure that the identified data accesses are not executed speculatively. It will also report any fixed patterns to stderr.  </p>

			<p>This setting does not guarantee total mitigation, it only fixes cases where all components of the vulnerability can be seen or determined by the compiler. The pattern detection will be more complete if advanced optimization options are specified or are in effect, such as option O3 and option -ipo (or /Qipo).</p>
			
      <p>all-fix  </p>
			<p>Tells the compiler to fix all of the vulnerable code so that it is either not executed speculatively, or there is no observable side-channel created from their speculative execution. Since it is a complete mitigation against Spectre variant 1 attacks, this setting will have the most run-time performance cost.</p>

			<p>In contrast to the pattern-fix setting, the compiler will not attempt to identify the exact conditional branches that may have led to the mis-speculated execution.  </p>
			
      <p>all-fix-lfence  </p>
			<p>This is the same as specifying setting all-fix.  </p>

      <p>all-fix-cmov  </p>
			<p>Tells the compiler to treat any path where speculative execution of a memory load creates vulnerability (if mispredicted). The compiler automatically adds mitigation code along any vulnerable paths found, but it uses a different method then the one used for all-fix (or all-fix-lfence).  </p>
			
			<p>This method uses CMOVcc instruction execution, which constrains speculative execution. Thus, it is used for keeping track of the predicate value, which is updated on each conditional branch.  </p>

			<p>To prevent Spectre v.1 attack, each memory load that is potentially vulnerable is bitwise ORed with the predicate to mask out the loaded value if the code is on a mispredicted path.  </p>

			<p>This is analogous to the Clang compiler's option to do Speculative Load Hardening.  </p>

			<p>This setting is only supported on Intel® 64 architecture-based systems.  </p>

   ]]> 
 
</flag>

<flag name="f-foptimize-sibling-calls" class="optimization" regexp="-foptimize-sibling-calls(?=\s|$)">
    Determines whether the compiler optimizes tail recursive calls. This feature is only available for ifort.
	<![CDATA[
	This option determines whether the compiler optimizes tail recursive calls. It enables conversion of tail recursion into loops.
	]]>
</flag>

<flag name="f-qopt-args-in-regs" class="optimization" regexp="-qopt-args-in-regs(?=\s|$)">
	Determines whether calls to routines are optimized by passing arguments in registers instead of on the stack. This option is deprecated and will be removed in a future release. This feature is only available for ifort. 
	<![CDATA[
	This option determines whether calls to routines are optimized by passing arguments in registers instead of on the stack. It also indicates the conditions when the optimization will be performed.

	This option can improve performance for Application Binary Interfaces (ABIs) that require arguments to be passed in memory and compiled without interprocedural optimization (IPO).

	Note that on Linux* systems, if all is specified, a small overhead may be paid when calling "unseen" routines that have not been compiled with the same option. This is because the call will need to go through a "thunk" to ensure that arguments are placed back on the stack where the callee expects them.
	  
	]]> 
	  
</flag>

<flag name="f-m64" class="optimization" regexp="-m64(?=\s|$)">
    Tells the compiler to generate code for Intel® 64 architecture.
</flag>

<flag name="f-fma" class="optimization" regexp="-fma(?=\s|$)">
    Determines whether the compiler generates fused multiply-add (FMA) instructions if such instructions exist on the target processor.
	<![CDATA[
	This option determines whether the compiler generates fused multiply-add (FMA) instructions if such instructions exist on the target processor. When the [Q]fma option is specified, the compiler may generate FMA instructions for combining multiply and add operations. When the negative form of the [Q]fma option is specified, the compiler must generate separate multiply and add instructions with intermediate rounding.

	This option has no effect unless setting CORE-AVX2 or higher is specified for option [Q]x,-march (Linux and macOS*), or /arch (Windows).
	]]> 
	  
</flag>



<flag name="f-march" class="optimization" regexp="-march=(amberlake|broadwell|cannonlake|cascadelake|coffeelake|goldmont-plus|haswell|icelake-client|icelake-server|ivybridge|kabylake|knl|knm|sandybridge|silvermont|skylake|skylake-avx512|tremont|whiskeylake|core-avx2|core-avx-i|corei7-avx|corei7|atom|core2|pentium4m|pentium-m|pentium4|pentium3|pentium)(?=\s|$)">
	  Tells the compiler to generate code for processors that support certain features.
		May generate instructions for processors that support the specified Intel® processor or microarchitecture code name.
		Keywords knl and silvermont are only available on Linux* systems.
		This content is specific to C++; it does not apply to DPC++.
		Keyword icelake is deprecated and may be removed in a future release.
   <![CDATA[
	Indicates to the compiler the code it may generate. Possible values are:
   
      <p> </p>
		<p>amberlake</p>
		<p>broadwell</p>
		<p>cannonlake</p>
		<p>cascadelake</p>
		<p>coffeelake</p>
		<p>goldmont</p>
		<p>goldmont-plus</p>
		<p>haswell</p>
		<p>icelake-client (or icelake)</p>
		<p>icelake-server</p>
		<p>ivybridge</p>
		<p>kabylake</p>
		<p>knl</p>
		<p>knm</p>
		<p>sandybridge</p>
		<p>silvermont</p>
		<p>skylake</p>
		<p>skylake-avx512</p>
		<p>tremont</p>
		<p>whiskeylake</p>
		<p>core-avx2	- Generates code for processors that support Intel® Advanced Vector Extensions 2 (Intel® AVX2), Intel® AVX, SSE4.2, SSE4.1, SSE3, SSE2, SSE, and SSSE3 instructions.</p>
		<p>core-avx-i	- Generates code for processors that support Float-16 conversion instructions and the RDRND instruction, Intel® Advanced Vector Extensions (Intel® AVX), Intel® SSE4.2, SSE4.1, SSE3, SSE2, SSE, and SSSE3 instructions.</p>
		<p>corei7-avx	- Generates code for processors that support Intel® Advanced Vector Extensions (Intel® AVX), Intel® SSE4.2, SSE4.1, SSE3, SSE2, SSE, and SSSE3 instructions.</p>
		<p>corei7		- Generates code for processors that support Intel® SSE4 Efficient Accelerated String and Text Processing instructions. May also generate code for Intel® SSE4 Vectorizing Compiler and Media Accelerator, Intel® SSE3, SSE2, SSE, and SSSE3 instructions.</p>
		<p>atom		- Generates code for processors that support MOVBE instructions. May also generate code for SSSE3 instructions and Intel® SSE3, SSE2, and SSE instructions.</p>
		<p>core2		- Generates code for the Intel® Core™2 processor family.</p>
		<p>pentium4m	- Generates for Intel® Pentium® 4 processors with MMX technology.</p>
		<p>pentium-m	- Generates code for Intel® Pentium® processors. Value pentium3 is only available on Linux* systems.</p>
		<p>pentium4</p>
		<p>pentium3</p>
		<p>pentium</p>
   ]]> 
</flag>

<flag name="f-mtune" class="optimization" regexp="-mtune=(amberlake|broadwell|cannonlake|cascadelake|coffeelake|goldmont-plus|haswell|icelake-client|icelake-server|ivybridge|kabylake|knl|knm|sandybridge|silvermont|skylake|skylake-avx512|tremont|whiskeylake|core-avx2|core-avx-i|corei7-avx|corei7|atom|core2|pentium4m|pentium-m|pentium4|pentium3|pentium)(?=\s|$)">
	  Performs optimizations for specific processors but does not cause extended instruction sets to be used (unlike -march).
   <![CDATA[
	Indicates to the compiler the code it may generate. Possible values are:
   
      <p> </p>
		<p>amberlake</p>
		<p>broadwell</p>
		<p>cannonlake</p>
		<p>cascadelake</p>
		<p>coffeelake</p>
		<p>goldmont</p>
		<p>goldmont-plus</p>
		<p>haswell</p>
		<p>icelake-client (or icelake)</p>
		<p>icelake-server</p>
		<p>ivybridge</p>
		<p>kabylake</p>
		<p>knl</p>
		<p>knm</p>
		<p>sandybridge</p>
		<p>silvermont</p>
		<p>skylake</p>
		<p>skylake-avx512</p>
		<p>tremont</p>
		<p>whiskeylake</p>
		<p>core-avx2	- Generates code for processors that support Intel® Advanced Vector Extensions 2 (Intel® AVX2), Intel® AVX, SSE4.2, SSE4.1, SSE3, SSE2, SSE, and SSSE3 instructions.</p>
		<p>core-avx-i	- Generates code for processors that support Float-16 conversion instructions and the RDRND instruction, Intel® Advanced Vector Extensions (Intel® AVX), Intel® SSE4.2, SSE4.1, SSE3, SSE2, SSE, and SSSE3 instructions.</p>
		<p>corei7-avx	- Generates code for processors that support Intel® Advanced Vector Extensions (Intel® AVX), Intel® SSE4.2, SSE4.1, SSE3, SSE2, SSE, and SSSE3 instructions.</p>
		<p>corei7		- Generates code for processors that support Intel® SSE4 Efficient Accelerated String and Text Processing instructions. May also generate code for Intel® SSE4 Vectorizing Compiler and Media Accelerator, Intel® SSE3, SSE2, SSE, and SSSE3 instructions.</p>
		<p>atom		- Generates code for processors that support MOVBE instructions. May also generate code for SSSE3 instructions and Intel® SSE3, SSE2, and SSE instructions.</p>
		<p>core2		- Generates code for the Intel® Core™2 processor family.</p>
		<p>pentium4m	- Generates for Intel® Pentium® 4 processors with MMX technology.</p>
		<p>pentium-m	- Generates code for Intel® Pentium® processors. Value pentium3 is only available on Linux* systems.</p>
		<p>pentium4</p>
		<p>pentium3</p>
		<p>pentium</p>
   ]]> 
</flag>

<flag name="f-qno-opt-multiple-gather-scatter-by-shuffles" class="optimization" regexp="-qno-opt-multiple-gather-scatter-by-shuffles(?=\s|$)">
    Enables or disables the optimization for multiple adjacent gather/scatter type vector memory references. This content is specific to C++; it does not apply to DPC++.
	<![CDATA[
	This option controls the optimization for multiple adjacent gather/scatter type vector memory references. This optimization hint is useful for performance tuning. It tries to generate more optimal software sequences using shuffles.

	If you specify this option, the compiler will apply the optimization heuristics. If you specify -qno-opt-multiple-gather-scatter-by-shuffles or /Qopt-multiple-gather-scatter-by-shuffles-, the compiler will not apply the optimization.
	]]> 
	  
</flag>

<flag name="f-ffast-math" class="optimization" regexp="-ffast-math(?=\s|$)">
    Allow aggressive, lossy floating-point optimizations.
		  
</flag>

<flag name="f-fstrict-enums" class="optimization" regexp="-fstrict-enums(?=\s|$)">
    Enable optimizations based on the strict definition of an enum's value range.	  
</flag>

<flag name="f-fstrict-vtable-pointers" class="optimization" regexp="-fstrict-vtable-pointers(?=\s|$)">
    Enable optimizations based on the strict rules for overwriting polymorphic C++ objects.
</flag>

<flag name="f-virtual-function-elimination" class="optimization" regexp="-fvirtual-function-elimination(?=\s|$)">
    Enables dead virtual function elimination optimization. Requires -flto=full.  
</flag>


<flag name="f-ffinite-math-only" class="optimization" regexp="-ffinite-math-only(?=\s|$)">
    Allow optimizations for floating point arithmetic that assume  arguments and results are not NaNs or Infinities.  
</flag>

<flag name="f-multiple-processes" class="optimization" regexp="-multiple-processes=([n])(?=\s|$)">
    Creates multiple processes that can be used to compile large numbers of source files at the same time.
	n is the maximum number of processes that the compiler should create.
</flag>


<flag name="f-norecursive" class="optimization" regexp="-norecursive(?=\s|$)">
    compile all procedures for possible recursive execution.  
</flag>


<flag name="f-fno-signed-zeros" class="optimization" regexp="-fno-signed-zeros(?=\s|$)">
    Allow optimizations that ignore the sign of floating point zeros
</flag>

<flag name="f-vec" class="optimization" regexp="-vec(?=\s|$)">
    Enables or disables vectorization.
	To disable vectorization, specify -no-vec (Linux* and macOS) or /Qvec- (Windows*).
	To disable interpretation of SIMD directives, specify -no-simd (Linux* and macOS) or /Qsimd- (Windows*).
	To disable all compiler vectorization, use the "-no-vec -no-simd" (Linux* and macOS) or "/Qvec- /Qsimd-" (Windows*) compiler options. The option -no-vec (and /Qvec-) disables all auto-vectorization, including vectorization of array notation statements. The option -no-simd (and /Qsimd-) disables vectorization of loops that have SIMD directives.
</flag>


<flag name="f-no-vec" class="optimization" regexp="-no-vec(?=\s|$)">
    Enables or disables vectorization.
	To disable vectorization, specify -no-vec (Linux* and macOS) or /Qvec- (Windows*).
	To disable interpretation of SIMD directives, specify -no-simd (Linux* and macOS) or /Qsimd- (Windows*).
	To disable all compiler vectorization, use the "-no-vec -no-simd" (Linux* and macOS) or "/Qvec- /Qsimd-" (Windows*) compiler options. The option -no-vec (and /Qvec-) disables all auto-vectorization, including vectorization of array notation statements. The option -no-simd (and /Qsimd-) disables vectorization of loops that have SIMD directives.
</flag>

<flag name="f-fsycl" class="optimization" regexp="-fsycl(?=\s|$)">
    Enables a program to be compiled as a SYCL* program rather than as plain C++11 program.
</flag>

<flag name="f-fsycl-dead-args-optimization" class="optimization" regexp="-fsycl-dead-args-optimization(?=\s|$)">
    Enables elimination of DPC++ dead kernel arguments
</flag>

<flag name="f-fsycl-early-optimizations" class="optimization" regexp="-fsycl-early-optimizations(?=\s|$)">
    Enables LLVM-related optimizations before SPIR-V* generation.
</flag>

<flag name="f-fomit-frame-pointer" class="optimization" regexp="-fomit-frame-pointer(?=\s|$)">
    Determines whether EBP is used as a general-purpose register in optimizations.
</flag>

<flag name="f-fno-omit-frame-pointer" class="optimization" regexp="-fno-omit-frame-pointer(?=\s|$)">
    Determines whether EBP is used as a general-purpose register in optimizations.
</flag>


<flag name="f-qopt-mem-layout-trans" class="optimization" regexp="-qopt-mem-layout-trans=(0|1|2|3|4)(?=\s|$)">
      Control the level of memory layout transformations performed by the compiler
	  <![CDATA[
      <p>This option controls the level of memory layout transformations performed by the compiler. This option can improve cache reuse and cache locality.</p>
		<p>	n </p>
			<p>Is the level of memory layout transformations. Possible values are:</p>
		<p> 0 </p>
			<p> Disables memory layout transformations. This is the same as specifying -qno-opt-mem-layout-trans (Linux* or macOS) or /Qopt-mem-layout-trans- (Windows*). </p>
		<p> 1 </p>
			<p> Enables basic memory layout transformations. </p>
		<p> 2 </p>
			<p> Enables more memory layout transformations. This is the same as specifying [q or Q]opt-mem-layout-trans with no argument. </p>
		<p> 3 </p>
			<p> Enables more memory layout transformations like copy-in/copy-out of structures for a region of code. You should only use this setting if your system has more than 4GB of physical memory per core. </p>
		<p> 4 </p>
			<p>Enables more aggressive memory layout transformations. You should only use this setting if your system has more than 4GB of physical memory per core. </p>
	  ]]> 
	  
</flag>


</flagsdescription>
