LLVM
8.0.1
|
This file defines late ObjC ARC optimizations. More...
#include "ARCRuntimeEntryPoints.h"
#include "DependencyAnalysis.h"
#include "ObjCARC.h"
#include "ProvenanceAnalysis.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/EHPersonalities.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Operator.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "objc-arc-contract" |
Functions | |
STATISTIC (NumPeeps, "Number of calls peephole-optimized") | |
STATISTIC (NumStoreStrongs, "Number objc_storeStrong calls formed") | |
static StoreInst * | findSafeStoreForStoreStrongContraction (LoadInst *Load, Instruction *Release, ProvenanceAnalysis &PA, AliasAnalysis *AA) |
static Instruction * | findRetainForStoreStrongContraction (Value *New, StoreInst *Store, Instruction *Release, ProvenanceAnalysis &PA) |
static CallInst * | createCallInst (Value *Func, ArrayRef< Value *> Args, const Twine &NameStr, Instruction *InsertBefore, const DenseMap< BasicBlock *, ColorVector > &BlockColors) |
Create a call instruction with the correct funclet token. More... | |
INITIALIZE_PASS_BEGIN (ObjCARCContract, "objc-arc-contract", "ObjC ARC contraction", false, false) INITIALIZE_PASS_END(ObjCARCContract | |
Variables | |
objc arc | contract |
objc arc ObjC ARC | contraction |
objc arc ObjC ARC | false |
This file defines late ObjC ARC optimizations.
ARC stands for Automatic Reference Counting and is a system for managing reference counts for objects in Objective C.
This specific file mainly deals with ``contracting'' multiple lower level operations into singular higher level operations through pattern matching.
WARNING: This file knows about certain library functions. It recognizes them by name, and hardwires knowledge of their semantics.
WARNING: This file knows about how certain Objective-C library functions are used. Naive LLVM IR transformations which would otherwise be behavior-preserving may break these assumptions.
Definition in file ObjCARCContract.cpp.
Definition at line 44 of file ObjCARCContract.cpp.
|
static |
Create a call instruction with the correct funclet token.
Should be used instead of calling CallInst::Create directly.
Definition at line 317 of file ObjCARCContract.cpp.
References Arg, llvm::AMDGPU::HSAMD::Kernel::Key::Args, assert(), llvm::objcarc::Autorelease, llvm::objcarc::AutoreleaseRV, B, llvm::BasicBlock::back(), llvm::BasicBlock::begin(), C, llvm::Function::callsFunctionThatReturnsTwice(), llvm::objcarc::ClaimRV, llvm::classifyEHPersonality(), llvm::colorEHFunclets(), llvm::CallInst::Create(), llvm::dbgs(), llvm::dyn_cast(), E, llvm::SmallVectorImpl< T >::emplace_back(), llvm::SmallVectorBase::empty(), llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::empty(), llvm::objcarc::EnableARCOpts, llvm::Instruction::eraseFromParent(), llvm::objcarc::EraseInstruction(), llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::find(), findRetainForStoreStrongContraction(), findSafeStoreForStoreStrongContraction(), llvm::TinyPtrVector< EltTy >::front(), llvm::objcarc::FusedRetainAutorelease, llvm::objcarc::FusedRetainAutoreleaseRV, llvm::InlineAsm::get(), llvm::Use::get(), llvm::FunctionType::get(), llvm::ConstantPointerNull::get(), llvm::CallBase::getArgOperand(), llvm::objcarc::GetArgRCIdentityRoot(), llvm::objcarc::GetBasicARCInstKind(), llvm::Value::getContext(), llvm::Instruction::getDebugLoc(), llvm::objcarc::getEquivalentPHIs(), llvm::BasicBlock::getFirstNonPHI(), llvm::PHINode::getIncomingValueNumForOperand(), llvm::Type::getInt8Ty(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::Use::getOperandNo(), llvm::PHINode::getOperandNumForIncomingValue(), llvm::Instruction::getParent(), llvm::Function::getPersonalityFn(), llvm::getPointerOperand(), llvm::objcarc::GetRCIdentityRoot(), llvm::BasicBlock::getSinglePredecessor(), llvm::BasicBlock::getTerminator(), getType(), llvm::Value::getType(), llvm::PointerType::getUnqual(), llvm::Use::getUser(), llvm::StoreInst::getValueOperand(), llvm::Type::getVoidTy(), llvm::Function::hasPersonalityFn(), INITIALIZE_PASS_BEGIN(), INITIALIZE_PASS_DEPENDENCY, llvm::objcarc::InitWeak, llvm::inst_begin(), llvm::inst_end(), llvm::objcarc::IntrinsicUser, llvm::objcarc::IsNoopInstruction(), llvm::objcarc::IsNullOrUndef(), llvm::isScopedEHPersonality(), llvm::Function::isVarArg(), LLVM_DEBUG, LLVM_FALLTHROUGH, llvm::SPII::Load, llvm::objcarc::None, llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T >::push_back(), llvm::objcarc::Release, llvm::Value::replaceAllUsesWith(), llvm::objcarc::Retain, llvm::objcarc::RetainRV, runOnFunction(), second, llvm::Use::set(), llvm::Instruction::setDebugLoc(), llvm::CallBase::setDoesNotThrow(), llvm::TinyPtrVector< EltTy >::size(), llvm::SPII::Store, llvm::objcarc::StoreStrong, llvm::Value::use_begin(), llvm::Value::use_end(), llvm::objcarc::User, and llvm::Value::users().
|
static |
Definition at line 290 of file ObjCARCContract.cpp.
References llvm::BasicBlock::begin(), llvm::objcarc::CanDecrementRefCount(), llvm::objcarc::GetArgRCIdentityRoot(), llvm::objcarc::GetBasicARCInstKind(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::Instruction::getParent(), I, and llvm::objcarc::Retain.
Referenced by createCallInst().
|
static |
Definition at line 203 of file ObjCARCContract.cpp.
References llvm::objcarc::CanUse(), llvm::dyn_cast(), E, llvm::BasicBlock::end(), llvm::MemoryLocation::get(), llvm::objcarc::GetBasicARCInstKind(), llvm::AAResults::getModRefInfo(), llvm::Instruction::getParent(), llvm::StoreInst::getPointerOperand(), I, llvm::isModSet(), llvm::objcarc::IsRetain(), llvm::StoreInst::isSimple(), llvm::MemoryLocation::Ptr, llvm::SPII::Store, and llvm::Value::stripPointerCasts().
Referenced by createCallInst().
INITIALIZE_PASS_BEGIN | ( | ObjCARCContract | , |
"objc-arc-contract" | , | ||
"ObjC ARC contraction" | , | ||
false | , | ||
false | |||
) |
Referenced by createCallInst().
STATISTIC | ( | NumPeeps | , |
"Number of calls peephole-optimized" | |||
) |
STATISTIC | ( | NumStoreStrongs | , |
"Number objc_storeStrong calls formed" | |||
) |
objc arc contract |
Definition at line 720 of file ObjCARCContract.cpp.
objc arc ObjC ARC contraction |
Definition at line 720 of file ObjCARCContract.cpp.
objc arc ObjC ARC false |
Definition at line 720 of file ObjCARCContract.cpp.