24#define DEBUG_TYPE "pgo-icall-prom-analysis"
30 cl::desc(
"Max number of vtables annotated for a vtable load instruction."));
34bool ICallPromotionAnalysis::isPromotionProfitable(
const AnalysisOptions &Opts,
38 return Count >= Opts.icp_minimum_count_threshold &&
39 Count * 100 >= Opts.icp_remaining_percent_threshold * RemainingCount &&
40 Count * 100 >= Opts.icp_total_percent_threshold * TotalCount;
46uint32_t ICallPromotionAnalysis::getProfitablePromotionCandidates(
49 <<
" Num_targets: " << ValueDataArray.size() <<
"\n");
52 uint64_t RemainingCount = TotalCount;
53 for (;
I < Opts.icp_max_prom &&
I < ValueDataArray.size();
I++) {
57 <<
" Target_func: " << ValueDataArray[
I].
Value <<
"\n");
59 if (!isPromotionProfitable(Opts,
Count, TotalCount, RemainingCount)) {
63 RemainingCount -=
Count;
71 unsigned MaxNumValueData) {
75 if (Opts.icp_max_prom > MaxNumValueData)
76 MaxNumValueData = Opts.icp_max_prom;
78 MaxNumValueData, TotalCount);
79 if (ValueDataArray.empty()) {
83 NumCandidates = getProfitablePromotionCandidates(Opts,
I, TotalCount);
84 return ValueDataArray;
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Represent a mutable reference to an array (0 or more elements consecutively in memory),...
initializer< Ty > init(const Ty &Val)
This is an optimization pass for GlobalISel generic memory operations.
cl::opt< unsigned > MaxNumVTableAnnotations("icp-max-num-vtables", cl::init(6), cl::Hidden, cl::desc("Max number of vtables annotated for a vtable load instruction."))
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Value
const AnalysisOptions & getAnalysisOptions(const LLVMContext &C)
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
LLVM_ABI SmallVector< InstrProfValueData, 4 > getValueProfDataFromInst(const Instruction &Inst, InstrProfValueKind ValueKind, uint32_t MaxNumValueData, uint64_t &TotalC, bool GetNoICPValue=false)
Extract the value profile data from Inst and returns them if Inst is annotated with value profile dat...
MutableArrayRef(T &OneElt) -> MutableArrayRef< T >
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Count