<?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>Compilers: Intel Compilers for C++ and Fortran, Version 9.1
                       for EM64T-based applications in Linux<br>
            Operating system: 64-bit SUSE Linux 10 Enterprise Edition<br>
            Last updated: 08-Jan-2007 PS
         </p>

         <p>The text for many of the descriptions below was taken
            from the documentation of the Intel Compilers.
            This documentation is copyright &copy; 2006 Intel Corporation. All Rights Reserved.<br>
            The original documentation is distributed with the Intel compilers.
         </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-fast" class="optimization">
      <example>-fast</example>
      <![CDATA[
         <p>Maximize speed across the entire program.</p>
         <p>Turns on:</p>
         <ul>
            <li>-O3</li>
            <li>-prec-div</li>
            <li>-xP</li>
            <li>-ipo</li>
            <li>-static</li>
         </ul>
      ]]>
      <include flag="F-O3"/>
      <include flag="F-prec-div"/>
      <include flag="F-xP"/>
      <include flag="F-ipo"/>
      <include flag="F-static"/>
   </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 -ax or -x, it causes the compiler to perform
                more aggressive data dependency analysis than for -O2.</li>
         </ul>
      ]]>
      <include flag="F-O2"/>
   </flag>

   <flag name="F-prec-div" class="optimization" regexp="[-/]prec-div">
      <example>-prec-div</example>
      <![CDATA[
         <p>Enables[disables] improved precision of floating-point divides.
         Disabling may slightly improve speed.
         Default Enabled.</p>
      ]]>
   </flag>
	
   <flag name="F-xP" class="optimization" regexp="[-/]x(W|P)">
      <example>-xP</example>
      <![CDATA[
         <p>-x<i>processor</i>&nbsp;&nbsp;&nbsp; This option directs the compiler
            to generate specialized and optimized code for the Intel processor
            that executes your program.
            It lets you target your program to run on a specific Intel processor.
         </p>
         <p><i>processor</i>&nbsp;&nbsp;&nbsp; Is the processor
            for which you want to target your program.<br>
            Here: P&nbsp;&nbsp;&nbsp; Code is optimized for Intel Core Duo processors,
            Intel Core Solo processors, Intel Pentium 4 processors with Steaming SIMD
            Extensions 3, and compatible Intel processors with Streaming SIMD Extensions 3.
            The resulting code may contain unconditional use of features
            that are not supported on other processors.<br>
            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>Programs compiled with -xP will display a fatal run-time error
            if they are executed on unsupported processors.
         </p>
         <p>On Intel EM64T systems, W, and P, are the only valid <i>processor</i> values.
         </p>
      ]]>
   </flag>
	
   <flag name="F-ipo" class="optimization" regexp="[-/]ipo(5|)">
      <example>-ipo</example>
      <![CDATA[
         <p>-ipo[<i>n</i>]</p>
         <p>This option enables interprocedural optimizations between files.
            This is also called multifile interprocedural optimization (multifile IPO)
            or Whole Program Optimization (WPO).
         </p>
         <p>When you specify this option, the compiler performs inline function expansion
            for calls to functions defined in separate files.
         </p>
         <p>You cannot specify the names for the object files that are created.
         </p>
         <p><i>n</i>&nbsp;&nbsp;&nbsp; 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.<br>
            If you do not specify <i>n</i>, the default is 0.
         </p>
         <p>If <i>n</i> is 0, the compiler decides whether to create one or more object files
            based on an estimate of the size of the application.
            It generates one object file for small applications,
            and two or more object files for large applications.
         </p>
         <p>If <i>n</i> is greater than 0, the compiler generates <i>n</i> object files,
            unless <i>n</i> exceeds the number of source files (<i>m</i>),
            in which case the compiler generates only <i>m</i> object files.
         </p>
      ]]>
   </flag>
   
   <flag name="F-static" class="optimization" regexp="[-/]static">
      <example>-static</example>
      <![CDATA[
         <p>-static prevents linking with shared libraries.</p>
      ]]>
   </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-prof_gen" class="optimization" regexp="[-/]prof_gen">
      <example>-prof_gen</example>
      <![CDATA[
         <P>This option instruments a program for profiling
            as first step in Profile Guided Optimization.
         </P>
         <P>Profile Guided Optimization (PGO) consists of 3 phases:<br>
            Phase 1: Compile and generate instrumented code in preparation
            to gather profiling information (compiler flag -prof_gen).<br>
            Phase 2: Execute the instrumented code and gather profiling information.<br>
            Phase 3: Recompile the code and use the profiling information
            for improved optimization (compiler flag -prof_use).
         </P>
         <P>The option<i> -prof_gen </i>instruments a program
            for profiling to get the execution count of each basic block.
            It also creates a new static profile information file (.spi).
            This flag is used in phase 1 of the Profile Guided Optimizer (PGO)
            to instruct the compiler to produce code in your object files
            in preparation for instrumented execution.
         </P>
         <P>The instrumented code<br>
            <UL>
            <LI>Gathers information regarding execution paths.
            <LI>Gathers information regarding data values. 
            <LI>Does not use hardware performance counters.
            </LI>
            </UL>
         </P>
      ]]>
   </flag>
	
   <flag name="F-prof_use" class="optimization" regexp="[-/]prof_use">
      <example>-prof_use</example>
      <![CDATA[
         <P>This option enables the use of profiling information during optimization
            as final step in Profile Guided Optimization.
         </P>
         <P>Profile Guided Optimization (PGO) consists of 3 phases:<br>
            Phase 1: Compile and generate instrumented code in preparation
            to gather profiling information (compiler flag -prof_gen).<br>
            Phase 2: Execute the instrumented code and gather profiling information.<br>
            Phase 3: Recompile the code and use the profiling information
            for improved optimization (compiler flag -prof_use).
         </P>
         <P>The option <i>-prof_use</i> instructs the compiler to use the profiling 
            information from phase 2 of PGO in order to produce a profile-optimized 
            executable (phase 3 of PGO).
         </p>
         <p>
            It also enables function splitting (option -Qfnsplit)
            and function grouping during optimization.
         </P>
         <P>Note that there is no way to turn off function grouping
            if you enable it using this option.
         </P>
         <P>The recompilation with <i>-prof_use</i><br>
            <UL>
            <LI>Uses information regarding execution paths. 
            <LI>Uses information regarding data values. 
            <LI>Does not use hardware performance counters. 
            <LI>Uses techniques (like function grouping) which are not available without PGO.
            </LI>
            </UL>
         </p>
      ]]>
      <include flag="F-fnsplit"/>
   </flag>

   <flag name="F-fnsplit" class="optimization">
      <example>-fnsplit</example>
      <![CDATA[
         <p>Enables function splitting.</p>
         <p>This option enables function splitting if -prof-use is also specified.
         Otherwise, this option has no effect.</p>
         <p>It is enabled automatically if you specify -prof-use. If you do not specify
         one of those options, the default is -fnsplit-, which disables
         function splitting but leaves function grouping enabled.</p>
         <p>To disable function splitting when you use -prof-use, specify -fnsplit-.</p> 
      ]]>
   </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 functions 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>ip</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-ax" class="optimization" regexp="[-/]ax[W|P]">
		<example>-axP</example>
		<![CDATA[
			<p>Generates specialized code for processor specific codes W, P while also generating generic IA-32 code.</p>
			<ul>
				<li><b>W</b> = Intel Pentium 4 and compatible 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>
	
<!-- /OPTIMIZATION -->

<!-- PORTABILITY -->

   <flag name="F-DSPEC_CPU_LP64" class="portability" regexp="[/-]DSPEC_CPU_LP64">
      <example>-DSPEC_CPU_LP64</example>
      <![CDATA[
         <p>-DSPEC_CPU_LP64 compiles using LP64 programming model.</p>
      ]]>
   </flag>

   <flag name="F-DSPEC_CPU_LINUX_X64" class="portability" regexp="[/-]DSPEC_CPU_LINUX_X64">
      <example>-DSPEC_CPU_LINUX_X64</example>
      <![CDATA[
         <p>Compile for an I386 system running Linux.</p>
      ]]>
   </flag>

   <flag name="F-DSPEC_CPU_LINUX" class="portability" regexp="[/-]DSPEC_CPU_LINUX">
      <example>-DSPEC_CPU_LINUX</example>
      <![CDATA[
         <p>-DSPEC_CPU_LINUX compiles for a system running Linux.</p>
      ]]>
   </flag>

   <flag name="F-nofor_main" class="portability" regexp="[/-]nofor_main">
      <example>-nofor_main</example>
      <![CDATA[
         <p>For mixed-language benchmarks, tell the compiler that the main program is not written in Fortran.</p>
      ]]>
   </flag>

   <flag name="F-DSPEC_CPU_CASE_FLAG" class="portability" regexp="[/-]DSPEC_CPU_CASE_FLAG">
      <example>-DSPEC_CPU_CASE_FLAG</example>
      <![CDATA[
         <p>This macro indicates that Fortran functions called from C should have their names lower-cased.</p>
      ]]>
   </flag>

<!-- /PORTABILITY -->

<!-- COMPILER -->

   <flag name="Ficc" class="compiler" regexp="icc">
      <example>icc</example>
      <![CDATA[
         <p> Invoke Intel C compiler.<br>
         Also used to invoke linker for C programs.</p>
      ]]>
   </flag>
   
   <flag name="Ficpc" class="compiler" regexp="icpc">
      <example>icpc</example>
      <![CDATA[
         <p> Invoke Intel C++ compiler.<br>
         Also used to invoke linker for C++ programs.</p>
      ]]>
   </flag>

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

<!-- /COMPILER -->

<!-- OTHER -->

<!-- currently there are no flags in the class "other" -->

<!-- /OTHER -->

</flagsdescription>
