[llvm] r250574 - Instroduce a template file to define InstrPGO core data structures.

Sean Silva via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 16 16:26:21 PDT 2015


In LLVM we typically add code with its first use, so for consistency this
should probably be reverted and introduced with its first use.

-- Sean Silva

On Fri, Oct 16, 2015 at 4:17 PM, Xinliang David Li via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: davidxl
> Date: Fri Oct 16 18:17:34 2015
> New Revision: 250574
>
> URL: http://llvm.org/viewvc/llvm-project?rev=250574&view=rev
> Log:
> Instroduce a template file to define InstrPGO core data structures.
>
> Changing PGO data format layout can be a pain. Many different places need
> to be touched and kept in sync. Failing to do so usually results in errors
> very time consuming to debug.
>
> This file is intended to be the master file that defines the layout of the
> core runtime data structures. Currently only two structure is covered: Per
> function ProfData structure and the function record structure used in
> coverage mapping.
>
> No client code has been made yet, so this commit is NFC.
>
>
>
> Added:
>     llvm/trunk/include/llvm/ProfileData/InstrProfData.inc
>
> Added: llvm/trunk/include/llvm/ProfileData/InstrProfData.inc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/InstrProfData.inc?rev=250574&view=auto
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ProfileData/InstrProfData.inc (added)
> +++ llvm/trunk/include/llvm/ProfileData/InstrProfData.inc Fri Oct 16
> 18:17:34 2015
> @@ -0,0 +1,88 @@
> +//===-- InstrProfData.inc - instr profiling runtime structures-----===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +//
> +// This file defines templates for core runtime data structures used by
> +// instrumentation based profiling and coverage mapping. The
> instrumentation
> +// runtime library, the compiler IR lowering, and profile reader/writer
> need
> +// to use the same template to make sure the same data structure is
> defined
> +// consistently.
> +//
> +// Examples of how the template is used:
> +// 1. To declare a structure:
> +//
> +// struct ProfData {
> +// #define INSTR_PROF_DATA(Type, LLVMTypeVar, LLVMType, Name,
> Initializer) \
> +//    Type Name;
> +// #include "ProfileData/InstrProfData.inc"
> +// };
> +//
> +// 2. To define local variables for struct member's LLVM types"
> +//
> +// #define INSTR_PROF_DATA(Type, LLVMTypeVar, LLVMType, Name,
> Initializer) \
> +//   LLVMTypeVar = LLVMType;
> +// #include "ProfileData/InstrProfData.inc"
> +//
> +// 3. To construct LLVM type arrays for the struct type:
> +//
> +// Type *DataTypes[] = {
> +// #define INSTR_PROF_DATA(Type, LLVMTypeVar, LLVMType, Name,
> Initializer) \
> +//   LLVMTypeVar,
> +// #include "ProfileData/InstrProfData.inc"
> +// };
> +//
> +// 4. To construct constant array for the initializers:
> +// #define INSTR_PROF_DATA(Type, LLVMTypeVar, LLVMType, Name,
> Initializer) \
> +//   Initializer,
> +// Constant *ConstantVals[] = {
> +// #include "ProfileData/InstrProfData.inc"
> +// };
>
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef INSTR_PROF_DATA
> +#define INSTR_PROF_DATA(Type, LLVMTypeVar, LLVMType, Name, Initializer)
> +#endif
> +
> +// INSTR_PROF_DATA_START
> +INSTR_PROF_DATA(const uint32_t, Int32Ty, llvm::Type::getInt32Ty(Ctx),
> NameSize, \
> +                ConstantInt::get(Int32Ty, NameSize))
> +INSTR_PROF_DATA(const uint32_t, Int32Ty, llvm::Type::getInt32Ty(Ctx),
> NumCounters, \
> +                ConstantInt::get(Int32Ty, NumCounters))
> +INSTR_PROF_DATA(const uint64_t, Int64Ty, llvm::Type::getInt64Ty(Ctx),
> FuncHash, \
> +                ConstantInt::get(Int64Ty, FuncHash))
> +INSTR_PROF_DATA(const IntPtrT, Int8PtrTy,llvm::Type::getInt8PtrTy(Ctx),
> NamePtr, \
> +                ConstantExpr::getBitCast(Name, Int8PtrTy))
> +INSTR_PROF_DATA(const IntPtrT, Int64PtrTy,
> llvm::Type::getInt64PtrTy(Ctx), CounterPtr, \
> +                ConstantExpr::getBitCast(CounterPtr, Int8PtrTy))
> +// INSTR_PROF_DATA_END
> +
> +#ifdef INSTR_PROF_DATA
> +#undef INSTR_PROF_DATA
> +#endif
> +
> +
> +#ifndef COVMAP_FUNC_RECORD
> +#define COVMAP_FUNC_RECORD(Type, LLVMTypeVar, LLVMType, Name, Initializer)
> +#endif
> +
> +// COVMAP_FUNC_RECORD_START
> +COVMAP_FUNC_RECORD(const IntPtrT, Int8PtrTy,
> llvm::Type::getInt8PtrTy(Ctx), \
> +                   NamePtr, llvm::ConstantExpr::getBitCast(NamePtr,
> Int8PtrTy))
> +COVMAP_FUNC_RECORD(const uint32_t, Int32Ty, llvm::Type::getInt32Ty(Ctx), \
> +                   NameSize, llvm::ConstantInt::get(Int32Ty, NameSize))
> +COVMAP_FUNC_RECORD(const uint32_t, Int32Ty, llvm::Type::getInt32Ty(Ctx), \
> +                   DataSize, llvm::ConstantInt::get(Int32Ty, DataSize))
> +COVMAP_FUNC_RECORD(const uint64_t, Int64Ty, llvm::Type::getInt64Ty(Ctx), \
> +                   FuncHash, llvm::ConstantInt::get(Int64Ty, FuncSize))
> +// COVMAP_FUNC_RECORD_END
> +
> +#ifdef COVMAP_FUNC_RECORD
> +#undef COVMAP_FUNC_RECORD
> +#endif
> +
> +
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151016/e3894439/attachment.html>


More information about the llvm-commits mailing list