Skip to content

Commit 8c68eb8

Browse files
committed
[SampleFDO] Make FSDiscriminator flag part of function parameters
Add a parameter of IsFSDiscriminator to function getBaseDiscriminatorFromDiscriminator(). This function currently checks the internal flag of --enable-fs-discriminator. This is not good because we might change the default value of the internal flag. Note that we have a default parameter. This is just because create_afdo_tool has a call-site to it. I will remove the default parameter in a later patch. Differential Revision: https://reviews.llvm.org/D104584
1 parent bf0d067 commit 8c68eb8

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

llvm/include/llvm/IR/DebugInfoMetadata.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1744,8 +1744,10 @@ class DILocation : public MDNode {
17441744
static unsigned getBaseDiscriminatorBits() { return getBaseFSBitEnd(); }
17451745

17461746
/// Returns the base discriminator for a given encoded discriminator \p D.
1747-
static unsigned getBaseDiscriminatorFromDiscriminator(unsigned D) {
1748-
if (EnableFSDiscriminator)
1747+
static unsigned
1748+
getBaseDiscriminatorFromDiscriminator(unsigned D,
1749+
bool IsFSDiscriminator = false) {
1750+
if (IsFSDiscriminator)
17491751
return getMaskedDiscriminator(D, getBaseDiscriminatorBits());
17501752
return getUnsignedFromPrefixEncoding(D);
17511753
}
@@ -2198,7 +2200,8 @@ DILocation::cloneWithDiscriminator(unsigned Discriminator) const {
21982200
}
21992201

22002202
unsigned DILocation::getBaseDiscriminator() const {
2201-
return getBaseDiscriminatorFromDiscriminator(getDiscriminator());
2203+
return getBaseDiscriminatorFromDiscriminator(getDiscriminator(),
2204+
EnableFSDiscriminator);
22022205
}
22032206

22042207
unsigned DILocation::getDuplicationFactor() const {

llvm/include/llvm/Transforms/Utils/SampleProfileLoaderBaseImpl.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,12 @@ SampleProfileLoaderBaseImpl<BT>::getInstWeightImpl(const InstructionT &Inst) {
279279

280280
const DILocation *DIL = DLoc;
281281
uint32_t LineOffset = FunctionSamples::getOffset(DIL);
282-
uint32_t Discriminator = DIL->getBaseDiscriminator();
282+
uint32_t Discriminator;
283+
if (EnableFSDiscriminator)
284+
Discriminator = DIL->getDiscriminator();
285+
else
286+
Discriminator = DIL->getBaseDiscriminator();
287+
283288
ErrorOr<uint64_t> R = FS->findSamplesAt(LineOffset, Discriminator);
284289
if (R) {
285290
bool FirstMark =
@@ -298,11 +303,9 @@ SampleProfileLoaderBaseImpl<BT>::getInstWeightImpl(const InstructionT &Inst) {
298303
return Remark;
299304
});
300305
}
301-
LLVM_DEBUG(dbgs() << " " << DLoc.getLine() << "."
302-
<< DIL->getBaseDiscriminator() << ":" << Inst
303-
<< " (line offset: " << LineOffset << "."
304-
<< DIL->getBaseDiscriminator() << " - weight: " << R.get()
305-
<< ")\n");
306+
LLVM_DEBUG(dbgs() << " " << DLoc.getLine() << "." << Discriminator << ":"
307+
<< Inst << " (line offset: " << LineOffset << "."
308+
<< Discriminator << " - weight: " << R.get() << ")\n");
306309
}
307310
return R;
308311
}

llvm/tools/llvm-profgen/ProfiledBinary.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,8 @@ FrameLocationStack ProfiledBinary::symbolize(const InstructionPointer &IP,
440440
FunctionName = FunctionSamples::getCanonicalFnName(FunctionName);
441441
LineLocation Line(CallerFrame.Line - CallerFrame.StartLine,
442442
DILocation::getBaseDiscriminatorFromDiscriminator(
443-
CallerFrame.Discriminator));
443+
CallerFrame.Discriminator,
444+
/* IsFSDiscriminator */ false));
444445
FrameLocation Callsite(FunctionName.str(), Line);
445446
CallStack.push_back(Callsite);
446447
}

0 commit comments

Comments
 (0)