Skip to content

Latest commit

 

History

History
93 lines (62 loc) · 4 KB

og-global-optimizations.md

File metadata and controls

93 lines (62 loc) · 4 KB
title ms.custom ms.date ms.technology ms.topic f1_keywords dev_langs helpviewer_keywords ms.assetid author ms.author ms.workload
-Og (Global Optimizations) | Microsoft Docs
09/22/2017
cpp-tools
reference
VC.Project.VCCLCompilerTool.GlobalOptimizations
/og
C++
-Og compiler option [C++]
global optimizations compiler option [C++]
automatic register allocation
/Og compiler option [C++]
loop structures, optimizing
common subexpression elimination
Og compiler option [C++]
d10630cc-b9cf-4e97-bde3-8d7ee79e9435
corob-msft
corob
cplusplus

/Og (Global Optimizations)

Deprecated. Provides local and global optimizations, automatic-register allocation, and loop optimization. We recommend you use either /O1 (Minimize Size) or /O2 (Maximize Speed) instead.

Syntax

/Og

Remarks

/Og is deprecated. These optimizations are now generally enabled by default. For more information on optimizations, see /O1, /O2 (Minimize Size, Maximize Speed) or /Ox (Enable Most Speed Optimizations).

The following optimizations are available under /Og:

  • Local and global common subexpression elimination

    In this optimization, the value of a common subexpression is calculated once. In the following example, if the values of b and c do not change between the three expressions, the compiler can assign the calculation of b + c to a temporary variable, and substitute the variable for b + c:

    a = b + c;
    d = b + c;
    e = b + c;

    For local common subexpression optimization, the compiler examines short sections of code for common subexpressions. For global common subexpression optimization, the compiler searches entire functions for common subexpressions.

  • Automatic register allocation

    This optimization allows the compiler to store frequently used variables and subexpressions in registers; the register keyword is ignored.

  • Loop optimization

    This optimization removes invariant subexpressions from the body of a loop. An optimal loop contains only expressions whose values change through each execution of the loop. In the following example, the expression x + y does not change in the loop body:

    i = -100;
    while( i < 0 ) {
        i += x + y;
    }

    After optimization, x + y is calculated once rather than every time the loop is executed:

    i = -100;
    t = x + y;
    while( i < 0 ) {
        i += t;
    }

    Loop optimization is much more effective when the compiler can assume no aliasing, which you set with __restrict, noalias, or restrict.

    [!NOTE] You can enable or disable global optimization on a function-by-function basis using the optimize pragma together with the g option.

For related information, see /Oi (Generate Intrinsic Functions) and /Ox (Enable Most Speed Optimizations).

To set this compiler option in the Visual Studio development environment

  1. Open the project's Property Pages dialog box. For details, see Working with Project Properties.

  2. Click the C/C++ folder.

  3. Click the Command Line property page.

  4. Enter the compiler option in the Additional Options box.

To set this compiler option programmatically

  • See xref:Microsoft.VisualStudio.VCProjectEngine.VCCLCompilerTool.AdditionalOptions%2A.

See Also

/O Options (Optimize Code)

Compiler Options

Setting Compiler Options