LLVM: lib/Transforms/Utils/InlineFunction.cpp File Reference (original) (raw)
Go to the source code of this file.
| Macros | |
|---|---|
| #define | DEBUG_TYPE "inline-function" |
| #define | DEBUG_TYPE "assignment-tracking" |
| #define | DEBUG_TYPE "inline-function" |
| Functions | |
|---|---|
| static IntrinsicInst * | getConvergenceEntry (BasicBlock &BB) |
| static Value * | getParentPad (Value *EHPad) |
| Helper for getUnwindDestToken/getUnwindDestTokenHelper. | |
| static Value * | getUnwindDestTokenHelper (Instruction *EHPad, UnwindDestMemoTy &MemoMap) |
| Helper for getUnwindDestToken that does the descendant-ward part of the search. | |
| static Value * | getUnwindDestToken (Instruction *EHPad, UnwindDestMemoTy &MemoMap) |
| Given an EH pad, find where it unwinds. | |
| static BasicBlock * | HandleCallsInBlockInlinedThroughInvoke (BasicBlock *BB, BasicBlock *UnwindEdge, UnwindDestMemoTy *FuncletUnwindMap=nullptr) |
| When we inline a basic block into an invoke, we have to turn all of the calls that can throw into invokes. | |
| static void | HandleInlinedLandingPad (InvokeInst *II, BasicBlock *FirstNewBlock, ClonedCodeInfo &InlinedCodeInfo) |
| If we inlined an invoke site, we need to convert calls in the body of the inlined function into invokes. | |
| static void | HandleInlinedEHPad (InvokeInst *II, BasicBlock *FirstNewBlock, ClonedCodeInfo &InlinedCodeInfo) |
| If we inlined an invoke site, we need to convert calls in the body of the inlined function into invokes. | |
| static bool | haveCommonPrefix (MDNode *MIBStackContext, MDNode *CallsiteStackContext) |
| static void | removeMemProfMetadata (CallBase *Call) |
| static void | removeCallsiteMetadata (CallBase *Call) |
| static void | updateMemprofMetadata (CallBase *CI, const std::vector< Metadata * > &MIBList, OptimizationRemarkEmitter *ORE) |
| static void | propagateMemProfHelper (const CallBase *OrigCall, CallBase *ClonedCall, MDNode *InlinedCallsiteMD, OptimizationRemarkEmitter *ORE) |
| static void | propagateMemProfMetadata (Function *Callee, CallBase &CB, bool ContainsMemProfMetadata, const ValueMap< const Value *, WeakTrackingVH > &VMap, OptimizationRemarkEmitter *ORE) |
| static void | PropagateCallSiteMetadata (CallBase &CB, Function::iterator FStart, Function::iterator FEnd) |
| When inlining a call site that has !llvm.mem.parallel_loop_access, !llvm.access.group, !alias.scope or !noalias metadata, that metadata should be propagated to all memory-accessing cloned instructions. | |
| static void | PropagateOperandBundles (Function::iterator InlinedBB, Instruction *CallSiteEHPad) |
| Bundle operands of the inlined function must be added to inlined call sites. | |
| static void | AddAliasScopeMetadata (CallBase &CB, ValueToValueMapTy &VMap, const DataLayout &DL, AAResults *CalleeAAR, ClonedCodeInfo &InlinedFunctionInfo) |
| If the inlined function has noalias arguments, then add new alias scopes for each noalias argument, tag the mapped noalias parameters with noalias metadata specifying the new scope, and tag all non-derived loads, stores and memory intrinsics with the new alias scopes. | |
| static bool | MayContainThrowingOrExitingCallAfterCB (CallBase *Begin, ReturnInst *End) |
| static void | AddParamAndFnBasicAttributes (const CallBase &CB, ValueToValueMapTy &VMap, ClonedCodeInfo &InlinedFunctionInfo) |
| static AttrBuilder | IdentifyValidUBGeneratingAttributes (CallBase &CB) |
| static AttrBuilder | IdentifyValidPoisonGeneratingAttributes (CallBase &CB) |
| static void | AddReturnAttributes (CallBase &CB, ValueToValueMapTy &VMap, ClonedCodeInfo &InlinedFunctionInfo) |
| static void | AddAlignmentAssumptions (CallBase &CB, InlineFunctionInfo &IFI) |
| If the inlined function has non-byval align arguments, then add @llvm.assume-based alignment assumptions to preserve this information. | |
| static void | HandleByValArgumentInit (Type *ByValType, Value *Dst, Value *Src, MaybeAlign SrcAlign, Module *M, BasicBlock *InsertBlock, InlineFunctionInfo &IFI, Function *CalledFunc) |
| static Value * | HandleByValArgument (Type *ByValType, Value *Arg, Instruction *TheCall, const Function *CalledFunc, InlineFunctionInfo &IFI, MaybeAlign ByValAlignment) |
| When inlining a call site that has a byval argument, we have to make the implicit memcpy explicit by adding it. | |
| static bool | isUsedByLifetimeMarker (Value *V) |
| static bool | hasLifetimeMarkers (AllocaInst *AI) |
| static bool | allocaWouldBeStaticInEntry (const AllocaInst *AI) |
| Return the result of AI->isStaticAlloca() if AI were moved to the entry block. | |
| static DebugLoc | inlineDebugLoc (DebugLoc OrigDL, DILocation *InlinedAt, LLVMContext &Ctx, DenseMap< const MDNode *, MDNode * > &IANodes) |
| Returns a DebugLoc for a new DILocation which is a clone of OrigDL inlined at InlinedAt. | |
| static void | fixupLineNumbers (Function *Fn, Function::iterator FI, Instruction *TheCall, bool CalleeHasDebugInfo) |
| Update inlined instructions' line numbers to to encode location where these instructions are inlined. | |
| static at::StorageToVarsMap | collectEscapedLocals (const DataLayout &DL, const CallBase &CB) |
| Find Alloca and linked DbgAssignIntrinsic for locals escaped by CB. | |
| static void | trackInlinedStores (Function::iterator Start, Function::iterator End, const CallBase &CB) |
| static void | fixupAssignments (Function::iterator Start, Function::iterator End) |
| Update inlined instructions' DIAssignID metadata. | |
| static void | updateCallerBFI (BasicBlock *CallSiteBlock, const ValueToValueMapTy &VMap, BlockFrequencyInfo *CallerBFI, BlockFrequencyInfo *CalleeBFI, const BasicBlock &CalleeEntryBlock) |
| Update the block frequencies of the caller after a callee has been inlined. | |
| static void | updateCallProfile (Function *Callee, const ValueToValueMapTy &VMap, const ProfileCount &CalleeEntryCount, const CallBase &TheCall, ProfileSummaryInfo *PSI, BlockFrequencyInfo *CallerBFI) |
| Update the branch metadata for cloned call instructions. | |
| static void | inlineRetainOrClaimRVCalls (CallBase &CB, objcarc::ARCInstKind RVCallKind, const SmallVectorImpl< ReturnInst * > &Returns) |
| An operand bundle "clang.arc.attachedcall" on a call indicates the call result is implicitly consumed by a call to retainRV or claimRV immediately after the call. | |
| static std::pair< std::vector< int64_t >, std::vector< int64_t > > | remapIndices (Function &Caller, BasicBlock *StartBB, PGOContextualProfile &CtxProf, uint32_t CalleeCounters, uint32_t CalleeCallsites) |
| Variables | |
|---|---|
| static cl::opt< bool > | EnableNoAliasConversion ("enable-noalias-to-md-conversion", cl::init(true), cl::Hidden, cl::desc("Convert noalias attributes to metadata during inlining.")) |
| static cl::opt< bool > | UseNoAliasIntrinsic ("use-noalias-intrinsic-during-inlining", cl::Hidden, cl::init(true), cl::desc("Use the llvm.experimental.noalias.scope.decl " "intrinsic during inlining.")) |
| static cl::opt< bool > | PreserveAlignmentAssumptions ("preserve-alignment-assumptions-during-inlining", cl::init(false), cl::Hidden, cl::desc("Convert align attributes to assumptions during inlining.")) |
| static cl::opt< unsigned > | InlinerAttributeWindow ("max-inst-checked-for-throw-during-inlining", cl::Hidden, cl::desc("the maximum number of instructions analyzed for may throw during " "attribute inference in inlined body"), cl::init(4)) |
◆ DEBUG_TYPE [1/3]
#define DEBUG_TYPE "inline-function"
◆ DEBUG_TYPE [2/3]
#define DEBUG_TYPE "assignment-tracking"
◆ DEBUG_TYPE [3/3]
#define DEBUG_TYPE "inline-function"
◆ UnwindDestMemoTy
◆ AddAliasScopeMetadata()
If the inlined function has noalias arguments, then add new alias scopes for each noalias argument, tag the mapped noalias parameters with noalias metadata specifying the new scope, and tag all non-derived loads, stores and memory intrinsics with the new alias scopes.
Definition at line 1116 of file InlineFunction.cpp.
References A(), llvm::Function::args(), llvm::ValueMap< KeyT, ValueT, Config >::begin(), Call, llvm::capturesAnything(), llvm::MDNode::concatenate(), llvm::SmallPtrSetImpl< PtrType >::contains(), llvm::SmallPtrSetImpl< PtrType >::count(), llvm::MDBuilder::createAnonymousAliasScope(), llvm::MDBuilder::createAnonymousAliasScopeDomain(), DL, llvm::dyn_cast(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), EnableNoAliasConversion, llvm::ValueMap< KeyT, ValueT, Config >::end(), llvm::MDNode::get(), llvm::CallBase::getCalledFunction(), llvm::Function::getContext(), llvm::AAResults::getMemoryEffects(), llvm::Instruction::getMetadata(), llvm::Value::getName(), llvm::getUnderlyingObjects(), I, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::insert(), llvm::SmallPtrSetImpl< PtrType >::insert_range(), llvm::IRBuilder(), llvm::isa(), llvm::isEscapeSource(), llvm::isIdentifiedObject(), llvm::ClonedCodeInfo::isSimplified(), NoAliases, llvm::MemoryEffectsBase< LocationEnum >::onlyAccessesArgPointees(), llvm::MemoryEffectsBase< LocationEnum >::onlyAccessesInaccessibleMem(), llvm::CallBase::paramHasAttr(), llvm::PointerMayBeCapturedBefore(), llvm::Provenance, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::DominatorTreeBase< NodeT, IsPostDom >::recalculate(), llvm::Instruction::setMetadata(), llvm::SmallVectorTemplateCommon< T, typename >::size(), UseNoAliasIntrinsic, and llvm::utostr().
Referenced by llvm::InlineFunctionImpl().
◆ AddAlignmentAssumptions()
If the inlined function has non-byval align arguments, then add @llvm.assume-based alignment assumptions to preserve this information.
Definition at line 1672 of file InlineFunction.cpp.
References llvm::Function::args(), llvm::cast(), DL, llvm::CallBase::getArgOperand(), llvm::InlineFunctionInfo::GetAssumptionCache, llvm::CallBase::getCalledFunction(), llvm::CallBase::getCaller(), llvm::Instruction::getDataLayout(), llvm::getKnownAlignment(), llvm::IRBuilder(), PreserveAlignmentAssumptions, llvm::DominatorTreeBase< NodeT, IsPostDom >::recalculate(), and llvm::AssumptionCache::registerAssumption().
Referenced by llvm::InlineFunctionImpl().
◆ AddParamAndFnBasicAttributes()
Definition at line 1372 of file InlineFunction.cpp.
References llvm::CallBase::arg_size(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::dyn_cast(), llvm::dyn_cast_or_null(), E(), llvm::SmallVectorImpl< T >::emplace_back(), llvm::AttributeSet::get(), llvm::Argument::getArgNo(), llvm::CallBase::getCalledFunction(), llvm::Function::getContext(), llvm::Value::getContext(), llvm::CallBase::getParamAttr(), llvm::getUnderlyingObject(), I, llvm::ConstantRange::intersectWith(), llvm::ClonedCodeInfo::isSimplified(), llvm::Attribute::isValid(), llvm::ValueMap< KeyT, ValueT, Config >::lookup(), llvm::PatternMatch::m_ImmConstant(), llvm::PatternMatch::match(), and llvm::CallBase::paramHasAttr().
Referenced by llvm::InlineFunctionImpl().
◆ AddReturnAttributes()
Definition at line 1549 of file InlineFunction.cpp.
References llvm::cast(), llvm::dyn_cast(), llvm::dyn_cast_or_null(), llvm::CallBase::getCalledFunction(), llvm::Function::getContext(), llvm::User::getOperand(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::Attribute::getRange(), llvm::CallBase::hasRetAttr(), IdentifyValidPoisonGeneratingAttributes(), IdentifyValidUBGeneratingAttributes(), llvm::ConstantRange::intersectWith(), llvm::isa(), llvm::ClonedCodeInfo::isSimplified(), llvm::Attribute::isValid(), llvm::ValueMap< KeyT, ValueT, Config >::lookup(), and MayContainThrowingOrExitingCallAfterCB().
Referenced by llvm::InlineFunctionImpl().
◆ allocaWouldBeStaticInEntry()
◆ collectEscapedLocals()
Find Alloca and linked DbgAssignIntrinsic for locals escaped by CB.
Definition at line 1943 of file InlineFunction.cpp.
References llvm::CallBase::args(), assert(), llvm::sampleprof::Base, DL, llvm::dyn_cast(), llvm::errs(), llvm::for_each(), llvm::at::getDVRAssignmentMarkers(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), and LLVM_DEBUG.
Referenced by trackInlinedStores().
◆ fixupAssignments()
◆ fixupLineNumbers()
Update inlined instructions' line numbers to to encode location where these instructions are inlined.
Definition at line 1833 of file InlineFunction.cpp.
References allocaWouldBeStaticInEntry(), assert(), DL, llvm::dyn_cast(), llvm::dyn_cast_or_null(), llvm::Function::end(), llvm::DebugLoc::get(), llvm::Function::getContext(), llvm::MDNode::getContext(), llvm::Instruction::getDebugLoc(), llvm::MDNode::getDistinct(), llvm::DILocation::getWithoutAtom(), llvm::Function::hasFnAttribute(), I, inlineDebugLoc(), llvm::isa(), and llvm::updateLoopMetadataDebugLocations().
Referenced by llvm::InlineFunctionImpl().
◆ getConvergenceEntry()
◆ getParentPad()
◆ getUnwindDestToken()
Given an EH pad, find where it unwinds.
If it unwinds to an EH pad, return that pad instruction. If it unwinds to caller, return ConstantTokenNone. If it does not have a definitive unwind destination, return nullptr.
This routine gets invoked for calls in funclets in inlinees when inlining an invoke. Since many funclets don't have calls inside them, it's queried on-demand rather than building a map of pads to unwind dests up front. Determining a funclet's unwind dest may require recursively searching its descendants, and also ancestors and cousins if the descendants don't provide an answer. Since most funclets will have their unwind dest immediately available as the unwind dest of a catchswitch or cleanupret, this routine searches top-down from the given pad and then up. To avoid worst-case quadratic run-time given that approach, it uses a memo map to avoid re-processing funclet trees. The callers that rewrite the IR as they go take advantage of this, for correctness, by checking/forcing rewritten pads' entries to match the original callee view.
Definition at line 417 of file InlineFunction.cpp.
References assert(), llvm::cast(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::count(), llvm::SmallPtrSetImpl< PtrType >::count(), llvm::dyn_cast(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), getParentPad(), getUnwindDestTokenHelper(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::isa(), llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::Value::users().
Referenced by HandleCallsInBlockInlinedThroughInvoke(), HandleInlinedEHPad(), and llvm::InlineFunctionImpl().
◆ getUnwindDestTokenHelper()
Helper for getUnwindDestToken that does the descendant-ward part of the search.
Definition at line 265 of file InlineFunction.cpp.
References assert(), llvm::cast(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::count(), llvm::dyn_cast(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::ConstantTokenNone::get(), llvm::BasicBlock::getFirstNonPHIIt(), getParentPad(), llvm::isa(), llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::Value::users().
Referenced by getUnwindDestToken().
◆ HandleByValArgument()
When inlining a call site that has a byval argument, we have to make the implicit memcpy explicit by adding it.
Definition at line 1734 of file InlineFunction.cpp.
References DL, llvm::InlineFunctionInfo::GetAssumptionCache, llvm::DebugLoc::getCompilerGenerated(), llvm::Instruction::getFunction(), llvm::Value::getName(), llvm::getOrEnforceKnownAlignment(), llvm::Type::getPointerAddressSpace(), llvm::Value::getType(), llvm::Instruction::insertBefore(), llvm::Function::onlyReadsMemory(), llvm::Instruction::setDebugLoc(), llvm::InlineFunctionInfo::StaticAllocas, and llvm::MaybeAlign::valueOrOne().
Referenced by llvm::InlineFunctionImpl().
◆ HandleByValArgumentInit()
◆ HandleCallsInBlockInlinedThroughInvoke()
When we inline a basic block into an invoke, we have to turn all of the calls that can throw into invokes.
This function analyze BB to see if there are any calls, and if so, it rewrites them to be invokes that jump to InvokeDest and fills in the PHI nodes in that block with the values specified in InvokeDestPHIValues.
Definition at line 561 of file InlineFunction.cpp.
References assert(), llvm::cast(), llvm::changeToInvokeAndSplitBasicBlock(), llvm::CallBase::doesNotThrow(), llvm::dyn_cast(), F, llvm::CallBase::getCalledFunction(), llvm::CallBase::getOperandBundle(), getUnwindDestToken(), I, llvm::isa(), llvm::make_early_inc_range(), and llvm::LLVMContext::OB_funclet.
Referenced by HandleInlinedEHPad(), and HandleInlinedLandingPad().
◆ HandleInlinedEHPad()
If we inlined an invoke site, we need to convert calls in the body of the inlined function into invokes.
II is the invoke instruction being inlined. FirstNewBlock is the first block of the inlined code (the last block is the end of the function), and InlineCodeInfo is information about the code that got inlined.
Definition at line 677 of file InlineFunction.cpp.
References assert(), llvm::BasicBlock::begin(), llvm::cast(), llvm::ClonedCodeInfo::ContainsCalls, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::count(), llvm::CatchSwitchInst::Create(), llvm::CleanupReturnInst::Create(), llvm::dyn_cast(), E(), llvm::ConstantTokenNone::get(), llvm::BasicBlock::getFirstNonPHIIt(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::Value::getName(), llvm::BasicBlock::getParent(), getUnwindDestToken(), HandleCallsInBlockInlinedThroughInvoke(), I, II, llvm::isa(), llvm_unreachable, PHI, llvm::BasicBlock::phis(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::BasicBlock::removePredecessor(), llvm::Value::takeName(), and UpdatePHINodes().
Referenced by llvm::InlineFunctionImpl().
◆ HandleInlinedLandingPad()
If we inlined an invoke site, we need to convert calls in the body of the inlined function into invokes.
II is the invoke instruction being inlined. FirstNewBlock is the first block of the inlined code (the last block is the end of the function), and InlineCodeInfo is information about the code that got inlined.
Definition at line 620 of file InlineFunction.cpp.
References llvm::ClonedCodeInfo::ContainsCalls, llvm::dyn_cast(), E(), llvm::LandingPadInst::getClause(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::LandingPadInst::getNumClauses(), llvm::BasicBlock::getParent(), HandleCallsInBlockInlinedThroughInvoke(), I, II, llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::LandingPadInst::isCleanup(), and llvm::BasicBlock::removePredecessor().
Referenced by llvm::InlineFunctionImpl().
◆ hasLifetimeMarkers()
◆ haveCommonPrefix()
| bool haveCommonPrefix ( MDNode * MIBStackContext, MDNode * CallsiteStackContext ) | static |
|---|
◆ IdentifyValidPoisonGeneratingAttributes()
| AttrBuilder IdentifyValidPoisonGeneratingAttributes ( CallBase & CB) | static |
|---|
◆ IdentifyValidUBGeneratingAttributes()
| AttrBuilder IdentifyValidUBGeneratingAttributes ( CallBase & CB) | static |
|---|
◆ inlineDebugLoc()
◆ inlineRetainOrClaimRVCalls()
An operand bundle "clang.arc.attachedcall" on a call indicates the call result is implicitly consumed by a call to retainRV or claimRV immediately after the call.
This function inlines the retainRV/claimRV calls.
There are three cases to consider:
- If there is a call to autoreleaseRV that takes a pointer to the returned object in the callee return block, the autoreleaseRV call and the retainRV/claimRV call in the caller cancel out. If the call in the caller is a claimRV call, a call to objc_release is emitted.
- If there is a call in the callee return block that doesn't have operand bundle "clang.arc.attachedcall", the operand bundle on the original call is transferred to the call in the callee.
- Otherwise, a call to objc_retain is inserted if the call in the caller is a retainRV call.
Definition at line 2141 of file InlineFunction.cpp.
References llvm::CallBase::addOperandBundle(), assert(), llvm::dyn_cast(), llvm::objcarc::getAttachedARCFunction(), llvm::Value::getContext(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::User::getOperand(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::objcarc::GetRCIdentityRoot(), llvm::objcarc::hasAttachedCallOpBundle(), I, II, llvm::isa(), llvm::objcarc::isRetainOrClaimRV(), llvm::make_early_inc_range(), llvm::make_range(), llvm::LLVMContext::OB_clang_arc_attachedcall, and llvm::objcarc::RetainRV.
Referenced by llvm::InlineFunctionImpl().
◆ isUsedByLifetimeMarker()
| bool isUsedByLifetimeMarker ( Value * V) | static |
|---|
◆ MayContainThrowingOrExitingCallAfterCB()
◆ PropagateCallSiteMetadata()
◆ propagateMemProfHelper()
Definition at line 849 of file InlineFunction.cpp.
References assert(), llvm::MDNode::concatenate(), llvm::dyn_cast(), llvm::Instruction::getMetadata(), llvm::memprof::getMIBStackNode(), llvm::MDNode::getNumOperands(), haveCommonPrefix(), llvm::MDNode::operands(), removeCallsiteMetadata(), removeMemProfMetadata(), llvm::Instruction::setMetadata(), and updateMemprofMetadata().
Referenced by propagateMemProfMetadata().
◆ propagateMemProfMetadata()
◆ PropagateOperandBundles()
◆ remapIndices()
Definition at line 2235 of file InlineFunction.cpp.
References llvm::PGOContextualProfile::allocateNextCallsiteIndex(), llvm::PGOContextualProfile::allocateNextCounterIndex(), assert(), Changed, llvm::dyn_cast(), llvm::CtxProfAnalysis::getBBInstrumentation(), I, llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), llvm::is_contained(), llvm::isa(), llvm::isa_and_nonnull(), llvm::make_early_inc_range(), and llvm::successors().
Referenced by llvm::InlineFunction().
◆ removeCallsiteMetadata()
| void removeCallsiteMetadata ( CallBase * Call) | static |
|---|
◆ removeMemProfMetadata()
| void removeMemProfMetadata ( CallBase * Call) | static |
|---|
◆ trackInlinedStores()
◆ updateCallerBFI()
◆ updateCallProfile()
◆ updateMemprofMetadata()
◆ EnableNoAliasConversion
| cl::opt< bool > EnableNoAliasConversion("enable-noalias-to-md-conversion", cl::init(true), cl::Hidden, cl::desc("Convert noalias attributes to metadata during inlining.")) ( "enable-noalias-to-md-conversion" , cl::init(true) , cl::Hidden , cl::desc("Convert noalias attributes to metadata during inlining.") ) | static |
|---|
◆ InlinerAttributeWindow
| cl::opt< unsigned > InlinerAttributeWindow("max-inst-checked-for-throw-during-inlining", cl::Hidden, cl::desc("the maximum number of instructions analyzed for may throw during " "attribute inference in inlined body"), cl::init(4)) ( "max-inst-checked-for-throw-during-inlining" , cl::Hidden , cl::desc("the maximum number of instructions analyzed for may throw during " "attribute inference in inlined body") , cl::init(4) ) | static |
|---|
◆ PreserveAlignmentAssumptions
| cl::opt< bool > PreserveAlignmentAssumptions("preserve-alignment-assumptions-during-inlining", cl::init(false), cl::Hidden, cl::desc("Convert align attributes to assumptions during inlining.")) ( "preserve-alignment-assumptions-during-inlining" , cl::init(false) , cl::Hidden , cl::desc("Convert align attributes to assumptions during inlining.") ) | static |
|---|
◆ UseNoAliasIntrinsic
| cl::opt< bool > UseNoAliasIntrinsic("use-noalias-intrinsic-during-inlining", cl::Hidden, cl::init(true), cl::desc("Use the llvm.experimental.noalias.scope.decl " "intrinsic during inlining.")) ( "use-noalias-intrinsic-during-inlining" , cl::Hidden , cl::init(true) , cl::desc("Use the llvm.experimental.noalias.scope.decl " "intrinsic during inlining.") ) | static |
|---|