const char *CurPtr = BufferStart;
uint64_t MaxCount = 0;
while (CurPtr < BufferEnd) {
- // Read the mangled function name.
- const char *FuncName = CurPtr;
- // FIXME: Something will need to be added to distinguish static functions.
+ // Read the function name.
+ const char *FuncStart = CurPtr;
CurPtr = strchr(CurPtr, ' ');
if (!CurPtr) {
ReportBadPGOData(CGM, "pgo data file has malformed function entry");
return;
}
- StringRef MangledName(FuncName, CurPtr - FuncName);
+ StringRef FuncName(FuncStart, CurPtr - FuncStart);
// Read the number of counters.
char *EndPtr;
return;
}
CurPtr = EndPtr; // Point to '\n'.
- FunctionCounts[MangledName] = Count;
+ FunctionCounts[FuncName] = Count;
MaxCount = Count > MaxCount ? Count : MaxCount;
// There is one line for each counter; skip over those lines.
// Skip over the blank line separating functions.
CurPtr += 2;
- DataOffsets[MangledName] = FuncName - BufferStart;
+ DataOffsets[FuncName] = FuncStart - BufferStart;
}
MaxFunctionCount = MaxCount;
}
/// Return true if a function is hot. If we know nothing about the function,
/// return false.
-bool PGOProfileData::isHotFunction(StringRef MangledName) {
+bool PGOProfileData::isHotFunction(StringRef FuncName) {
llvm::StringMap<uint64_t>::const_iterator CountIter =
- FunctionCounts.find(MangledName);
+ FunctionCounts.find(FuncName);
// If we know nothing about the function, return false.
if (CountIter == FunctionCounts.end())
return false;
/// Return true if a function is cold. If we know nothing about the function,
/// return false.
-bool PGOProfileData::isColdFunction(StringRef MangledName) {
+bool PGOProfileData::isColdFunction(StringRef FuncName) {
llvm::StringMap<uint64_t>::const_iterator CountIter =
- FunctionCounts.find(MangledName);
+ FunctionCounts.find(FuncName);
// If we know nothing about the function, return false.
if (CountIter == FunctionCounts.end())
return false;
return CountIter->getValue() <= (uint64_t)(0.01 * (double)MaxFunctionCount);
}
-bool PGOProfileData::getFunctionCounts(StringRef MangledName,
+bool PGOProfileData::getFunctionCounts(StringRef FuncName,
std::vector<uint64_t> &Counts) {
// Find the relevant section of the pgo-data file.
llvm::StringMap<unsigned>::const_iterator OffsetIter =
- DataOffsets.find(MangledName);
+ DataOffsets.find(FuncName);
if (OffsetIter == DataOffsets.end())
return true;
const char *CurPtr = DataBuffer->getBufferStart() + OffsetIter->getValue();
llvm::Type *Int64PtrTy = llvm::Type::getInt64PtrTy(Ctx);
llvm::Type *Args[] = {
- Int8PtrTy, // const char *MangledName
+ Int8PtrTy, // const char *FuncName
Int32Ty, // uint32_t NumCounters
Int64PtrTy // uint64_t *Counters
};
llvm::Constant *EmitFunc =
CGM.getModule().getOrInsertFunction("llvm_pgo_emit", FTy);
- llvm::Constant *MangledName =
+ llvm::Constant *NameString =
CGM.GetAddrOfConstantCString(Name, "__llvm_pgo_name");
- MangledName = llvm::ConstantExpr::getBitCast(MangledName, Int8PtrTy);
- PGOBuilder.CreateCall3(EmitFunc, MangledName,
+ NameString = llvm::ConstantExpr::getBitCast(NameString, Int8PtrTy);
+ PGOBuilder.CreateCall3(EmitFunc, NameString,
PGOBuilder.getInt32(NumRegionCounters),
PGOBuilder.CreateBitCast(RegionCounters, Int64PtrTy));
}
PGOProfileData(CodeGenModule &CGM, std::string Path);
/// Fill Counts with the profile data for the given function name. Returns
/// false on success.
- bool getFunctionCounts(StringRef MangledName, std::vector<uint64_t> &Counts);
+ bool getFunctionCounts(StringRef FuncName, std::vector<uint64_t> &Counts);
/// Return true if a function is hot. If we know nothing about the function,
/// return false.
- bool isHotFunction(StringRef MangledName);
+ bool isHotFunction(StringRef FuncName);
/// Return true if a function is cold. If we know nothing about the function,
/// return false.
- bool isColdFunction(StringRef MangledName);
+ bool isColdFunction(StringRef FuncName);
};
/// Per-function PGO state. This class should generally not be used directly,