static unsigned getBaseDiscriminatorBits() { return getBaseFSBitEnd(); }
/// Returns the base discriminator for a given encoded discriminator \p D.
- static unsigned getBaseDiscriminatorFromDiscriminator(unsigned D) {
- if (EnableFSDiscriminator)
+ static unsigned
+ getBaseDiscriminatorFromDiscriminator(unsigned D,
+ bool IsFSDiscriminator = false) {
+ if (IsFSDiscriminator)
return getMaskedDiscriminator(D, getBaseDiscriminatorBits());
return getUnsignedFromPrefixEncoding(D);
}
}
unsigned DILocation::getBaseDiscriminator() const {
- return getBaseDiscriminatorFromDiscriminator(getDiscriminator());
+ return getBaseDiscriminatorFromDiscriminator(getDiscriminator(),
+ EnableFSDiscriminator);
}
unsigned DILocation::getDuplicationFactor() const {
const DILocation *DIL = DLoc;
uint32_t LineOffset = FunctionSamples::getOffset(DIL);
- uint32_t Discriminator = DIL->getBaseDiscriminator();
+ uint32_t Discriminator;
+ if (EnableFSDiscriminator)
+ Discriminator = DIL->getDiscriminator();
+ else
+ Discriminator = DIL->getBaseDiscriminator();
+
ErrorOr<uint64_t> R = FS->findSamplesAt(LineOffset, Discriminator);
if (R) {
bool FirstMark =
return Remark;
});
}
- LLVM_DEBUG(dbgs() << " " << DLoc.getLine() << "."
- << DIL->getBaseDiscriminator() << ":" << Inst
- << " (line offset: " << LineOffset << "."
- << DIL->getBaseDiscriminator() << " - weight: " << R.get()
- << ")\n");
+ LLVM_DEBUG(dbgs() << " " << DLoc.getLine() << "." << Discriminator << ":"
+ << Inst << " (line offset: " << LineOffset << "."
+ << Discriminator << " - weight: " << R.get() << ")\n");
}
return R;
}
FunctionName = FunctionSamples::getCanonicalFnName(FunctionName);
LineLocation Line(CallerFrame.Line - CallerFrame.StartLine,
DILocation::getBaseDiscriminatorFromDiscriminator(
- CallerFrame.Discriminator));
+ CallerFrame.Discriminator,
+ /* IsFSDiscriminator */ false));
FrameLocation Callsite(FunctionName.str(), Line);
CallStack.push_back(Callsite);
}