[PATCH] D68718: [llvm-profdata] Make "malformed-ptr-to-counter-array.test" textual
wael yehia via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 9 15:43:45 PDT 2019
w2yehia added a comment.
Hi Vedant, thanks for the quick fix.
The test file works, and I'm able to patch it when I add more value profiles.
I think the comments should be rearranged like so (basically I fixed the placement of the Counter and Name sections):
// Header
//
// INSTR_PROF_RAW_HEADER(uint64_t, Magic, __llvm_profile_get_magic())
// INSTR_PROF_RAW_HEADER(uint64_t, Version, __llvm_profile_get_version())
// INSTR_PROF_RAW_HEADER(uint64_t, DataSize, DataSize)
// INSTR_PROF_RAW_HEADER(uint64_t, CountersSize, CountersSize)
// INSTR_PROF_RAW_HEADER(uint64_t, NamesSize, NamesSize)
// INSTR_PROF_RAW_HEADER(uint64_t, CountersDelta, (uintptr_t)CountersBegin)
// INSTR_PROF_RAW_HEADER(uint64_t, NamesDelta, (uintptr_t)NamesBegin)
// INSTR_PROF_RAW_HEADER(uint64_t, ValueKindLast, IPVK_Last)
RUN: printf '\201rforpl\377' > %t.profraw
RUN: printf '\4\0\0\0\0\0\0\0' >> %t.profraw
RUN: printf '\1\0\0\0\0\0\0\0' >> %t.profraw
RUN: printf '\2\0\0\0\0\0\0\0' >> %t.profraw
RUN: printf '\10\0\0\0\0\0\0\0' >> %t.profraw
RUN: printf '\0\0\6\0\1\0\0\0' >> %t.profraw
RUN: printf '\0\0\6\0\2\0\0\0' >> %t.profraw
RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw
// Data Section
//
// INSTR_PROF_DATA(const uint64_t, llvm::Type::getInt64Ty(Ctx), NameRef, \
// ConstantInt::get(llvm::Type::getInt64Ty(Ctx), \
// IndexedInstrProf::ComputeHash(getPGOFuncNameVarInitializer(Inc->getName()))))
// INSTR_PROF_DATA(const uint64_t, llvm::Type::getInt64Ty(Ctx), FuncHash, \
// ConstantInt::get(llvm::Type::getInt64Ty(Ctx), \
// Inc->getHash()->getZExtValue()))
// INSTR_PROF_DATA(const IntPtrT, llvm::Type::getInt64PtrTy(Ctx), CounterPtr, \
// ConstantExpr::getBitCast(CounterPtr, \
// llvm::Type::getInt64PtrTy(Ctx)))
// INSTR_PROF_DATA(const IntPtrT, llvm::Type::getInt8PtrTy(Ctx), FunctionPointer, \
// FunctionAddr)
// INSTR_PROF_DATA(IntPtrT, llvm::Type::getInt8PtrTy(Ctx), Values, \
// ValuesPtrExpr)
// INSTR_PROF_DATA(const uint32_t, llvm::Type::getInt32Ty(Ctx), NumCounters, \
// ConstantInt::get(llvm::Type::getInt32Ty(Ctx), NumCounters))
// INSTR_PROF_DATA(const uint16_t, Int16ArrayTy, NumValueSites[IPVK_Last+1], \
// ConstantArray::get(Int16ArrayTy, Int16ArrayVals)
RUN: printf '\067\265\035\031\112\165\023\344' >> %t.profraw
RUN: printf '\02\0\0\0\0\0\0\0' >> %t.profraw
// Note: The CounterPtr here is off-by-one. This should trigger a malformed profile error.
RUN: printf '\0\0\6\0\1\0\0\1' >> %t.profraw
RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw
RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw
RUN: printf '\02\0\0\0\0\0\0\0' >> %t.profraw
// Counter Section
RUN: printf '\067\0\0\0\0\0\0\0' >> %t.profraw
RUN: printf '\101\0\0\0\0\0\0\0' >> %t.profraw
// Name Section
RUN: printf '\3\0bar\0\0\0' >> %t.profraw
RUN: not llvm-profdata merge -o /dev/null %t.profraw 2>&1 | FileCheck %s
CHECK: Malformed instrumentation profile data
Also, an alternative to listing the fields of the `ProfData` struct, is to use this comment or something similar to indicate that an array of `ProfData` (or `__llvm_profile_data`) objects follow:
struct ProfData {
#define INSTR_PROF_DATA(Type, LLVMType, Name, Initializer) \
Type Name;
#include "llvm/ProfileData/InstrProfData.inc"
};
that way the comment doesn't have to be updated everytime we update ProfData.
Either way is fine.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D68718/new/
https://reviews.llvm.org/D68718
More information about the llvm-commits
mailing list