[llvm] [PGO] Sampled instrumentation in PGO to speed up instrumentation binary (PR #69535)
David Li via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 18 21:43:29 PDT 2023
================
@@ -412,30 +424,91 @@ PreservedAnalyses InstrProfiling::run(Module &M, ModuleAnalysisManager &AM) {
return PreservedAnalyses::none();
}
+// Perform instrumentation sampling.
+// We transform:
+// Increment_Instruction;
+// to:
+// if (__llvm_profile_sampling__ <= SampleDuration) {
+// Increment_Instruction;
+// }
+// __llvm_profile_sampling__ += 1;
+//
+// "__llvm_profile_sampling__" is a thread-local global shared by all PGO
+// instrumentation variables (value-instrumentation and edge instrumentation).
+// It has a unsigned short type and will wrapper around when overflow.
+//
+// Note that, the code snippet after the transformation can still be
+// counter promoted. But I don't see a reason for that because the
+// counter updated should be sparse. That's the reason we disable
+// counter promotion by default when sampling is enabled.
----------------
david-xl wrote:
It is still unclear why counter promotion should be disabled with this comment.
https://github.com/llvm/llvm-project/pull/69535
More information about the llvm-commits
mailing list