LLVM  7.0.0svn
Macros | Functions | Variables
IndirectCallPromotion.cpp File Reference
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/IndirectCallPromotionAnalysis.h"
#include "llvm/Analysis/IndirectCallSiteVisitor.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/ProfileSummaryInfo.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/Pass.h"
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Instrumentation.h"
#include "llvm/Transforms/PGOInstrumentation.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/CallPromotionUtils.h"
#include <cassert>
#include <cstdint>
#include <memory>
#include <string>
#include <utility>
#include <vector>
Include dependency graph for IndirectCallPromotion.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "pgo-icall-prom"
 

Functions

 STATISTIC (NumOfPGOICallPromotion, "Number of indirect call promotions.")
 
 STATISTIC (NumOfPGOICallsites, "Number of indirect call candidate sites.")
 
 INITIALIZE_PASS_BEGIN (PGOIndirectCallPromotionLegacyPass, "pgo-icall-prom", "Use PGO instrumentation profile to promote indirect " "calls to direct calls.", false, false) INITIALIZE_PASS_END(PGOIndirectCallPromotionLegacyPass
 
static bool promoteIndirectCalls (Module &M, ProfileSummaryInfo *PSI, bool InLTO, bool SamplePGO, ModuleAnalysisManager *AM=nullptr)
 

Variables

static cl::opt< boolDisableICP ("disable-icp", cl::init(false), cl::Hidden, cl::desc("Disable indirect call promotion"))
 
static cl::opt< unsignedICPCutOff ("icp-cutoff", cl::init(0), cl::Hidden, cl::ZeroOrMore, cl::desc("Max number of promotions for this compilation"))
 
static cl::opt< unsignedICPCSSkip ("icp-csskip", cl::init(0), cl::Hidden, cl::ZeroOrMore, cl::desc("Skip Callsite up to this number for this compilation"))
 
static cl::opt< boolICPLTOMode ("icp-lto", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion in LTO " "mode"))
 
static cl::opt< boolICPSamplePGOMode ("icp-samplepgo", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion in SamplePGO mode"))
 
static cl::opt< boolICPCallOnly ("icp-call-only", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion for call instructions " "only"))
 
static cl::opt< boolICPInvokeOnly ("icp-invoke-only", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion for " "invoke instruction only"))
 
static cl::opt< boolICPDUMPAFTER ("icp-dumpafter", cl::init(false), cl::Hidden, cl::desc("Dump IR after transformation happens"))
 
pgo icall prom
 
pgo icall Use PGO instrumentation profile to promote indirect calls to direct calls
 
pgo icall Use PGO instrumentation profile to promote indirect calls to direct false
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "pgo-icall-prom"

Function Documentation

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( PGOIndirectCallPromotionLegacyPass  ,
"pgo-icall-prom ,
"Use PGO instrumentation profile to promote indirect " "calls to direct calls."  ,
false  ,
false   
)

◆ promoteIndirectCalls()

static bool promoteIndirectCalls ( Module M,
ProfileSummaryInfo PSI,
bool  InLTO,
bool  SamplePGO,
ModuleAnalysisManager AM = nullptr 
)
static

◆ STATISTIC() [1/2]

STATISTIC ( NumOfPGOICallPromotion  ,
"Number of indirect call promotions."   
)

◆ STATISTIC() [2/2]

STATISTIC ( NumOfPGOICallsites  ,
"Number of indirect call candidate sites."   
)

Variable Documentation

◆ calls

pgo icall Use PGO instrumentation profile to promote indirect calls to direct calls

Definition at line 156 of file IndirectCallPromotion.cpp.

◆ DisableICP

cl::opt<bool> DisableICP("disable-icp", cl::init(false), cl::Hidden, cl::desc("Disable indirect call promotion"))
static

Referenced by promoteIndirectCalls().

◆ false

pgo icall Use PGO instrumentation profile to promote indirect calls to direct false

Definition at line 156 of file IndirectCallPromotion.cpp.

◆ ICPCallOnly

cl::opt<bool> ICPCallOnly("icp-call-only", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion for call instructions " "only"))
static

◆ ICPCSSkip

cl::opt<unsigned> ICPCSSkip("icp-csskip", cl::init(0), cl::Hidden, cl::ZeroOrMore, cl::desc("Skip Callsite up to this number for this compilation"))
static

◆ ICPCutOff

cl::opt<unsigned> ICPCutOff("icp-cutoff", cl::init(0), cl::Hidden, cl::ZeroOrMore, cl::desc("Max number of promotions for this compilation"))
static

◆ ICPDUMPAFTER

cl::opt<bool> ICPDUMPAFTER("icp-dumpafter", cl::init(false), cl::Hidden, cl::desc("Dump IR after transformation happens"))
static

Referenced by promoteIndirectCalls().

◆ ICPInvokeOnly

cl::opt<bool> ICPInvokeOnly("icp-invoke-only", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion for " "invoke instruction only"))
static

◆ ICPLTOMode

cl::opt<bool> ICPLTOMode("icp-lto", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion in LTO " "mode"))
static

◆ ICPSamplePGOMode

cl::opt<bool> ICPSamplePGOMode("icp-samplepgo", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion in SamplePGO mode"))
static

◆ prom

pgo icall prom

Definition at line 156 of file IndirectCallPromotion.cpp.