# optimization_level

Controls optimization for one function or all functions after its first occurrence.

## Syntax

#pragma [intel|GCC] optimization_level n

## Arguments

intel|GCC | Indicates the interpretation to use
n | An integer value specifying an optimization level; valid values are: 0: same optimizations as option -O0 (Linux* and macOS) or /Od (Windows*) 1: same optimizations as option O1 2: same optimizations as option O2 3: same optimizations as option O3

## Description

The optimization_level pragma is used to restrict optimization for a specific function while optimizing the remaining application using a different, higher optimization level. For example, if you specify option level O3 for the application and specify `#pragma optimization_level 1`, the marked function will be optimized at option level O1, while the remaining application will be optimized at the higher level.

In general, this pragma optimizes the function at the level specified as n; however, certain compiler optimizations, like Inter-procedural Optimization (IPO), are not enabled or disabled during translation unit compilation. For example, if you enable IPO and a specific optimization level, IPO is enabled even for the function targeted by this pragma; however, IPO might not be fully implemented regardless of the optimization level specified at the command line. The reverse is also true.

Scope of optimization restriction

On Linux* and macOS systems, the scope of the optimization restriction can be affected by arguments passed to the -pragma-optimization-level compiler option as explained in the following table.

Syntax | Behavior
--- | ---
`#pragma intel optimization_level` n | Applies the pragma only to the next function, using the specified optimization level, regardless of the argument passed to the -pragma-optimization-level option.
`#pragma GCC optimization_level` n or `#pragma GCC optimization_level reset` | Applies the pragma to all subsequent functions, using the specified optimization level, regardless of the argument passed to the -pragma-optimization-level option. Specifying `reset` reverses the effect of the most recent `#pragma GCC optimization_level` statement, by returning to the optimization level previously specified.
`#pragma optimization_level` n | Applies either the Intel® C++ Compiler Classic implementation or the GCC* interpretation. Interpretation depends on the argument passed to the -pragma-optimization-level option.

### Note

On Windows* systems, the pragma always uses the intel interpretation; the pragma is applied only to the next function.

## Examples

Place the pragma immediately before the function being affected.

This example shows the `intel` interpretation of the optimization_level pragma:

    #pragma intel optimization_level 1
      gamma() { ... }

This example shows `GCC*` interpretation of the optimization_level pragma:

    #pragma GCC optimization_level 1
      gamma() { ... }

Parent topic: Intel-Specific Pragma Reference