Add the support to LLVM's Context Sensitive FDO
LLVM recently implemented Context Sensitive FDO/PGO (CSFDO/CSPGO) which uses a
post-inline instrumentation to record more accurate profile information for the
inlined code. It improves the effectiveness of post-inline optimizations.
This CL adds the support to CSFDO:
(1) Add new options:
--cs_fdo_instrument=<csfdo_instru_path>,
--cs_profile=<csfdo_label>
(2) Add two features: CS_FDO_INSTRUMENT and CS_FDO_OPTIMIZE.
(2) Add a new BranchFdoMode: LLVM_CS_FDO.
(3) Merge CSFDO profile and regular FDO profile.
(4) Pass CSFDO options to the back-end invocations.
(5) Distribute the profile to build hosts in LLVM_CS_FDO optimize build. This is
not needed for regular FDO as the profile is read in during pre-LTO passes. We
need this step in CSFDO because the profile is read-in and used in the back-end.
RELNOTES: Add new options --cs_fdo_instrument and --cs_profile to support
LLVM's context-sensitive FDO (CSFDO).
PiperOrigin-RevId: 242685802
{Fast, Correct} - Choose two
Build and test software of any size, quickly and reliably.
Speed up your builds and tests: Bazel only rebuilds what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.
One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.
Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.
Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.
Follow our tutorials:
See CONTRIBUTING.md
Bazel is released in ‘Beta’. See the product roadmap to learn about the path toward a stable 1.0 release.