[PATCH] LLVM changes for indirect call target profiling support
Betul Buyukkurt
betulb at codeaurora.org
Fri May 8 16:15:10 PDT 2015
Hi David,
I agree to your suggestions. Not only not chaining the headers, I'm also
looking into not chaining the ProfileData. I'll move the value related
fields into another struct w/ a pointer to the ProfileData variable of the
function. This data will be in its own section. Thanks for the review
comments.
-Betul
> Betul, I have some suggestions on major restructuring of the code, so
> there are not many detailed review comments in this round.
>
> David
>
> ================
> Comment at: docs/LangRef.rst:8086
> @@ +8085,3 @@
> +
> +Arguments:
> +""""""""""
>
> - The argument order of the intrinsic is not consistent with the underlying runtime function. It might be better to keep them in sync.
>
> ================ Comment at: docs/LangRef.rst:8089 @@ +8088,3 @@ + +The first argument is a pointer to a global variable containing the +name of the entity being instrumented. This should generally be the ---------------- Can entity anything else other than function? If not, make it clear 'name of the function ...'.
>
> ================ Comment at: docs/LangRef.rst:8093 @@ +8092,3 @@ + +The second argument is a hash value that can be used by the consumer +of the profile data to detect changes to the instrumented source. It ---------------- Why do we need to do this at instruction level? Function level mismatch checking by the consumer should be good enough.
>
> ================ Comment at: docs/LangRef.rst:8099 @@ +8098,3 @@ +The third argument represents the kind of the value profiling that is done. +The fourth argument refers to the value profiled at the instrumented expression. +The last argument indicates to which of the instrumented expressions for ``name`` ---------------- The fourth argument is the value of the expression being profiled.
>
> ================ Comment at: docs/LangRef.rst:8100 @@ +8099,3 @@ +The fourth argument refers to the value profiled at the instrumented expression. +The last argument indicates to which of the instrumented expressions for ``name`` +should the profiled value be recorded. It should be >= 0. ---------------- The last argument is the index of the instrumented expression within the function.
>
> ================ Comment at: include/llvm/IR/IntrinsicInst.h:386 @@ +385,3 @@ + + GlobalVariable *getName() const { + return cast<GlobalVariable>( ---------------- Maybe GetFunctionName?
>
> ================ Comment at: include/llvm/ProfileData/InstrProfReader.h:149 @@ +148,3 @@ + struct ProfileDataV1 V1Data; + const IntPtrT FunctionPointer; + const uint32_t NumIndirectCallSites; ---------------- Changing ProfileData structure like this will eventually lead to reader code to be come really messy and unmanageable.
>
> This is a simple way to avoid this change -- simply 'peel' the value profile related per-function data into a different data section. It will make adding new value profilers in the future much simpler.
>
> ================ Comment at: include/llvm/ProfileData/InstrProfReader.h:162 @@ -161,2 +161,3 @@ }; - + struct RawHeaderV2 { + struct RawHeaderV1 V1Header; ---------------- Similarly, instead of changing the common header, simply split out the value profiler related control info into subheaders, so that the file layout looks like this:
>
> RawHeader ValueProfilerHeader1 ValueProfilerHeader2
>
> The version number in the main raw header indicates the presence or absense of the value profiler header in the file, and can decide to read it or skip it.
>
> By so doing, the header reading code can be shared between different versions.
>
> I strongly suggest you change like this ..
>
> http://reviews.llvm.org/D8908
>
> EMAIL PREFERENCES http://reviews.llvm.org/settings/panel/emailpreferences/
>
>
http://reviews.llvm.org/D8908
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
More information about the llvm-commits
mailing list