LLVM: lib/CodeGen/GlobalMergeFunctions.cpp File Reference (original) (raw)
Go to the source code of this file.
Namespaces | |
---|---|
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. | |
Functions | |
---|---|
STATISTIC (NumMergedFunctions, "Number of functions that are actually merged using function hash") | |
STATISTIC (NumAnalyzedModues, "Number of modules that are analyzed") | |
STATISTIC (NumAnalyzedFunctions, "Number of functions that are analyzed") | |
STATISTIC (NumEligibleFunctions, "Number of functions that are eligible") | |
static bool | isCalleeOperand (const CallBase *CI, unsigned OpIdx) |
Returns true if the \OpIdx operand of CI is the callee operand. | |
static bool | canParameterizeCallOperand (const CallBase *CI, unsigned OpIdx) |
bool | isEligibleFunction (Function *F) |
Returns true if function F is eligible for merging. | |
static bool | isEligibleInstructionForConstantSharing (const Instruction *I) |
static bool | ignoreOp (const Instruction *I, unsigned OpIdx) |
static Value * | createCast (IRBuilder<> &Builder, Value *V, Type *DestTy) |
static Function * | createMergedFunction (FuncMergeInfo &FI, ArrayRef< Type * > ConstParamTypes, const ParamLocsVecTy &ParamLocsVec) |
static void | createThunk (FuncMergeInfo &FI, ArrayRef< Constant * > Params, Function *ToFunc) |
static bool | checkConstHashCompatible (const DenseMap< IndexPair, stable_hash > &OldInstOpndIndexToConstHash, const DenseMap< IndexPair, stable_hash > &CurrInstOpndIndexToConstHash) |
static bool | checkConstLocationCompatible (const StableFunctionMap::StableFunctionEntry &SF, const IndexInstrMap &IndexInstruction, const ParamLocsVecTy &ParamLocsVec) |
static ParamLocsVecTy | computeParamInfo (const SmallVector< std::unique_ptr< StableFunctionMap::StableFunctionEntry > > &SFS) |
INITIALIZE_PASS_BEGIN (GlobalMergeFuncPassWrapper, "global-merge-func", "Global merge function pass", false, false) INITIALIZE_PASS_END(GlobalMergeFuncPassWrapper | |
ModulePass * | llvm::createGlobalMergeFuncPass () |
This pass performs merging similar functions globally. | |
Variables | |
---|---|
static cl::opt< bool > | DisableCGDataForMerging ("disable-cgdata-for-merging", cl::Hidden, cl::desc("Disable codegen data for function merging. Local " "merging is still enabled within a module."), cl::init(false)) |
global merge | func |
global merge Global merge function | pass |
global merge Global merge function | false |
◆ DEBUG_TYPE
#define DEBUG_TYPE "global-merge-func"
◆ canParameterizeCallOperand()
◆ checkConstHashCompatible()
Definition at line 337 of file GlobalMergeFunctions.cpp.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), and llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::insert().
Referenced by llvm::GlobalMergeFunc::merge().
◆ checkConstLocationCompatible()
◆ computeParamInfo()
◆ createCast()
Definition at line 143 of file GlobalMergeFunctions.cpp.
References assert(), llvm::IRBuilderBase::CreateBitCast(), createCast(), llvm::IRBuilderBase::CreateExtractValue(), llvm::IRBuilderBase::CreateInsertValue(), llvm::IRBuilderBase::CreateIntToPtr(), llvm::IRBuilderBase::CreatePtrToInt(), llvm::PoisonValue::get(), llvm::Type::getStructElementType(), llvm::Type::getStructNumElements(), I, llvm::Type::isArrayTy(), llvm::Type::isIntegerTy(), llvm::Type::isPointerTy(), and llvm::Type::isStructTy().
Referenced by createCast(), createMergedFunction(), and createThunk().
◆ createMergedFunction()
Definition at line 218 of file GlobalMergeFunctions.cpp.
References llvm::Function::addFnAttr(), llvm::SmallVectorImpl< T >::append(), llvm::Function::arg_begin(), assert(), llvm::Function::begin(), llvm::ArrayRef< T >::begin(), llvm::Function::copyAttributesFrom(), llvm::Function::Create(), createCast(), llvm::GlobalValue::DefaultStorageClass, llvm::ArrayRef< T >::end(), FuncMergeInfo::F, llvm::FunctionType::get(), llvm::Function::getArg(), llvm::Value::getName(), llvm::Value::getType(), FuncMergeInfo::IndexInstruction, llvm::GlobalValue::InternalLinkage, llvm::MapVector< KeyT, ValueT, MapType, VectorType >::lookup(), llvm::GlobalMergeFunc::MergingInstanceSuffix, llvm::Value::replaceAllUsesWith(), llvm::GlobalValue::setDLLStorageClass(), llvm::GlobalValue::setLinkage(), llvm::Function::setSubprogram(), llvm::SmallVectorBase< Size_T >::size(), llvm::Function::splice(), and llvm::StringRef::str().
Referenced by llvm::GlobalMergeFunc::merge().
◆ createThunk()
Definition at line 283 of file GlobalMergeFunctions.cpp.
References assert(), llvm::BasicBlock::Create(), llvm::IRBuilderBase::CreateCall(), createCast(), llvm::IRBuilderBase::CreateRet(), llvm::IRBuilderBase::CreateRetVoid(), FuncMergeInfo::F, llvm::Function::getAttributes(), llvm::Function::getCallingConv(), llvm::Function::getFunctionType(), llvm::FunctionType::getNumParams(), llvm::CallBase::setAttributes(), llvm::CallBase::setCallingConv(), llvm::CallInst::setTailCallKind(), llvm::ArrayRef< T >::size(), llvm::CallingConv::SwiftTail, llvm::CallInst::TCK_MustTail, and llvm::CallInst::TCK_Tail.
Referenced by llvm::GlobalMergeFunc::merge().
◆ ignoreOp()
◆ INITIALIZE_PASS_BEGIN()
INITIALIZE_PASS_BEGIN | ( | GlobalMergeFuncPassWrapper | , |
---|---|---|---|
"global-merge-func" | , | ||
"Global merge function pass" | , | ||
false | , | ||
false | |||
) |
◆ isCalleeOperand()
◆ isEligibleFunction()
◆ isEligibleInstructionForConstantSharing()
◆ STATISTIC() [1/4]
STATISTIC | ( | NumAnalyzedFunctions | , |
---|---|---|---|
"Number of functions that are analyzed" | |||
) |
◆ STATISTIC() [2/4]
STATISTIC | ( | NumAnalyzedModues | , |
---|---|---|---|
"Number of modules that are analyzed" | |||
) |
◆ STATISTIC() [3/4]
STATISTIC | ( | NumEligibleFunctions | , |
---|---|---|---|
"Number of functions that are eligible" | |||
) |
◆ STATISTIC() [4/4]
STATISTIC | ( | NumMergedFunctions | , |
---|---|---|---|
"Number of functions that are actually merged using function hash" | |||
) |