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

<flagsdescription>
<!--
	<filename>flags</filename>
-->
	<title>Fujitsu Siemens Computers SPEC CPU2006 Flag Description</title>

	<style>
		<![CDATA[
			body { background: white; }
		]]>
	</style>
	
<!-- HEADERs -->

   <header>
      <![CDATA[
         <p style="text-align: center">Copyright &copy; 2006.
            Intel Corporation. All Rights Reserved.</p>
         <p><h3>Intel Compilers for C++ and Fortran, Version 9.1</h3></p>
         <hr />
      ]]>
   </header>

	<header class="optimization">
		<![CDATA[
			<p>HEADER for OPTIMIZATION</p>
		]]>
	</header>
	
	<header class="portability">
		<![CDATA[
			<p>HEADER for PORTABILITY</p>
		]]>
	</header>
	
	<header class="compiler">
		<![CDATA[
			<p>HEADER for COMPILER</p>
		]]>
	</header>
	
	<header class="other">
		<![CDATA[
			<p>HEADER for OTHER</p>
		]]>
	</header>
	
<!-- /HEADERs -->

<!-- OPTIMIZATION -->

   <flag name="F-Fstacksize" class="optimization" regexp="-F\d+">
      <example>-F10000</example>
      <![CDATA[
         <p>Stacksize parameter.</p>
         <p><b>for Integersuite</b> <i>n</i> = 512000000
         <br>pre-allocates a 512MB stack</p>
         <p><b>for Floatingpointsuite</b> <i>n</i> = 950000000
         <br>pre-allocates a 950MB stack</p>
      ]]>
   </flag>

	<flag name="f-fast" class="optimization">
		<example>-fast</example>
		<![CDATA[
			<p>Maximize speed across the entire program.</p>
			<p>Turns on:</p>
			<ul>
				<li>-O3</li>
				<li>-Qprec-div-</li>
				<li>-QxP</li>
				<li>-Qipo</li>
			</ul>
		]]>
		<include flag="F-O3"/>
		<include flag="F-Qprec-div-"/>
		<include flag="F-QxP"/>
		<include flag="F-Qipo"/>
	</flag>
	
	<flag name="F-FDO" class="optimization" regexp="willi">
		<example>FDO</example>
		<![CDATA[
			<p>used by mostly benchmarks for PEAK</p>
			<p>PASS1 = -Qprof_gen</p>
			<p>PASS2 = -Qprof_use</p>
		]]>
		<include flag="F-Qprof_gen"/>
		<include flag="F-Qprof_use"/>
	</flag>
	
	<flag name="F-O3" class="optimization" regexp="[-/]O3">
		<example>-O3</example>
		<![CDATA[
			<p>Optimizes for speed. Enables high-level optimization. This level does
			not guarantee higher performance. Using this option may increase the
			compilation time. Impact on performance is application dependent, some
			applications may not see a performance improvement.</p>
			<p>The optimizations include:</p>
			<ul>
				<li>All optimizations done with -O2</li>
				<li>loop unrolling, including instruction scheduling</li>
				<li>code replication to eliminate branches</li>
				<li>padding the size of certain power-of-two arrays to allow more efficient cache use.</li>
				<li>When used with -Qax or -Qx, it causes the compiler to perform more aggressive data dependency analysis than for -O2.</li>
			</ul>
		]]>
		<include flag="F-O2"/>
	</flag>
	
	<flag name="F-Qprec-div-" class="optimization" regexp="[-/]Qprec-div-?">
		<example>-Qprec-div-</example>
		<![CDATA[
			<p>Enables[disables] improved precision of floating-point divides.
			Disabling may slightly improve speed.
			Default Enabled.</p>
		]]>
	</flag>
	
   <flag name="F-QxP" class="optimization" regexp="[-/]Qx(K|W|N|P|B)">
      <example>-QxP</example>
      <![CDATA[
         <p>Generate specialized code to run exclusively on processors
         supporting the extensions indicated by [codes] as described above.<br>
         P stands for Pentium.</p>
      ]]>
   </flag>
	
	<flag name="F-Qipo" class="optimization" regexp="[-/]Qipo">
		<example>-Qipo</example>
		<![CDATA[
			<p><b>for C and C++</b></p>
			<p>Enables multi-file ip optimizations which allows inline function expansion for calls to functions defined in separate files.
			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 applications and two for large ones.</p>
			<p><b>for Fortran</b></p>
			<p>multi-file ip optimizations that includes:</p>
			<ul>
				<li>inline function expansion</li>
				<li>interprocedural constant propagation</li>
				<li>monitoring module-level static variables</li>
				<li>dead code elimination</li>
				<li>propagation of function characteristics</li>
				<li>passing arguments in registers</li>
				<li>loop-invariant code motion</li>
			</ul>
		]]>
	</flag>
	
	<flag name="F-O2" class="optimization" regexp="[-/]O2">
		<example>-O2</example>
		<![CDATA[
			<p>Optimizes for speed.
			<br>The -O2 option includes the following options:</p>
			<ul>
				<li>-Og</li>
				<li>-Oi-</li>
				<li>-Os</li>
				<li>-Oy</li>
				<li>-Ob1</li>
				<li>-Gs</li>
			</ul>
			<p>This options defaults to ON.</p>
			<p>This option also enables.</p>
			<ul>
				<li>inlining of intrinsics</li>
				<li>Intra-file interprocedural optimizations including:</li>
				<ul>
					<li>inlining</li>
					<li>constant propagation</li>
					<li>forward substitution</li>
					<li>routine attribute propagation</li>
					<li>variable address-taken analysis</li>
					<li>dead static function elimination</li>
					<li>removal of unreferenced variables.</li>
				</ul>
				<li>The following performance optimizations:</li>
				<ul>
					<li>copy propogation.</li>
					<li>dead-code elimination</li>
					<li>global register allocation</li>
					<li>global instruction scheduling and control speculation</li>
					<li>loop unrolliing</li>
					<li>optimized code selection</li>
					<li>partial redundancy elimination</li>
					<li>strength reduction/induction variable simplification</li>
					<li>variable renaming</li>
					<li>exception handling optimizations</li>
					<li>tail recursions</li>
					<li>peephole optimizations</li>
					<li>structure assignment lowering and optimization</li>
					<li>dead store elimination</li>
				</ul>
			</ul>
		]]>
		<include flag="F-Og"/>
		<include flag="F-Oi"/>
		<include flag="F-Os"/>
		<include flag="F-Oy"/>
		<include flag="F-Obn"/>
		<include flag="F-Gs"/>
	</flag>
	
	<flag name="F-Qip" class="optimization" regexp="[-/]Qip">
		<example>-Qip</example>
		<![CDATA[
			<p>Enables single-file interprocedural optimizations within a file.</p>
		]]>
	</flag>
	
	<flag name="F-Qprof_gen" class="optimization" regexp="[-/]Qprof_gen">
		<example>-Qprof_gen</example>
		<![CDATA[
			<p><b>for C and C++</b></p>
			<p>Instruments the  program for profiling: to get the execution count of each basic block.</p>
			<p><b>for Fortran</b></p>
			<p>Instruments the  program for profiling: to get the execution count of each basic block.
			<br />Enables single-file interprocedural optimizations within a file.</p>
		]]>
	</flag>
	
	<flag name="F-Qprof_use" class="optimization" regexp="[-/]Qprof_use">
		<example>-Qprof_use</example>
		<![CDATA[
			<p>Enables the use of profiling dynamic feedback information during optimization.</p>
			<p><b>for C and C++:</b></p>
			<ul>
				<li>Turns on -Qfnsplit.</li>
				<li>Forces function grouping.</li>
			</ul>
		]]>
	</flag>
	
	<flag name="F-Og" class="optimization" regexp="[-/]Og">
		<example>-Og</example>
		<![CDATA[
			<p>Enables global optimizations.</p>
		]]>
	</flag>
	
	<flag name="F-Oi" class="optimization" regexp="[-/]Oi-?">
		<example>-Oi</example>
		<![CDATA[
			<p>Enables/disables inline expansion of intrinsic functions.</p>
			<p>Default enabled</p>
		]]>
	</flag>
	
	<flag name="F-Os" class="optimization" regexp="[-/]Os">
		<example>-Os</example>
		<![CDATA[
			<p>This option enables most speed optimizations, but disables some that increase
			code size for a small speed benefit.</p>
			<p>Default enabled</p>
		]]>
	</flag>
	
	<flag name="F-Oy" class="optimization" regexp="[-/]Oy-?">
		<example>-Oy</example>
		<![CDATA[
			<p>Enables [disables] the use of the EBP register in optimizations.
			When you disable with <i>-Oy-</i>, the EBP register is used as frame pointer.
			-Oy has the effect of reducing the number of general-purpose registers by 1,
			and can produce slightly less efficient code.</p>
			<p>Default enabled</p>
		]]>
	</flag>
	
	<flag name="F-Obn" class="optimization" regexp="[-/]Ob[1 2 3]">
		<example>-Ob&lt;n&gt;</example>
		<![CDATA[
			<p><b><i>n</i> = 0</b>
			<br>Disables inlining of user-defined functions.
			However, statement functions are always inlined</p>
			<p><b><i>n</i> = 1</b>
			<br>Enables inlining of functio's declared with the __inline keyword.
			Also enables inlining according to the C++ language</p>
			<p><b><i>n</i> = 2</b>
			<br>Enables inlining of any function.
			However, the compiler decides which functions are inlined.
			This option enables interprocedural optimizations and has the same
			effect as specifying option <i>Qip</i>.</p>
			<p>Default enabled with <i>n</i> = 2</p>
		]]>
	</flag>
	
	<flag name="F-Gs" class="optimization" regexp="[-/]Gs&lt;n&gt;?">
		<example>-Gs</example>
		<![CDATA[
			<p>Disables stack-checking for routines with n or more bytes of local
			variables and compiler temporaries.</p>
			<p>Default enabled with <i>n</i> = 4096.</p>
		]]>
	</flag>
	
	<flag name="F-Oa" class="optimization" regexp="[-/]Oa-?">
		<example>-Oa</example>
		<![CDATA[
			<p>Assume [not assume] no aliasing</p>
			<p>Default disabled</p>
		]]>
	</flag>
	
	<flag name="F-Ot" class="optimization" regexp="[-/]Ot">
		<example>-Ot</example>
		<![CDATA[
			<p>Enables all speed optimizations.</p>
			<p>Overrides -Os</p>
		]]>
	</flag>
	
	<flag name="F-Ow" class="optimization" regexp="[-/]Ow-?">
		<example>-Ow</example>
		<![CDATA[
			<p>Assume[not assume] no cross function aliasing.</p>
		]]>
	</flag>
	
	<flag name="F-Gf" class="optimization" regexp="[-/]Gf">
		<example>-Gf</example>
		<![CDATA[
			<p>Enables string-pooling optimization.</p>
		]]>
	</flag>
	
	<flag name="F-Gy" class="optimization" regexp="[-/]Gy">
		<example>-Gy</example>
		<![CDATA[
			<p>Packages functions to enable linker optimization.</p>
			<p>Default enabled</p>
		]]>
	</flag>
	
	<flag name="F-Qax" class="optimization" regexp="[-/]Qax[KWNPB]">
		<example>-QaxP</example>
		<![CDATA[
			<p>Generates specialized code for processor specific codes K, W, N, P while also generating generic IA-32 code.</p>
			<ul>
				<li><b>K</b> = Intel Pentium III and compatible Intel processors</li>
				<li><b>W</b> = Intel Pentium 4 and compatible Intel processors</li>
				<li><b>N</b> = Intel Pentium 4 and compatible Intel processors.
							These options also enable advanced data layout and code restructuring
							optimizations to improve memory accesses for Intel processors.</li>
				<li><b>P</b> = Intel Pentium 4 processor with Streaming SIMD 3 (SSE3) support.
							These option also enable advanced data layout and code restructuring optimizations
							to improve memory accesses for Intel processors.</li>
			</ul>
		]]>
	</flag>
	
	<flag name="F-Qrcd" class="optimization" regexp="[-/]Qrcd">
		<example>-Qrcd</example>
		<![CDATA[
			<p>Enables[disables] fast conversions of floating-point to integer conversions.
			This option does not guarantee that any particular rounding mode will be used.</p>
		]]>
	</flag>
	
	<flag name="F-Qansi_alias" class="optimization" regexp="[-/]Qansi_alias-?">
		<example>-Qansi_alias</example>
		<![CDATA[
			<p><b>for C and C++</b><br />
			<ul>
				Qansi_alias directs the compiler to assume the following:
			    <li>Arrays are not accessed out of bounds.</li>
			    <li>Pointers are not cast to non-pointer types, and vice-versa.</li>
			    <li>References to objects of two different scalar types cannot alias.
			    For example, an object of type int cannot alias with an object of type float,
			    or an object of type float cannot alias with an object of type double.</li>
			</ul>
			</p>
			<p>If your program satisfies the above conditions, setting the -Qansi_alias
			flag will help the compiler better optimize the program. However, if your
			program does not satisfy one of the above conditions, the -Qansi_alias
			flag may lead the compiler to generate incorrect code.</p>
			<p><b>for Fortran</b><br />
			Enables (default) or disables the compiler to assume that the program adheres to the ANSI Fortran type aliasablility rules.
			For example, an object of type real cannot be accessed as an integer.
			You should see the ANSI Standard for the complete set of rules.</p>
			
		]]>
	</flag>
	
	<flag name="F-Qfp_port" class="optimization" regexp="[-/]Qfp_port">
		<example>-Qfp_port</example>
		<![CDATA[
			<p>round fp results at ass'gnments & casts (some speed impact)</p>
		]]>
	</flag>
	
	<flag name="F-Qprefetch" class="optimization" regexp="[-/]Qprefetch">
		<example>-Qprefetch</example>
		<![CDATA[
			<p>Enable prefetch insertion.</p>
			<p>Default enabled</p>
		]]>
	</flag>
	
	<flag name="F-Qunroll" class="optimization" regexp="[-/]Qunroll&lt;n&gt;">
		<example>-Qunroll&lt;n&gt;</example>
		<![CDATA[
			<p>Specifies the maximum number of times to unroll a loop. <i>n</i> = 0 disables loop unrolling.</p>
			<p>Default: the compiler uses default heuristics when unrolling loops.</p>
		]]>
	</flag>
	
	<flag name="F-Qoption" class="optimization" regexp="[-/]Qoption,tool,optlist">
		<example>-Qoption,tool,optlist</example>
		<![CDATA[
			<p>
				<b>-Qoption:</b> passes an option specified by optlist to a tool,
				where optlist is a comma-separated list of options.<br />
				<b>for C and C++</b><br />
				<table>
					<tr>
						<th>tool:</th>
						<td>Description</td>
					</tr>
					<tr>
						<td>cpp</td>
						<td>Specifies the compiler front-end preprocessor</td>
					</tr>
					<tr>
						<td>c</td>
						<td>Specifies the C++ compiler</td>
					</tr>
					<tr>
						<td>asm</td>
						<td>Specifies the assembler</td>
					</tr>
					<tr>
						<td>link</td>
						<td>Specifies the linker</td>
					</tr>
					<tr>
						<td>oplist</td>
						<td>Indicates one or more valid argument strings for the designated program.
						If the argument is a command-line option, you must include the hyphen.
						If the argument contains a space or tab character,
						you must enclose the entire argument in quotation characters ("").
						You must separate multiple arguments with commas</td>
					</tr>
				</table>
				<b>for Fortran</b><br />
				<table>
					<tr>
						<th>tool:</th>
						<td>Descroption</td>
					</tr>
					<tr>
						<td>fpp</td>
						<td>Specifies the Fortran preprocessor</td>
					</tr>
					<tr>
						<td>f</td>
						<td>Specifies the Fortran compiler</td>
					</tr>
					<tr>
						<td>asm</td>
						<td>Specifies the assembler</td>
					</tr>
					<tr>
						<td>link</td>
						<td>Specifies the linker</td>
					</tr>
					<tr>
						<td>oplist</td>
						<td>Indicates one or more valid argument strings for the designated tool.
							You must separate multiple arguments with commas.</td>
					</tr>
				</table>
			</p>
			<p>
				<b>NOTE</b>: If <i>tool</i> is incorrectly specified,
				the compiler gives an warning and the option is ignored.
				For example, if -Qoption,f,... is used with the Intel C++ compiler,
				the option is ignored with an warning.
			</p>
			<p>
				-Qoption can be used with the -Qipo flag to refine IPO.
				<br />The valid options that can be used for this purpose are:
				<ul>
					<li><i>-ip_args_in_regs = 0</i>
						<br />Disables the passing of arguments in registers.</li>
					<li><i>-ip_ninl_max_stats = n</i>
						<br />Sets the valid max number of intermediate language statements for a function that is expanded in line.
						The number n is a positive integer. The number of intermediate language statements usually
						exceeds the actual number of source language statements.
						The default value for n is 230. The compiler uses a larger limit for user inline functions</li>
					<li><i>-ip_ninl_min_stats = n</i>
						<br />Sets the valid min number of intermediate language statements for a function that is expanded in line.
						The number n is a positive integer. The default values for ip_ninl_min_stats are:
						<br />IA-32 compiler: ip_ninl_min_stats = 7</li>
					<li><i>-ip_ninl_max_total_stats = n</i>
						<br />Sets the maximum increase in size of a function, measured in intermediate language statements,
						due to inlining. n is a positive integer whose default value is 2000.</li>
				</ul>
			</p>
		]]>
	</flag>

	<flag name="F-Zp" class="optimization" regexp="[-/]Zp[1248]}">
		<example>-Zp</example>
		<![CDATA[
			<p>Specifies the strictest alignment constraint for structure and union types as 1, 2. 4. 8 or 16 bytes</p>
			<p>Default is 16.</p>
			<p>Problem: 16 is also pos'ible. How to write regexp?</p>
		]]>
	</flag>
	
	<flag name="F-arch:SSE" class="optimization" regexp="[-/]arch:SSE">
		<example>-arch:SSE</example>
		<![CDATA[
			<p>Enables the compiler to use SSE instructions.</p>
		]]>
	</flag>
	
	<flag name="F-arch:SSE2" class="optimization" regexp="[-/]arch:SSE2">
		<example>-arch:SSE2</example>
		<![CDATA[
			<p>Enables the compiler to use SSE2 instructions.</p>
		]]>
	</flag>
	
	<flag name="F-Qpc64" class="optimization" regexp="[-/]Qpc64">
		<example>-Qpc64</example>
		<![CDATA[
			<p>Enables floating-point significand precision control.
			The value is used to round the significand to the correct number of bits.
			The value must be either 32, 64 or 80.</p>
			<p>Default enabled</p>
		]]>
	</flag>
	
	<flag name="F-Ox" class="optimization" regexp="[-/]Ox">
		<example>-Ox</example>
		<![CDATA[
			<p>Same as the -O2 option: enables -Gs, and -Ob1, -Og, -Oy, and -Ot.</p>
		]]>
		<include flag="F-Gs" />
		<include flag="F-Obn" />
		<include flag="F-Og" />
		<include flag="F-Oy" />
		<include flag="F-Ot" />
	</flag>
	
	<flag name="F-auto" class="optimization" regexp="[-/]auto">
		<example>-auto</example>
		<![CDATA[
			<p>Determines whether local variables are put on the run-time stack.</p>
		]]>
	</flag>
	
	<flag name="F-Qscalar_rep" class="optimization" regexp="[-/]Qscalar_rep-?">
		<example>-Qscalar_rep-</example>
		<![CDATA[
			<p>Enables[disables] scalar replacement performed during loop transformations.
			<br />(requires /O3).</p>
		]]>
	</flag>

   <flag name="F-linkMultiple" class="optimization" regexp="-link -FORCE:MULTIPLE">
      <example>-link -FORCE:MULTIPLE</example>
      <![CDATA[
         <p>Force Linking even if multiple entry names are found.</p>
         <p><b>CINT2006:</b></p>
         <p>Necessary when linking with the Smartheap library since that causes multiple definitions or <b>new</b> and <b>delete</b>
         <br><b>471.omnetpp:</b> linker error without whis option</p>
         <p><b>Runrules:</b> it must be used for all CPU2006 Integer Suite</p>
      ]]>
   </flag>

   <flag name="F-DSPEC_CPU_LITTLE_ENDIAN" class="optimization">
      <example>-DSPEC_CPU_LITTLE_ENDIAN </example>
      <![CDATA[
         <p>Unknown flag; introduced from variable BENCH_FLAGS.</p>
      ]]>
   </flag>
	
<!-- /OPTIMIZATION -->

<!-- PORTABILITY -->

   <flag name="F-TP" class="portability">
      <example>-TP</example>
      <![CDATA[
         <p><b>444.namd:</b></p>
         <p>needs to tell the compiler that 444.namd source files,
         <br>which have an expansion of .C, are C++ files;</p>
         <p>compilation error without this flag.</p>
         <p>/TP: compile all source or unrecognized file types as C++ source files</p>
      ]]>
   </flag>

   <flag name="F-Qlowercase" class="portability">
      <example>-Qlowercase</example>
      <![CDATA[
         <p><b>436.cactusADM:</b> and <b>454.calculix:</b></p>
         <p>is needed to avoid linker errors for mixed C and Fortran codes.
         <br>changes routine names to all lowercase.</p>
      ]]>
   </flag>
	
   <flag name="F-assume:underscore" class="portability" regexp="-assume:underscore">
      <example>-assume:underscore</example>
      <![CDATA[
         <p><b>436.cactusADM:</b></p>
         <p>is needed to avoid linker errors for mixed C and Fortran codes
         <br>it tells the linker to assume and underscore after exernal subroutine names</p>
      ]]>
   </flag>
	
<!-- /PORTABILITY -->

<!-- COMPILER -->

   <flag name="Ficl" class="compiler" regexp="icl">
      <example>icl</example>
      <![CDATA[
         <p> Invoke Intel's C/C++ compiler.<br>
         Also used to invoke linker for C/C++ programs.</p>
      ]]>
   </flag>

   <flag name="Fifort" class="compiler" regexp="ifort">
      <example>icl</example>
      <![CDATA[
         <p> Invoke Intel's Fortran compiler.<br>
         Also used to invoke linker for Fortran programs
         and C/Fortran mixtures.</p>
      ]]>
   </flag>

   <flag name="F-Qc99" class="compiler" regexp="[/-]Qc99-?">
      <example>-Qc99</example>
      <![CDATA[
      '  <p>This option enables/disables C99 support for C programs. One of the features
         enabled, restricted pointers, is available by using option restrict. For more
         information, see restrict.</p>
      ]]>
   </flag>

   <flag name="F-Qcxx-features" class="compiler" regexp="[-/]Qcxx-features">
      <example>-Qcxx-features</example>
      <![CDATA[
         <p>This option enables standard C++ features without disabling Microsoft
         features within the bounds of what is provided in the Microsoft headers and
         libraries.</p>
         <p>This option has the same effect as specifying /GX /GR.</p>
      ]]>
   </flag>

   <flag name="F-GX" class="compiler" regexp="[-/]GX-?">
      <example>-GX</example>
      <![CDATA[
         <p>This option enables C++ exception handling</p>
      ]]>
   </flag>

   <flag name="F-GR" class="compiler" regexp="[-/]GR-?">
      <example>-GR</example>
      <![CDATA[
         <p>This option enables C++ Run Time Type Information (RTTI). </p>
      ]]>
   </flag>

   <flag name="F-ipwd" class="compiler" regexp="-I.">
      <example>-I.</example>
      <![CDATA[
         <p>Search for include files also in working directory.</p>
      ]]>
   </flag>
	
<!-- /COMPILER -->

<!-- OTHER -->

   <flag name="F-shlw32m.lib" class="other" regexp="(?i)shlW32M\.lib">
      <example>shlw32m.lib</example>
      <![CDATA[
         <p>MicroQuill SmartHeap Library available from
         <a href="http://www.microquill.com/">http://www.microquill.com/</a></p>
      ]]>
   </flag>

<!-- /OTHER -->

</flagsdescription>

