SamplePGO: convert callsite samples map key from callsite_location to callsite_locati...
authorDehao Chen <dehao@google.com>
Thu, 13 Apr 2017 19:52:10 +0000 (19:52 +0000)
committerDehao Chen <dehao@google.com>
Thu, 13 Apr 2017 19:52:10 +0000 (19:52 +0000)
commit2c7ca9b5df41332b32adec1def081f48ab6ec5d7
treeffab65ae25229620b93f6f38e7a6cce2bc6666a1
parenta80f2041f78b025f573ab237186397e8834e1d59
SamplePGO: convert callsite samples map key from callsite_location to callsite_location+callee_name

Summary: For iterative SamplePGO, an indirect call can be speculatively promoted to multiple direct calls and get inlined. All these promoted direct calls will share the same callsite location (offset+discriminator). With the current implementation, we cannot distinguish between different promotion candidates and its inlined instance. This patch adds callee_name to the key of the callsite sample map. And added helper functions to get all inlined callee samples for a given callsite location. This helps the profile annotator promote correct targets and inline it before annotation, and ensures all indirect call targets to be annotated correctly.

Reviewers: davidxl, dnovillo

Reviewed By: davidxl

Subscribers: andreadb, llvm-commits

Differential Revision: https://reviews.llvm.org/D31950

llvm-svn: 300240
llvm/include/llvm/ProfileData/SampleProf.h
llvm/lib/ProfileData/SampleProf.cpp
llvm/lib/ProfileData/SampleProfReader.cpp
llvm/lib/ProfileData/SampleProfWriter.cpp
llvm/lib/Transforms/IPO/SampleProfile.cpp
llvm/test/Transforms/SampleProfile/Inputs/indirect-call.prof
llvm/test/Transforms/SampleProfile/indirect-call.ll