[PATCH] D15541: [PGO] generate different version for FE instrumentation and IR level instrumentation profiles
Justin Bogner via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 8 11:30:46 PST 2016
Rong Xu <xur at google.com> writes:
> xur updated this revision to Diff 43190.
> xur added a comment.
>
> Integrated David's comments.
>
>
> http://reviews.llvm.org/D15541
>
> Files:
> lib/profile/InstrProfData.inc
> lib/profile/InstrProfiling.c
>
>
> Index: lib/profile/InstrProfiling.c
> ===================================================================
> --- lib/profile/InstrProfiling.c
> +++ lib/profile/InstrProfiling.c
> @@ -18,6 +18,9 @@
>
> char *(*GetEnvHook)(const char *) = 0;
>
> +/* IR level instrumentation declares a strong symbol and sets the value to 1. */
> +COMPILER_RT_WEAK int IR_LEVEL_PROF_VARNAME = 0;
> +
> COMPILER_RT_VISIBILITY uint64_t __llvm_profile_get_magic(void) {
> return sizeof(void *) == sizeof(uint64_t) ? (INSTR_PROF_RAW_MAGIC_64)
> : (INSTR_PROF_RAW_MAGIC_32);
> @@ -32,6 +35,8 @@
> }
>
> COMPILER_RT_VISIBILITY uint64_t __llvm_profile_get_version(void) {
> + if (IR_LEVEL_PROF_VARNAME)
> + return INSTR_PROF_RAW_VERSION | VARIANT_MASK_IR_PROF;
> return INSTR_PROF_RAW_VERSION;
> }
>
> Index: lib/profile/InstrProfData.inc
> ===================================================================
> --- lib/profile/InstrProfData.inc
> +++ lib/profile/InstrProfData.inc
> @@ -678,6 +678,18 @@
> /* Raw profile format version. */
> #define INSTR_PROF_RAW_VERSION 2
>
> +/* Profile version is always of type uint_64_t. Reserve the upper 8 bits in the
> + * version for other variants of profile. We set the lowest bit of the upper 8
> + * bits (i.e. bit 56) to 1 to indicate if this is an IR-level instrumentaiton
> + * generated profile, and 0 if this is a Clang FE generated profile.
> + */
> +#define VARIANT_MASKS_ALL 0xff00000000000000ULL
> +#define VARIANT_MASK_IR_PROF (0x1ULL << 56)
> +#define GET_VERSION(V) ((V)&~VARIANT_MASKS_ALL)
> +#define IR_LEVEL_PROF_VARNAME __llvm_profile_ir_level
> +#define IR_LEVEL_PROF_STRINGFY(s) #s
> +#define IR_LEVEL_PROF_STRING(s) IR_LEVEL_PROF_STRINGFY(s)
It would be simpler to just have the instrumentation logic in llvm emit
the fully processed version number, then the compiler-rt code doesn't
need to know anything about the version variant flags.
David: WDYT?
> +
> /* Runtime section names and name strings. */
> #define INSTR_PROF_DATA_SECT_NAME __llvm_prf_data
> #define INSTR_PROF_NAME_SECT_NAME __llvm_prf_names
>
>
More information about the llvm-commits
mailing list