From 456eb4b5bffe42d109c09b8706d4eeda8baa1f9a Mon Sep 17 00:00:00 2001 From: Hongtao Yu Date: Mon, 15 May 2023 16:33:39 -0700 Subject: [PATCH] [PseudoProbe] Only emit discriminstor in FS-AFDO mode. 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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp index 7f7eef9..59c3fa1 100644 --- a/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp @@ -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 InlineStack(llvm::reverse(ReversedInlineStack)); Asm->OutStreamer->emitPseudoProbe(Guid, Index, Type, Attr, Discriminator, InlineStack, Asm->CurrentFnSym); -- 2.7.4