Developer Guide and Reference

Contents

O

Specifies the code optimization for applications.

Syntax

Linux:
-O
[
n
]
Windows:
/O
[
n
]
Arguments
n
Is the optimization level. Possible values are 1, 2, or 3. On Linux* systems, you can also specify 0.
Default
O2
Optimizes for code speed. This default may change depending on which other compiler options are specified. For details, see below.
Description
This option specifies the code optimization for applications.
Option
Description
O
(Linux*)
This is the same as specifying
O2
.
O0
(Linux)
Disables all optimizations.
This option may set other options. This is determined by the compiler, depending on which operating system and architecture you are using. The options that are set may change from release to release.
O1
Enables optimizations for speed and disables some optimizations that increase code size and affect speed.
To limit code size, this option:
  • Enables global optimization; this includes data-flow analysis, code motion, strength reduction and test replacement, split-lifetime analysis, and instruction scheduling.
  • Disables inlining of some intrinsics.
This option may set other options. This is determined by the compiler, depending on which operating system and architecture you are using. The options that are set may change from release to release.
The
O1
option may improve performance for applications with very large code size, many branches, and execution time not dominated by code within loops.
O2
Enables optimizations for speed. This is the generally recommended optimization level.
Vectorization is enabled at
O2
and higher levels.
This content is specific to C++; it does not apply to
DPC++
.
On systems using IA-32 architecture: Some basic loop optimizations such as Distribution, Predicate Opt, Interchange, multi-versioning, and scalar replacements are performed.
This option also enables:
  • Inlining of intrinsics
  • Intra-file interprocedural optimization, which includes:
    • inlining
    • constant propagation
    • forward substitution
    • routine attribute propagation
    • variable address-taken analysis
    • dead static function elimination
    • removal of unreferenced variables
  • The following capabilities for performance gain:
    • constant propagation
    • copy propagation
    • dead-code elimination
    • global register allocation
    • global instruction scheduling and control speculation
    • loop unrolling
    • optimized code selection
    • partial redundancy elimination
    • strength reduction/induction variable simplification
    • variable renaming
    • exception handling optimizations
    • tail recursions
    • peephole optimizations
    • structure assignment lowering and optimizations
    • dead store elimination
This option may set other options, especially options that optimize for code speed. This is determined by the compiler, depending on which operating system and architecture you are using. The options that are set may change from release to release.
This content is specific to C++; it does not apply to
DPC++
.
On Linux systems, the
-debug inline-debug-info
option will be enabled by default if you compile with optimizations (option
-O2
or higher) and debugging is enabled (option
-g
).
Many routines in the shared libraries are more highly optimized for Intel® microprocessors than for non-Intel microprocessors.
O3
Performs
O2
optimizations and enables more aggressive loop transformations such as Fusion, Block-Unroll-and-Jam, and collapsing IF statements.
This option may set other options. This is determined by the compiler, depending on which operating system and architecture you are using. The options that are set may change from release to release.
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.
The
O3
option is recommended for applications that have loops that heavily use floating-point calculations and process large data sets.
Many routines in the shared libraries are more highly optimized for Intel® microprocessors than for non-Intel microprocessors.
The last
O
option specified on the command line takes precedence over any others.
IDE Equivalent
Visual Studio:
Optimization > Optimization
Eclipse:
General > Optimization Level
Alternate Options
O0
Linux: None
Windows:
/Od

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.