[llvm] r254038 - [PGO] Add mapper callback to interfaces retrieving value data for site (NFC)
Sean Silva via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 24 16:06:55 PST 2015
On Tue, Nov 24, 2015 at 3:36 PM, Xinliang David Li via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: davidxl
> Date: Tue Nov 24 17:36:52 2015
> New Revision: 254038
>
> URL: http://llvm.org/viewvc/llvm-project?rev=254038&view=rev
> Log:
> [PGO] Add mapper callback to interfaces retrieving value data for site
> (NFC)
>
> This allows cleaner implementation and merging retrieving/mapping in
> one pass.
>
>
> Modified:
> llvm/trunk/include/llvm/ProfileData/InstrProf.h
> llvm/trunk/lib/ProfileData/InstrProf.cpp
>
> Modified: llvm/trunk/include/llvm/ProfileData/InstrProf.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/InstrProf.h?rev=254038&r1=254037&r2=254038&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ProfileData/InstrProf.h (original)
> +++ llvm/trunk/include/llvm/ProfileData/InstrProf.h Tue Nov 24 17:36:52
> 2015
> @@ -261,9 +261,11 @@ struct InstrProfRecord {
> uint32_t Site) const;
> /// Return the array of profiled values at \p Site.
> inline std::unique_ptr<InstrProfValueData[]>
> - getValueForSite(uint32_t ValueKind, uint32_t Site) const;
> - inline void getValueForSite(InstrProfValueData Dest[], uint32_t
> ValueKind,
> - uint32_t Site) const;
> + getValueForSite(uint32_t ValueKind, uint32_t Site,
> + uint64_t (*ValueMapper)(uint32_t, uint64_t) = 0) const;
> + inline void
> + getValueForSite(InstrProfValueData Dest[], uint32_t ValueKind, uint32_t
> Site,
> + uint64_t (*ValueMapper)(uint32_t, uint64_t) = 0) const;
> /// Reserve space for NumValueSites sites.
> inline void reserveSites(uint32_t ValueKind, uint32_t NumValueSites);
> /// Add ValueData for ValueKind at value Site.
> @@ -365,22 +367,27 @@ uint32_t InstrProfRecord::getNumValueDat
> return getValueSitesForKind(ValueKind)[Site].ValueData.size();
> }
>
> -std::unique_ptr<InstrProfValueData[]>
> -InstrProfRecord::getValueForSite(uint32_t ValueKind, uint32_t Site) const
> {
> +std::unique_ptr<InstrProfValueData[]> InstrProfRecord::getValueForSite(
> + uint32_t ValueKind, uint32_t Site,
> + uint64_t (*ValueMapper)(uint32_t, uint64_t)) const {
> uint32_t N = getNumValueDataForSite(ValueKind, Site);
> if (N == 0)
> return std::unique_ptr<InstrProfValueData[]>(nullptr);
>
> auto VD = llvm::make_unique<InstrProfValueData[]>(N);
> - getValueForSite(VD.get(), ValueKind, Site);
> + getValueForSite(VD.get(), ValueKind, Site, ValueMapper);
>
> return VD;
> }
> +
> void InstrProfRecord::getValueForSite(InstrProfValueData Dest[],
> - uint32_t ValueKind, uint32_t Site)
> const {
> + uint32_t ValueKind, uint32_t Site,
> + uint64_t (*ValueMapper)(uint32_t,
> + uint64_t))
> const {
> uint32_t I = 0;
> for (auto V : getValueSitesForKind(ValueKind)[Site].ValueData) {
> - Dest[I] = V;
> + Dest[I].Value = ValueMapper ? ValueMapper(ValueKind, V.Value) :
> V.Value;
> + Dest[I].Count = V.Count;
> I++;
> }
> }
>
> Modified: llvm/trunk/lib/ProfileData/InstrProf.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/InstrProf.cpp?rev=254038&r1=254037&r2=254038&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ProfileData/InstrProf.cpp (original)
> +++ llvm/trunk/lib/ProfileData/InstrProf.cpp Tue Nov 24 17:36:52 2015
> @@ -131,6 +131,18 @@ GlobalVariable *createPGOFuncNameVar(Fun
> return createPGOFuncNameVar(*F.getParent(), F.getLinkage(), FuncName);
> }
>
> +uint64_t StringToHash(uint32_t ValueKind, uint64_t Value) {
>
Please follow the naming convention.
-- Sean Silva
> + switch (ValueKind) {
> + case IPVK_IndirectCallTarget:
> + return IndexedInstrProf::ComputeHash(IndexedInstrProf::HashType,
> + (const char *)Value);
> + break;
> + default:
> + llvm_unreachable("value kind not handled !");
> + }
> + return Value;
> +}
> +
> void ValueProfRecord::deserializeTo(InstrProfRecord &Record,
> InstrProfRecord::ValueMapType *VMap) {
> Record.reserveSites(Kind, NumValueSites);
> @@ -152,17 +164,7 @@ void ValueProfRecord::serializeFrom(cons
> for (uint32_t S = 0; S < NumValueSites; S++) {
> uint32_t ND = Record.getNumValueDataForSite(ValueKind, S);
> SiteCountArray[S] = ND;
> - Record.getValueForSite(DstVD, ValueKind, S);
> - for (uint32_t I = 0; I < ND; I++) {
> - switch (ValueKind) {
> - case IPVK_IndirectCallTarget:
> - DstVD[I].Value = IndexedInstrProf::ComputeHash(
> - IndexedInstrProf::HashType, (const char *)DstVD[I].Value);
> - break;
> - default:
> - llvm_unreachable("value kind not handled !");
> - }
> - }
> + Record.getValueForSite(DstVD, ValueKind, S, StringToHash);
> DstVD += ND;
> }
> }
>
>
> _______________________________________________
> 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/20151124/8943ad43/attachment.html>
More information about the llvm-commits
mailing list