[PATCH] D150741: [FS-AFDO] Clean up non-zero discriminator for pseudo probes at the first FS discriminator pass.
Hongtao Yu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue May 16 17:30:30 PDT 2023
hoy created this revision.
Herald added subscribers: wlei, modimo, wenlei, pengfei, hiraditya.
Herald added a project: All.
hoy requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
The dwarf discriminator field for pseudo probes is not supposed to be used until the first FS discriminator pass. Unfortunately there are always corner cases that accidientally set this field. For example, the inliner could set this field for an inlined instruction if the instruction does not come with any debug information. While fixing all such spots is possible, but for future-proff I'd like to enforce a general cleanup before assigning probes any FS discriminator.
Test Plan:
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D150741
Files:
llvm/include/llvm/CodeGen/MIRFSDiscriminator.h
llvm/lib/CodeGen/MIRFSDiscriminator.cpp
llvm/test/CodeGen/X86/fsafdo_probe.ll
Index: llvm/test/CodeGen/X86/fsafdo_probe.ll
===================================================================
--- llvm/test/CodeGen/X86/fsafdo_probe.ll
+++ llvm/test/CodeGen/X86/fsafdo_probe.ll
@@ -65,7 +65,7 @@
!6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 5, type: !7, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true, unit: !0, retainedNodes: !2)
!7 = !DISubroutineType(types: !2)
!8 = !DILocation(line: 7, column: 15, scope: !9)
-!9 = !DILexicalBlockFile(scope: !6, file: !1, discriminator: 0)
+!9 = !DILexicalBlockFile(scope: !6, file: !1, discriminator: 2)
!10 = !DILocation(line: 7, column: 3, scope: !9)
!11 = !DILocation(line: 9, column: 5, scope: !9)
!12 = !DILocation(line: 14, column: 3, scope: !6)
Index: llvm/lib/CodeGen/MIRFSDiscriminator.cpp
===================================================================
--- llvm/lib/CodeGen/MIRFSDiscriminator.cpp
+++ llvm/lib/CodeGen/MIRFSDiscriminator.cpp
@@ -150,6 +150,12 @@
if (LineNo == 0)
continue;
unsigned Discriminator = DIL->getDiscriminator();
+ // Clean up discriminators for pseudo probes at the first FS discriminator
+ // pass as their discriminators should not ever be used.
+ if ((Pass == FSDiscriminatorPass::Pass1) && I.isPseudoProbe()) {
+ Discriminator = 0;
+ I.setDebugLoc(DIL->cloneWithDiscriminator(0));
+ }
uint64_t CallStackHashVal = 0;
if (ImprovedFSDiscriminator)
CallStackHashVal = getCallStackHash(DIL);
Index: llvm/include/llvm/CodeGen/MIRFSDiscriminator.h
===================================================================
--- llvm/include/llvm/CodeGen/MIRFSDiscriminator.h
+++ llvm/include/llvm/CodeGen/MIRFSDiscriminator.h
@@ -31,6 +31,7 @@
using namespace sampleprof;
class MIRAddFSDiscriminators : public MachineFunctionPass {
MachineFunction *MF = nullptr;
+ FSDiscriminatorPass Pass;
unsigned LowBit;
unsigned HighBit;
@@ -38,7 +39,7 @@
static char ID;
/// PassNum is the sequence number this pass is called, start from 1.
MIRAddFSDiscriminators(FSDiscriminatorPass P = FSDiscriminatorPass::Pass1)
- : MachineFunctionPass(ID) {
+ : MachineFunctionPass(ID), Pass(P) {
LowBit = getFSPassBitBegin(P);
HighBit = getFSPassBitEnd(P);
assert(LowBit < HighBit && "HighBit needs to be greater than Lowbit");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150741.522854.patch
Type: text/x-patch
Size: 2398 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230517/f4dfb48e/attachment.bin>
More information about the llvm-commits
mailing list