Clang:在编译覆盖 PGO 时我是否必须通过 -O0

Clang: do I have to pass -O0 when compiling with coverage for PGO

所以我正在用 clang 3.8 编译一个大的 C++ 程序。 我想使用 PGO(Profile guided optimization)。我想用instrumentation编译的方式来生成profile。

目前我正在将 -fprofile-instr-generate --coverage 传递给编译器,将 --coverage 传递给链接器。

所以现在的问题是是否最好也传递 -O0,以便编译器可以在下一次编译期间正确映射回二进制文件中的调用。或者这是不必要的?

没有必要。优化代码的覆盖率将相同,否则会令人担忧;)

例如,clang 覆盖机器人使用 -O3 -fprofile-instr-generate -fcoverage-mapping

构建