=============================================================
How To Build Clang and LLVM with Profile-Guided Optimizations
=============================================================

Introduction
============

PGO (Profile-Guided Optimization) allows your compiler to better optimize code
for how it actually runs. Users report that applying this to Clang and LLVM can
decrease overall compile time by 20%.

This guide walks you through how to build Clang with PGO, though it also applies
to other subprojects, such as LLD.


Using the script
================

We have a script at ``utils/collect_and_build_with_pgo.py``. This script is
tested on a few Linux flavors, and requires a checkout of LLVM, Clang, and
compiler-rt. Despite the the name, it performs four clean builds of Clang, so it
can take a while to run to completion. Please see the script's ``--help`` for
more information on how to run it, and the different options available to you.
If you want to get the most out of PGO for a particular use-case (e.g. compiling
a specific large piece of software), please do read the section below on
'benchmark' selection.

Please note that this script is only tested on a few Linux distros. Patches to
add support for other platforms, as always, are highly appreciated. :)

This script also supports a ``--dry-run`` option, which causes it to print
important commands instead of running them.


Selecting 'benchmarks'
======================

PGO does best when the profiles gathered represent how the user plans to use the
compiler. Notably, highly accurate profiles of llc building x86_64 code aren't
incredibly helpful if you're going to be targeting ARM.

By default, the script above does two things to get solid coverage. It:

- runs all of Clang and LLVM's lit tests, and
- uses the instrumented Clang to build Clang, LLVM, and all of the other
  LLVM subprojects available to it.

Together, these should give you:

- solid coverage of building C++,
- good coverage of building C,
- great coverage of running optimizations,
- great coverage of the backend for your host's architecture, and
- some coverage of other architectures (if other arches are supported backends).

Altogether, this should cover a diverse set of uses for Clang and LLVM. If you
have very specific needs (e.g. your compiler is meant to compile a large browser
for four different platforms, or similar), you may want to do something else.
This is configurable in the script itself.


Building Clang with PGO
=======================

If you prefer to not use the script, this briefly goes over how to build
Clang/LLVM with PGO.

First, you should have at least LLVM, Clang, and compiler-rt checked out
locally.

Next, at a high level, you're going to need to do the following:

1. Build a standard Release Clang and the relevant libclang_rt.profile library
2. Build Clang using the Clang you built above, but with instrumentation
3. Use the instrumented Clang to generate profiles, which consists of two steps:

  - Running the instrumented Clang/LLVM/lld/etc. on tasks that represent how
    users will use said tools.
  - Using a tool to convert the "raw" profiles generated above into a single,
    final PGO profile.

4. Build a final release Clang (along with whatever other binaries you need)
   using the profile collected from your benchmark

In more detailed steps:

1. Configure a Clang build as you normally would. It's highly recommended that
   you use the Release configuration for this, since it will be used to build
   another Clang. Because you need Clang and supporting libraries, you'll want
   to build the ``all`` target (e.g. ``ninja all`` or ``make -j4 all``).

2. Configure a Clang build as above, but add the following CMake args:

   - ``-DLLVM_BUILD_INSTRUMENTED=IR`` -- This causes us to build everything
     with instrumentation.
   - ``-DLLVM_BUILD_RUNTIME=No`` -- A few projects have bad interactions when
     built with profiling, and aren't necessary to build. This flag turns them
     off.
   - ``-DCMAKE_C_COMPILER=/path/to/stage1/clang`` - Use the Clang we built in
     step 1.
   - ``-DCMAKE_CXX_COMPILER=/path/to/stage1/clang++`` - Same as above.

 In this build directory, you simply need to build the ``clang`` target (and
 whatever supporting tooling your benchmark requires).

3. As mentioned above, this has two steps: gathering profile data, and then
   massaging it into a useful form:

   a. Build your benchmark using the Clang generated in step 2. The 'standard'
      benchmark recommended is to run ``check-clang`` and ``check-llvm`` in your
      instrumented Clang's build directory, and to do a full build of Clang/LLVM
      using your instrumented Clang. So, create yet another build directory,
      with the following CMake arguments:

      - ``-DCMAKE_C_COMPILER=/path/to/stage2/clang`` - Use the Clang we built in
        step 2.
      - ``-DCMAKE_CXX_COMPILER=/path/to/stage2/clang++`` - Same as above.

      If your users are fans of debug info, you may want to consider using
      ``-DCMAKE_BUILD_TYPE=RelWithDebInfo`` instead of
      ``-DCMAKE_BUILD_TYPE=Release``. This will grant better coverage of
      debug info pieces of clang, but will take longer to complete and will
      result in a much larger build directory.

      It's recommended to build the ``all`` target with your instrumented Clang,
      since more coverage is often better.

  b. You should now have a few ``*.profraw`` files in
     ``path/to/stage2/profiles/``. You need to merge these using
     ``llvm-profdata`` (even if you only have one! The profile merge transforms
     profraw into actual profile data, as well). This can be done with
     ``/path/to/stage1/llvm-profdata merge
     -output=/path/to/output/profdata.prof path/to/stage2/profiles/*.profraw``.

4. Now, build your final, PGO-optimized Clang. To do this, you'll want to pass
   the following additional arguments to CMake.

   - ``-DLLVM_PROFDATA_FILE=/path/to/output/profdata.prof`` - Use the PGO
     profile from the previous step.
   - ``-DCMAKE_C_COMPILER=/path/to/stage1/clang`` - Use the Clang we built in
     step 1.
   - ``-DCMAKE_CXX_COMPILER=/path/to/stage1/clang++`` - Same as above.

   From here, you can build whatever targets you need.

   .. note::
     You may see warnings about a mismatched profile in the build output. These
     are generally harmless. To silence them, you can add
     ``-DCMAKE_C_FLAGS='-Wno-backend-plugin'
     -DCMAKE_CXX_FLAGS='-Wno-backend-plugin'`` to your CMake invocation.


Congrats! You now have a Clang built with profile-guided optimizations, and you
can delete all but the final build directory if you'd like.

If this worked well for you and you plan on doing it often, there's a slight
optimization that can be made: LLVM and Clang have a tool called tblgen that's
built and run during the build process. While it's potentially nice to build
this for coverage as part of step 3, none of your other builds should benefit
from building it. You can pass the CMake options
``-DCLANG_TABLEGEN=/path/to/stage1/bin/clang-tblgen
-DLLVM_TABLEGEN=/path/to/stage1/bin/llvm-tblgen`` to steps 2 and onward to avoid
these useless rebuilds.
