# prof-gen, Qprof-gen

Produces an instrumented object file that can be used in profile guided optimization.

## Syntax

Linux: | -prof-gen[=keyword[, keyword],...] -no-prof-gen

macOS: | -prof-gen[=keyword[, keyword],...] -no-prof-gen

Windows: | /Qprof-gen[:keyword[,keyword],...] /Qprof-gen-

## Arguments

keyword | Specifies details for the instrumented file. Possible values are:
default | Produces an instrumented object file. This is the same as specifying the [Q]prof-gen option with no keyword.
srcpos | Produces an instrumented object file that includes extra source position information.
globdata | Produces an instrumented object file that includes information for global data layout.
[no]threadsafe | Produces an instrumented object file that includes the collection of PGO data on applications that use a high level of parallelism. If [Q]prof-gen is specified with no keyword, the default is nothreadsafe.

## Default

-no-prof-gen or /Qprof-gen- | Profile generation is disabled.

## Description

This option produces an instrumented object file that can be used in profile guided optimization. It gets the execution count of each basic block.

You can specify more than one setting for [Q]prof-gen. For example, you can specify the following:

    -prof-gen=srcpos -prof-gen=threadsafe (Linux* and macOS)
    -prof-gen=srcpos, threadsafe (this is equivalent to the above)

    /Qprof-gen:srcpos /Qprof-gen:threadsafe (Windows*)
    /Qprof-gen:srcpos, threadsafe (this is equivalent to the above)

If you specify keyword srcpos or globdata, a static profile information file (.spi) is created. These settings may increase the time needed to do a parallel build using -prof-gen, because of contention writing the .spi file.

These options are used in phase 1 of the Profile Guided Optimizer (PGO) to instruct the compiler to produce instrumented code in your object files in preparation for instrumented execution.

When the [Q]prof-gen option is used to produce an instrumented binary file for profile generation, some optimizations are disabled. Those optimizations are not disabled for any subsequent profile-guided compilation with option [Q]prof-use that makes use of the generated profiles.

## IDE Equivalent

Visual Studio: General > Profile Guided Optimization

General > Code Coverage Build Options

Eclipse: Optimization > Profile Guided Optimization

Xcode: None

## Alternate Options

None

Parent topic: Profile Guided Optimization Options

## See Also

prof-use, Qprof-use compiler option
Profile an Application with Instrumentation