[PseudoProbe] Only emit discriminstor in FS-AFDO mode.
authorHongtao Yu <hoy@fb.com>
Mon, 15 May 2023 23:33:39 +0000 (16:33 -0700)
committerHongtao Yu <hoy@fb.com>
Wed, 17 May 2023 04:35:17 +0000 (21:35 -0700)
Despite previous effort {D148569} to avoid screwing up existing disrminator field, I'm still seeing some call probes getting a non-zero discriminator eventually in non-FS mode. It could be related to callsite merge. While they are investigated I'm disabling discriminator emission for non-FS mode. This avoids breaking the compatiblity with older tools like llvm-profgen and bolt.

Reviewed By: wenlei

Differential Revision: https://reviews.llvm.org/D150625

llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp

index 7f7eef9..59c3fa1 100644 (file)
@@ -45,9 +45,11 @@ void PseudoProbeHandler::emitPseudoProbe(uint64_t Guid, uint64_t Index,
   uint64_t Discriminator = 0;
   // For now only block probes have FS discriminators. See
   // MIRFSDiscriminator.cpp for more details.
-  if (DebugLoc &&
-      !DILocation::isPseudoProbeDiscriminator(DebugLoc->getDiscriminator()))
+  if (EnableFSDiscriminator && DebugLoc &&
+      (Type == (uint64_t)PseudoProbeType::Block))
     Discriminator = DebugLoc->getDiscriminator();
+  assert((EnableFSDiscriminator || Discriminator == 0) &&
+         "Discriminator should not be set in non-FSAFDO mode");
   SmallVector<InlineSite, 8> InlineStack(llvm::reverse(ReversedInlineStack));
   Asm->OutStreamer->emitPseudoProbe(Guid, Index, Type, Attr, Discriminator,
                                     InlineStack, Asm->CurrentFnSym);