LLVM  4.0.0
Classes | Namespaces | Macros | Enumerations | Functions | Variables
FunctionAttrs.cpp File Reference

This file implements interprocedural passes which walk the call-graph deducing and/or propagating function attributes. More...

#include "llvm/Transforms/IPO/FunctionAttrs.h"
#include "llvm/Transforms/IPO.h"
#include "llvm/ADT/SCCIterator.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/BasicAliasAnalysis.h"
#include "llvm/Analysis/CallGraph.h"
#include "llvm/Analysis/CallGraphSCCPass.h"
#include "llvm/Analysis/CaptureTracking.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
Include dependency graph for FunctionAttrs.cpp:

Go to the source code of this file.

Classes

struct  llvm::GraphTraits< ArgumentGraphNode * >
 
struct  llvm::GraphTraits< ArgumentGraph * >
 

Namespaces

 llvm
 Compute iterated dominance frontiers using a linear time algorithm.
 

Macros

#define DEBUG_TYPE   "functionattrs"
 

Enumerations

enum  MemoryAccessKind
 The three kinds of memory access relevant to 'readonly' and 'readnone' attributes. More...
 

Functions

 STATISTIC (NumReadNone,"Number of functions marked readnone")
 
 STATISTIC (NumReadOnly,"Number of functions marked readonly")
 
 STATISTIC (NumNoCapture,"Number of arguments marked nocapture")
 
 STATISTIC (NumReturned,"Number of arguments marked returned")
 
 STATISTIC (NumReadNoneArg,"Number of arguments marked readnone")
 
 STATISTIC (NumReadOnlyArg,"Number of arguments marked readonly")
 
 STATISTIC (NumNoAlias,"Number of function returns marked noalias")
 
 STATISTIC (NumNonNullReturn,"Number of function returns marked nonnull")
 
 STATISTIC (NumNoRecurse,"Number of functions marked as norecurse")
 
static MemoryAccessKind checkFunctionMemoryAccess (Function &F, AAResults &AAR, const SCCNodeSet &SCCNodes)
 
template<typename AARGetterT >
static bool addReadAttrs (const SCCNodeSet &SCCNodes, AARGetterT AARGetter)
 Deduce readonly/readnone attributes for the SCC. More...
 
static Attribute::AttrKind determinePointerReadAttrs (Argument *A, const SmallPtrSet< Argument *, 8 > &SCCNodes)
 Returns Attribute::None, Attribute::ReadOnly or Attribute::ReadNone. More...
 
static bool addArgumentReturnedAttrs (const SCCNodeSet &SCCNodes)
 Deduce returned attributes for the SCC. More...
 
static bool addArgumentAttrs (const SCCNodeSet &SCCNodes)
 Deduce nocapture attributes for the SCC. More...
 
static bool isFunctionMallocLike (Function *F, const SCCNodeSet &SCCNodes)
 Tests whether a function is "malloc-like". More...
 
static bool addNoAliasAttrs (const SCCNodeSet &SCCNodes)
 Deduce noalias attributes for the SCC. More...
 
static bool isReturnNonNull (Function *F, const SCCNodeSet &SCCNodes, bool &Speculative)
 Tests whether this function is known to not return null. More...
 
static bool addNonNullAttrs (const SCCNodeSet &SCCNodes)
 Deduce nonnull attributes for the SCC. More...
 
static bool removeConvergentAttrs (const SCCNodeSet &SCCNodes)
 Remove the convergent attribute from all functions in the SCC if every callsite within the SCC is not convergent (except for calls to functions within the SCC). More...
 
static bool setDoesNotRecurse (Function &F)
 
static bool addNoRecurseAttrs (const SCCNodeSet &SCCNodes)
 
 INITIALIZE_PASS_BEGIN (PostOrderFunctionAttrsLegacyPass,"functionattrs","Deduce function attributes", false, false) INITIALIZE_PASS_END(PostOrderFunctionAttrsLegacyPass
 
template<typename AARGetterT >
static bool runImpl (CallGraphSCC &SCC, AARGetterT AARGetter)
 
 INITIALIZE_PASS_BEGIN (ReversePostOrderFunctionAttrsLegacyPass,"rpo-functionattrs","Deduce function attributes in RPO", false, false) INITIALIZE_PASS_END(ReversePostOrderFunctionAttrsLegacyPass
 
static bool addNoRecurseAttrsTopDown (Function &F)
 
static bool deduceFunctionAttributeInRPO (Module &M, CallGraph &CG)
 

Variables

 functionattrs
 
Deduce function attributes
 
Deduce function false
 
rpo Deduce function attributes in RPO
 

Detailed Description

This file implements interprocedural passes which walk the call-graph deducing and/or propagating function attributes.

Definition in file FunctionAttrs.cpp.

Macro Definition Documentation

#define DEBUG_TYPE   "functionattrs"

Definition at line 40 of file FunctionAttrs.cpp.

Enumeration Type Documentation

The three kinds of memory access relevant to 'readonly' and 'readnone' attributes.

Definition at line 59 of file FunctionAttrs.cpp.

Function Documentation

static bool addArgumentAttrs ( const SCCNodeSet &  SCCNodes)
static
static bool addArgumentReturnedAttrs ( const SCCNodeSet &  SCCNodes)
static
static bool addNoAliasAttrs ( const SCCNodeSet &  SCCNodes)
static
static bool addNonNullAttrs ( const SCCNodeSet &  SCCNodes)
static
static bool addNoRecurseAttrs ( const SCCNodeSet &  SCCNodes)
static
static bool addNoRecurseAttrsTopDown ( Function F)
static
template<typename AARGetterT >
static bool addReadAttrs ( const SCCNodeSet &  SCCNodes,
AARGetterT  AARGetter 
)
static
static MemoryAccessKind checkFunctionMemoryAccess ( Function F,
AAResults AAR,
const SCCNodeSet &  SCCNodes 
)
static
static bool deduceFunctionAttributeInRPO ( Module M,
CallGraph CG 
)
static
static Attribute::AttrKind determinePointerReadAttrs ( Argument A,
const SmallPtrSet< Argument *, 8 > &  SCCNodes 
)
static

Returns Attribute::None, Attribute::ReadOnly or Attribute::ReadNone.

Definition at line 354 of file FunctionAttrs.cpp.

References llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::arg_begin(), llvm::Function::arg_begin(), llvm::Function::arg_size(), assert(), llvm::Call, llvm::SmallPtrSetImpl< PtrType >::count(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::data_operands_size(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::doesNotAccessMemory(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::doesNotCapture(), llvm::SmallVectorBase::empty(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::getCalledFunction(), llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::getNumArgOperands(), llvm::Instruction::getOpcode(), llvm::Value::getType(), llvm::Argument::hasInAllocaAttr(), I, llvm::SmallSet< T, N, C >::insert(), llvm::Function::isVarArg(), llvm::Type::isVoidTy(), isVolatile(), llvm::SPII::Load, llvm::Attribute::None, llvm::CallSiteBase< FunTy, BBTy, ValTy, UserTy, UseTy, InstrTy, CallTy, InvokeTy, IterTy >::onlyReadsMemory(), llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), AMDGPU::RuntimeMD::KernelArg::ReadOnly, llvm::MipsISD::Ret, llvm::MCID::Select, and llvm::Value::uses().

Referenced by addArgumentAttrs().

INITIALIZE_PASS_BEGIN ( PostOrderFunctionAttrsLegacyPass  ,
"functionattrs"  ,
"Deduce function attributes ,
false  ,
false   
)
INITIALIZE_PASS_BEGIN ( ReversePostOrderFunctionAttrsLegacyPass  ,
"rpo-functionattrs ,
"Deduce function attributes in RPO ,
false  ,
false   
)
static bool isFunctionMallocLike ( Function F,
const SCCNodeSet &  SCCNodes 
)
static
static bool isReturnNonNull ( Function F,
const SCCNodeSet &  SCCNodes,
bool Speculative 
)
static
static bool removeConvergentAttrs ( const SCCNodeSet &  SCCNodes)
static
template<typename AARGetterT >
static bool runImpl ( CallGraphSCC SCC,
AARGetterT  AARGetter 
)
static
static bool setDoesNotRecurse ( Function F)
static
STATISTIC ( NumReadNone  ,
"Number of functions marked readnone"   
)
STATISTIC ( NumReadOnly  ,
"Number of functions marked readonly"   
)
STATISTIC ( NumNoCapture  ,
"Number of arguments marked nocapture"   
)
STATISTIC ( NumReturned  ,
"Number of arguments marked returned"   
)
STATISTIC ( NumReadNoneArg  ,
"Number of arguments marked readnone"   
)
STATISTIC ( NumReadOnlyArg  ,
"Number of arguments marked readonly"   
)
STATISTIC ( NumNoAlias  ,
"Number of function returns marked noalias"   
)
STATISTIC ( NumNonNullReturn  ,
"Number of function returns marked nonnull"   
)
STATISTIC ( NumNoRecurse  ,
"Number of functions marked as norecurse"   
)

Variable Documentation

Deduce function attributes

Definition at line 1118 of file FunctionAttrs.cpp.

Referenced by llvm::LTOModule::getSymbolAttributes().

rpo Deduce function attributes in false

Definition at line 1118 of file FunctionAttrs.cpp.

rpo functionattrs

Definition at line 1118 of file FunctionAttrs.cpp.

rpo Deduce function attributes in RPO

Definition at line 1203 of file FunctionAttrs.cpp.