forked from OSchip/llvm-project
[PGO] Add version to getPGOFuncName method
Different version of indexed format may use different name uniquing schemes for static functions. Pass the version info to the name interface so that different schmes can be picked (for profile lookup). llvm-svn: 254838
This commit is contained in:
parent
833fe143f5
commit
307902e297
|
@ -16,9 +16,9 @@
|
|||
#ifndef LLVM_PROFILEDATA_INSTRPROF_H_
|
||||
#define LLVM_PROFILEDATA_INSTRPROF_H_
|
||||
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/StringSet.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/IR/GlobalValue.h"
|
||||
#include "llvm/ProfileData/InstrProfData.inc"
|
||||
#include "llvm/Support/Endian.h"
|
||||
|
@ -30,6 +30,7 @@
|
|||
#include <system_error>
|
||||
#include <vector>
|
||||
|
||||
#define INSTR_PROF_INDEX_VERSION 3
|
||||
namespace llvm {
|
||||
|
||||
class Function;
|
||||
|
@ -132,7 +133,8 @@ inline StringRef getInstrProfFileOverriderFuncName() {
|
|||
|
||||
/// Return the modified name for function \c F suitable to be
|
||||
/// used the key for profile lookup.
|
||||
std::string getPGOFuncName(const Function &F);
|
||||
std::string getPGOFuncName(const Function &F,
|
||||
uint64_t Version = INSTR_PROF_INDEX_VERSION);
|
||||
|
||||
/// Return the modified name for a function suitable to be
|
||||
/// used the key for profile lookup. The function's original
|
||||
|
@ -140,7 +142,8 @@ std::string getPGOFuncName(const Function &F);
|
|||
/// The function is defined in module \c FileName.
|
||||
std::string getPGOFuncName(StringRef RawFuncName,
|
||||
GlobalValue::LinkageTypes Linkage,
|
||||
StringRef FileName);
|
||||
StringRef FileName,
|
||||
uint64_t Version = INSTR_PROF_INDEX_VERSION);
|
||||
|
||||
/// Create and return the global variable for function name used in PGO
|
||||
/// instrumentation. \c FuncName is the name of the function returned
|
||||
|
@ -504,7 +507,7 @@ static inline uint64_t ComputeHash(HashT Type, StringRef K) {
|
|||
}
|
||||
|
||||
const uint64_t Magic = 0x8169666f72706cff; // "\xfflprofi\x81"
|
||||
const uint64_t Version = 3;
|
||||
const uint64_t Version = INSTR_PROF_INDEX_VERSION;
|
||||
const HashT HashType = HashT::MD5;
|
||||
|
||||
// This structure defines the file header of the LLVM profile
|
||||
|
|
|
@ -279,6 +279,7 @@ struct InstrProfReaderIndexBase {
|
|||
virtual bool atEnd() const = 0;
|
||||
virtual void setValueProfDataEndianness(support::endianness Endianness) = 0;
|
||||
virtual ~InstrProfReaderIndexBase() {}
|
||||
virtual uint64_t getVersion() const = 0;
|
||||
};
|
||||
|
||||
typedef OnDiskIterableChainedHashTable<InstrProfLookupTrait>
|
||||
|
@ -312,6 +313,7 @@ public:
|
|||
HashTable->getInfoObj().setValueProfDataEndianness(Endianness);
|
||||
}
|
||||
~InstrProfReaderIndex() override {}
|
||||
uint64_t getVersion() const override { return FormatVersion; }
|
||||
};
|
||||
|
||||
/// Reader for the indexed binary instrprof format.
|
||||
|
@ -328,6 +330,7 @@ private:
|
|||
IndexedInstrProfReader &operator=(const IndexedInstrProfReader &) = delete;
|
||||
|
||||
public:
|
||||
uint64_t getVersion() const { return Index->getVersion(); }
|
||||
IndexedInstrProfReader(std::unique_ptr<MemoryBuffer> DataBuffer)
|
||||
: DataBuffer(std::move(DataBuffer)), Index(nullptr) {}
|
||||
|
||||
|
|
|
@ -74,7 +74,8 @@ namespace llvm {
|
|||
|
||||
std::string getPGOFuncName(StringRef RawFuncName,
|
||||
GlobalValue::LinkageTypes Linkage,
|
||||
StringRef FileName) {
|
||||
StringRef FileName,
|
||||
uint64_t Version LLVM_ATTRIBUTE_UNUSED) {
|
||||
|
||||
// Function names may be prefixed with a binary '1' to indicate
|
||||
// that the backend should not modify the symbols due to any platform
|
||||
|
@ -96,8 +97,9 @@ std::string getPGOFuncName(StringRef RawFuncName,
|
|||
return FuncName;
|
||||
}
|
||||
|
||||
std::string getPGOFuncName(const Function &F) {
|
||||
return getPGOFuncName(F.getName(), F.getLinkage(), F.getParent()->getName());
|
||||
std::string getPGOFuncName(const Function &F, uint64_t Version) {
|
||||
return getPGOFuncName(F.getName(), F.getLinkage(), F.getParent()->getName(),
|
||||
Version);
|
||||
}
|
||||
|
||||
GlobalVariable *createPGOFuncNameVar(Module &M,
|
||||
|
|
Loading…
Reference in New Issue